c# - IsXValueIndexed 导致图形线条无法绘制

标签 c# winforms charts

所以有一个包含 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;

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

让我们看看:

enter image description here

关于c# - IsXValueIndexed 导致图形线条无法绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768915/

相关文章:

c# - 如何让控件在窗口最大化时自行调整大小?

c# - WinForms 中使用 MVP 架构的 BackGroundWorker 最佳实践

swift - 如何使用 danielgindi/Charts 库和 Swift 3.0 绘制条形图

javascript - 使用 JS 库生成图表

algorithm - Excel图表平滑算法

c# - 林克 : select value in a datatable column

c# - 有什么方法可以在 L2S 身份映射中查找项目?

c# - 使用 Entity Framework Code First 时,向根本未映射到数据库表的类添加属性是否可以接受?

c# - DataGridView 行在提交更改后仍然是脏的

wpf - 我应该如何在 .NET Windows 应用程序中使用 BizTalk 的业务规则引擎?