当通过将Series.IsXValueIndexed
设置为true
图表来设置要编制索引的Series
时,需要对齐所有Series
:
如果要显示多个系列,并且至少一个系列使用 索引 X 值,则所有序列必须对齐 — 也就是说,具有 相同数量的数据点,并且相应的点必须具有 相同的 X 值。
如何在任何Series
中将必要的Emtpy DataPoints
添加到它们缺少的插槽中?
此例程首先收集doubles
集合中所有Series
中的所有值。
然后它遍历所有Series
和所有值,并插入缺少的空DataPoints
:
void AlignSeries(Chart chart)
{
var allValues = chart.Series.SelectMany(s => s.Points)
.Select(x=>x.XValue).Distinct().ToList();
foreach (Series series in chart.Series)
{
int px = 0; //insertion index
foreach(double d in allValues )
{
var p = series.Points.FirstOrDefault(x=> x.XValue == d);
if (p == null) // this value is missing
{
DataPoint dp = new DataPoint(d, double.NaN);
dp.IsEmpty = true;
series.Points.Insert(px, dp);
}
px++;
}
}
}
请注意,代码假定 ..
您的 x 值设置正确,即它们是作为
numbers
或DateTimes
添加的。如果将它们添加为strings
则它们都是0
的,索引毫无意义。DataPoints
按升序添加。情况并非总是如此,尤其是在绘制LineCharts
时。但是,索引这些也没有意义。
另请注意,您可以通过在 Series.EmptyPointStyle
中设置属性来设置多个选项,以处理Series
中的Empty DataPoints
,该属性派生自 DataPointCustomProperties
。
因此,您可以像这样设置他们的Color
:
someSeries.EmptyPointStyle.Color = Color.Red;