所以有一个包含 2 个图表区域和 3 个系列的图表。顶部图表区域有 2 个系列。第一个系列显示随时间变化的价格,顶部图表区域中的第二个系列显示同一时间的每股 yield
底部图表区域有 1 个系列,同时显示交易量。
所有 3 个系列的分数相同。所有 3 个系列的 XValueType 都设置为 Date。
当数据为日线时股价周末有跳空并想打压。所以应该做的是将 IsXValueIndexed 设置为 true。如果我们这样做,图表会呈现,但在成交量图表的价格图表中都不会显示任何线条。
我的理解是,要使 IsXValueIndexed 正常工作,每个系列都必须具有相同数量的点,并且所有点都在 X 轴的同一点上具有相同的日期。他们这样做。
我还缺少什么?
最佳答案
对您描述的效果的唯一解释是您为 x 轴设置了 Maximum&Minimum
值。
MSDN:
Series.IsXValueIndexed
Gets or sets a flag that indicates whether data point indices will be used for the X-values
您的其他规则(关于例如系列对齐)是正确的,但是这个简单的陈述意味着实际的 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;
但也许一个更简单的方案会做得更好或更好。分页..
让我们看看:
关于c# - IsXValueIndexed 导致图形线条无法绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768915/