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)"));

person Kevin    schedule 06.08.2015    source источник


Ответы (1)


Вы должны сделать свой массив как 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));
            }
        }      
    }
person Akansha    schedule 06.08.2015
comment
Спасибо Akansha за ваш пример кода. Я реализовал так, но все равно не работает. Что такое «ChartData» в вашем коде? Это массив, который я хочу включить? - person Kevin; 06.08.2015
comment
«ChartData» — это класс, состоящий из свойств XValue и YValue. Я отредактировал свой ответ и включил в него класс ChartData. Я строю график с XAxis как DateTime и YAxis как двойное значение. Вы можете изменить тип в соответствии с вашими значениями. - person Akansha; 07.08.2015