IsXValueIndexed导致图形线不绘制

时间:2018-06-08 22:00:33

标签: c# winforms charts

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

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

所有3个系列都有相同的积分。所有3系列XValueType都设置为日期。

当数据是每日股票价格时,周末存在缺口并且想要抑制。所以应该这样做是将IsXValueIndexed设置为true。如果我们这样做,图表会呈现,但是没有一条线显示在体积图的价格图表中。

我的理解是IsXValueIndexed工作每个系列必须具有相同数量的点,所有点在X轴的同一点具有相同的日期。他们这样做。

我还能错过什么?

1 个答案:

答案 0 :(得分:0)

您描述的效果的唯一解释是您为x轴设置了0,1,2..值。

MSDN:

  

<强> Series.IsXValueIndexed

     

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

你有其他规则(例如关于系列对齐),但这个简单的陈述暗示实际x值现在被忽视;它们仍然可以用于格式化标签和计算内容(见下文!),但是当涉及沿轴的数据点布局时,它们全部被索引XAxis.Minimum&Maximum

取代

因此,您为DateTimes设置的任何值都将无法按预期工作:内部点DateTime 巨大加倍;除非您的日期是Minimum/Maximum(0001年1月1日)时间的开始,否则索引无法到达那里。

您可以通过重置 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;

但是如果你设置了它们,你可能需要它们。所以你可能需要计算要使用的指数;这是一个例子:

position: relative;

但也许一个更简单的方案可以做得更好或更好。寻呼..

让我们来看看:

playground