【问题标题】:Oxyplot, adding data from an arrayOxyplot,从数组中添加数据
【发布时间】:2015-08-07 11:30:02
【问题描述】:

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

【问题讨论】:

    标签: wpf xaml oxyplot


    【解决方案1】:

    您必须将您的数组设置为 ObservableCollection 并将其作为 itemsSource 绑定到系列图表。

    例如,如果你想绘制 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));
                }
            }      
        }
    

    【讨论】:

    • 感谢 Akansha 提供的示例代码。我是这样实现的,但它仍然不起作用。您的代码中的“ChartData”到底是什么?是我要包含的数组吗?
    • 'ChartData' 是一个由 XValue 和 YValue 属性组成的类。我已经编辑了我的答案并在其中包含了 ChartData 类。我正在用 XAxis 作为 DateTime 和 YAxis 作为双精度值来绘制图形。您可以根据自己的值更改类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多