【问题标题】:IsXValueIndexed causing graph lines to not drawIsXValueIndexed 导致图形线不绘制
【发布时间】:2018-11-19 00:04:34
【问题描述】:

所以有一个包含 2 个图表区域和 3 个系列的图表。顶部图表区域有 2 个系列。第一个系列显示了一段时间内的价格,顶部图表区域的第二个系列显示了同一时间的每股收益

底部图表区域有 1 个系列,同时显示交易量。

所有 3 个系列的分数都相同。所有 3 系列 XValueType 都设置为 Date。

当数据是每日股价时,周末有跳空,想打压。因此,应该将 IsXValueIndexed 设置为 true。如果我们这样做,图表会呈现,但在成交量图表的价格图表中都没有显示任何线条。

我的理解是,要让 IsXValueIndexed 工作,每个系列都必须具有相同数量的点,并且在 X 轴的同一点处具有相同的日期。他们有。

我还能错过什么?

【问题讨论】:

  • 很难说我们什么时候看不到任何代码、任何数据或图表(当然是在绘制时,或两者兼而有之)。
  • 如果您能提供minimal reproducible example,那就太好了。

标签: c# winforms charts


【解决方案1】:

您描述的效果的唯一解释是您为 x 轴设置了 Maximum&Minimum 值。

MSDN:

Series.IsXValueIndexed

获取或设置一个标志,指示数据点索引是否将被 用于 X 值

你得到了正确的其他规则(例如系列对齐),但这个简单的陈述意味着 实际的 x 值现在被 忽略;它们仍然可以用于格式化标签和计算内容(见下文!),但是当涉及到沿轴的数据点布局时,它们都被索引0,1,2..

因此,您为XAxis.Minimum&Maximum 设置的任何值都将不再按预期工作:您内部积分中的DateTimes巨大 双倍;除非您的日期是从DateTime(0001 年 1 月 1 日)时间开始的,否则索引永远无法到达那里。

您可以通过重置Minimum/Maximum 值进行测试:

 Axis ax = someChartArea.AxisX;

 ax.Minimum = double.NaN;
 ax.Maximum = double.NaN;

但如果你设置了它们,你可能需要它们。因此,您可能需要计算要使用的索引;这是一个例子:

Series s = yourSeries;

var p1 = s.Points.Where(x => x.XValue > ax.Minimum).First();
var p2 = s.Points.Where(x => x.XValue <= ax.Maximum).Last();

ax.Minimum = s.Points.IndexOf(p1);
ax.Maximum = s.Points.IndexOf(p2) + 1;

但也许一个更简单的方案会做得更好或更好。分页..

让我们看看:

【讨论】:

  • 就是这样。非常感谢。我所要做的就是摆脱为 X 轴设置最小值和最大值,它现在可以工作了。周末过去了,图表完全呈现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2018-07-06
  • 1970-01-01
相关资源
最近更新 更多