Home > Programmierung > dynamische Charts im WPF-Toolkit

dynamische Charts im WPF-Toolkit

Ich habe vor kurzem das WPF-Toolkit mit dem darin enthaltenen charting-Steuerelement entdeckt und muss sagen, dass es echt eine schöne Sache ist. Damit ist es wirklich sehr einfach einen Graphen zu erstellen.

Es reicht in XAML den Graphen zu deklarieren und ihn dann über die DataSource zu füllen. Falls man so wie ich mehrere Datenreihen dynamisch hinzufügen will kann man einfach eine entsprechende Series per Code hinzufügen und dann über die Itemsource die Datenquelle binden.

Hier mal ein Beispiel-Graph für ein Balkendiagram, welches Daten Monatsweise anzeigt (dafür ist auch die Formatierung gedacht). Dieser enthält immer eine “lineare” Achse, welche einen normalen Liniengraphen darstellt – ich habe Sie explizit definiert, damit der mindest-Wert immer auf 0 steht und nicht automatisch angepasst wird..

<chartingToolkit:Chart Name="chart1">
   <chartingToolkit:Chart.Axes>
      <chartingToolkit:DateTimeAxis
         Orientation="X" Location="Bottom"
         IntervalType="Months" Interval="1">
         <chartingToolkit:DateTimeAxis.AxisLabelStyle>
            <Style TargetType="chartingToolkit:DateTimeAxisLabel">
               <Setter Property="StringFormat" Value="{}{0:MM-yy}"/>
            </Style>
         </chartingToolkit:DateTimeAxis.AxisLabelStyle>
      </chartingToolkit:DateTimeAxis>
      <chartingToolkit:LinearAxis Orientation="Y"
         Location="Left" Minimum="0"
         ShowGridLines="True" />
   </chartingToolkit:Chart.Axes>
</chartingToolkit:Chart>

der dann ohne Daten so ausschaut:

image

Um diesem dann dynamisch mehr “Series”, also weitere z.B. Balken/Linien hinzuzufügen kann reicht dann dieser Code. Durch das setzen von Title wird der entsprechende Titel in der legende angezeigt.

ColumnSeries serie = new ColumnSeries();
// Alternativ z.B.
// LineSeries serie = new LineSeries();
serie.Title = "Titel für Legende";
serie.DependentValuePath = "Y-Wert-komponente";
serie.IndependentValuePath = "X-Wert-komponente";
serie.ItemsSource = daten;
// chart1, weil ich dem Chart im XAML
// diesen kreativen Namen spendiert habe,
chart1.Series.Add(serie);

Eine Sache, welche schon als bug reported wurde ist allerdings, dass momentan ein Graph mit einer DateTimeAxis und einer ColumnSeries keine Daten anzeigt, wenn nur ein Datum in der Liste für die Itemsource vorhanden ist. Dies liegt daran, dass mit Hilfe zumindest eines anderen Balkens versucht wird, die Breite für den Balken zu berechnen. Das wird aber im nächsten Release gefixt werden.

Technorati-Tags: ,
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • MisterWong.DE
  • Technorati
  • LinkedIn
  • Live
  • StumbleUpon
  • TwitThis
  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks