2016-07-29 25 views
-2

auszurichten, wenn eine Series Einstellung durch Einstellen der Series.IsXValueIndexed zu true indiziert zu sein das Diagramm erfordert alle Seriesausgerichtet sein:Wie indexierte Reihen in einem Diagramm

Wenn Sie die Anzeige mehrere Serien und mindestens eine Serie verwendet indizierte X-Werte, dann müssen alle Serien ausgerichtet werden - das heißt, haben Sie die gleiche Anzahl von Datenpunkten und die entsprechenden Punkte müssen die gleichen X-Werte haben.

Wie kann man die notwendige Emtpy DataPoints zu den Schlitzen hinzufügen sie fehlen in einem der Series in,?

+0

Dank für die serielle downvote! – TaW

Antwort

0

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;