如何对齐图表中的索引系列

How to align indexed Series in a Chart

当通过将 Series.IsXValueIndexed 设置为 trueSeries 设置为 索引 时,图表需要所有 Series 对齐

If you are displaying multiple series and at least one series uses indexed X-values, then all series must be aligned — that is, have the same number of data points—and the corresponding points must have the same X-values.

如何将必要的 Emtpy DataPoints 添加到 Series 中缺少的位置?

此例程首先收集 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 值设置正确,即它们被添加为 numbersDateTimes。如果您将它们添加为 strings,它们都是 0 并且索引没有任何意义。

  • DataPoints 是按 升序 添加的。情况并非总是如此,尤其是在绘制 LineCharts 时。然而索引这些也没有意义。

另请注意,您可以通过设置 Series.EmptyPointStyle, which is derived from DataPointCustomProperties.

中的属性来设置如何处理 Series 中的 Empty DataPoints 的几个选项

所以你可以这样设置他们的Color

 someSeries.EmptyPointStyle.Color = Color.Red;