我有一个包含42个双精度值(double[] data = new double[42];
)的数组。现在我想用oxyplot图表来显示这些数据,但我没弄明白我该怎么做,因为在网站上给出了以下例子:
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; }
}
我还必须使用16'064双值来可视化另一个数组。我想你可以想象我正在寻找一种尽可能简单的方法,比如下一个带有Sinus函数的例子:
窦-实施例
// Adding data (FunctionSeries) to the Chart
chart1.Series.Add(new FunctionSeries(Math.Sin, 0, 30, 0.1, "sin(x)"));
答案 0 :(得分:2)
您必须将数组设为ObservableCollection并将其作为itemsSource绑定到Series图表。
例如,如果您想绘制LineSeries,那么:
<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>
在代码背后:
// 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类:
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));
}
}
}