Reputation: 229
I have an array with 42 double values (double[] data = new double[42];
). Now I want to visualize this data with the oxyplot chart, but I did not figure out how I can do that, because on the website the following example is given:
public class MainViewModel
{
public MainViewModel()
{
this.Title = "Example 2";
this.Points = new List<DataPoint>
{
new DataPoint(0, 4),
new DataPoint(10, 13),
new DataPoint(20, 15),
new DataPoint(30, 16),
new DataPoint(40, 12),
new DataPoint(50, 12)
};
}
public string Title { get; private set; }
public IList<DataPoint> Points { get; private set; }
}
I also have to visualize another array with 16'064 double values. I think you can imagine that I am looking for a way to do that as simple as possible, such as the next example with the Sinus function:
Sinus-Example
// Adding data (FunctionSeries) to the Chart
chart1.Series.Add(new FunctionSeries(Math.Sin, 0, 30, 0.1, "sin(x)"));
Upvotes: 1
Views: 3340
Reputation: 943
You have to make your array as ObservableCollection and bind it as itemsSource to the Series chart.
For example if you want to plot LineSeries then:
<OxyPlot:PlotView Name="lineChart" Background="Transparent" IsHitTestVisible="False" DisconnectCanvasWhileUpdating="True" PlotMargins="75 2 2 25">
<OxyPlot:PlotView.Axes>
<OxyPlot:DateTimeAxis Name="xAxis" Position="Bottom" StringFormat="mm:ss" MajorGridlineStyle="Solid" IsZoomEnabled="False" IsPanEnabled="False" />
<OxyPlot:LinearAxis Name="yAxis" Position="Left" MajorGridlineStyle="Solid" IsZoomEnabled="False" IntervalLength="15" IsPanEnabled="False" />
</OxyPlot:PlotView.Axes>
<OxyPlot:PlotView.Series>
<OxyPlot:LineSeries DataFieldX="XValue" DataFieldY="YValue" ItemsSource="{Binding lineSeries1ItemsSource}" MarkerType="Circle" MarkerSize="2.2" Background="#FFEBEBEB" />
<OxyPlot:LineSeries DataFieldX="XValue" DataFieldY="YValue"
</OxyPlot:PlotView.Series>
</OxyPlot:PlotView>
And in code behind:
// Observable Collection of type Chart Data for binding to First Line Series in the Chart
public ObservableCollection<ChartData> lineSeries1ItemsSource { get; set; }
// List for adding all the Observable Collections bound as ItemsSource for Line Series
public ObservableCollection<ObservableCollection<ChartData>> lstItemsSource;
public ucLineSeriesChart()
{
InitializeComponent();
// Set the Data Context to current instance
this.DataContext = this;
// Instanciate List object
lstItemsSource = new ObservableCollection<ObservableCollection<ChartData>>();
// Instanciate Observable Collections
lineSeries1ItemsSource = new ObservableCollection<ChartData>();
// Add the Observable Collections to the List
lstItemsSource.Add(lineSeries1ItemsSource);
}
ChartData class:
public class ChartData : INotifyPropertyChanged
{
//Event that is raised when the value of some property changes
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Property for XValue of Line Series
/// </summary>
public DateTime XValue
{
get
{
return _xValue;
}
set
{
_xValue = value;
OnPropertyChanged("XValue");
}
}
/// <summary>
/// Property for YValue of Line Series
/// </summary>
public double YValue
{
get
{
return _yValue;
}
set
{
_yValue = value;
OnPropertyChanged("YValue");
}
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Upvotes: 2