Diese Routine sammelt zuerst alle Werte in allen Series
in einer Sammlung von .
dann schleift sie alle Series
über und über alle Werte und fügt die fehlenden leer 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++;
}
}
}
Beachten Sie, dass der Code geht davon aus ..
dass Ihre x-Werte richtig eingestellt sind dh sie wurden als numbers
oder DateTimes
hinzugefügt. Wenn Sie sie als strings
hinzugefügt haben, sind sie alle 0
und Indexierung macht keinen Sinn.
dass die DataPoints
wurden in aufsteigend Bestellung hinzugefügt. Dies ist insbesondere beim Plotten LineCharts
nicht immer der Fall. Die Indexierung ist jedoch ebenfalls nicht sinnvoll.
Beachten Sie auch, dass Sie mehrere Möglichkeiten, wie Empty DataPoints
in einem Series
durch Festlegen von Eigenschaften in den Series.EmptyPointStyle
zur Behandlung einstellen, die von DataPointCustomProperties
abgeleitet ist.
So könnte man ihre Color
wie folgt festgelegt:
someSeries.EmptyPointStyle.Color = Color.Red;
Dank für die serielle downvote! – TaW