Oxyplot,从数组中添加数据

时间:2015-08-06 09:22:18

标签: wpf xaml oxyplot

我有一个包含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)"));

1 个答案:

答案 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));
            }
        }      
    }