2016-05-25 10 views
2

私が現在取り組んでいるプロジェクトの1つにOxyPlotを使用しています。しかし、私は1つのウィンドウで複数のグラフをプロットするという問題を解決することができませんでした。私の目標は、thisのようなことができるようにすることです。OxyPlot:OxyPlotとWindowsFormsを使用して1つのウィンドウに複数のグラフをプロットする

現在の単一のプロットはthisのようになります。ここで

は、私が何をしたいのか、私のコード

 var myModel = new PlotModel { Title = "REBA Score" }; 

     myModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Minimum = 0, Maximum = a_count, Title = "Frame" }); 
     myModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Minimum = 0, Maximum = 15, Title = "Score" }); 



     var series1 = new LineSeries 
     { 
      StrokeThickness = 1, 
      MarkerSize = 1, 
     }; 

     for (int i = 0; i < a_count; i++) 
     { 
      int x_val = i; 
      int y_val = scores[0, i]; //"scores" is an array with my data 

      series1.Points.Add(new DataPoint(x_val, y_val)); 

     } 

     myModel.Series.Add(series1); 


     this.plot1.Model = myModel //plot1 is an object of PlotView 

の一部であるのと同じ方法で使用しているデータのいくつかの異なるアレイのための「線形シリーズを作成します - - >塗りつぶし>プロットを」と、それはのように表示されてい前に述べた。私はこのプロジェクトにWindowsFormsとOxyPlotを使用しています。

+0

複数の "PlotModel"オブジェクトを異なる名前で作成し、それらを異なる "PlotViews"に割り当てます。例のように、マージンを減らしたり、別のコンテナに配置したりすることができます。 – bgura

+0

ありがとう、私はこれを試してみると –

+1

これは動作します!私はちょうど複数のPlotViewを作成し、自分のフォームにリンクさせ、それぞれのサイズと位置を自分の必要性に合わせて変更しました。 –

答えて

2

ここで私はbguraの推奨を使っています。

私は最初に複数のPlotViewを作成し、そのプロパティを設定しました。サイズを変更してウィンドウ全体を占めないようにしました。サイズの変更が効果をもたらさないため、「Dock」プロパティが設定された行をコメントアウトしました。その後、フォームのサイズと個々のPlotViewのサイズを調整して、マルチプロットの効果を達成することができます。

private OxyPlot.WindowsForms.PlotView plot1; 
    private OxyPlot.WindowsForms.PlotView plot2; 
    private OxyPlot.WindowsForms.PlotView plot3; 


     private void InitializeComponent() 
    { 
     this.plot1 = new OxyPlot.WindowsForms.PlotView(); 
     this.plot2 = new OxyPlot.WindowsForms.PlotView(); 
     this.plot3 = new OxyPlot.WindowsForms.PlotView(); 
     this.SuspendLayout(); 
     // 
     // plot1 
     // 
     //this.plot1.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.plot1.Location = new System.Drawing.Point(0, 0); 
     this.plot1.Name = "plot1"; 
     this.plot1.PanCursor = System.Windows.Forms.Cursors.Hand; 
     this.plot1.Size = new System.Drawing.Size(300, 300); 
     this.plot1.TabIndex = 0; 
     this.plot1.Text = "plot1"; 
     this.plot1.ZoomHorizontalCursor = System.Windows.Forms.Cursors.SizeWE; 
     this.plot1.ZoomRectangleCursor = System.Windows.Forms.Cursors.SizeNWSE; 
     this.plot1.ZoomVerticalCursor = System.Windows.Forms.Cursors.SizeNS; 
     // 
     // plot2 
     // 
     //this.plot2.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.plot2.Location = new System.Drawing.Point(300, 0); 
     this.plot2.Name = "plot2"; 
     this.plot2.PanCursor = System.Windows.Forms.Cursors.Hand; 
     this.plot2.Size = new System.Drawing.Size(300, 300); 
     this.plot2.TabIndex = 0; 
     this.plot2.Text = "plot2"; 
     this.plot2.ZoomHorizontalCursor = System.Windows.Forms.Cursors.SizeWE; 
     this.plot2.ZoomRectangleCursor = System.Windows.Forms.Cursors.SizeNWSE; 
     this.plot2.ZoomVerticalCursor = System.Windows.Forms.Cursors.SizeNS; 
     // 
     // plot3 
     // 
     //this.plot3.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.plot3.Location = new System.Drawing.Point(900, 600); 
     this.plot3.Name = "plot3"; 
     this.plot3.PanCursor = System.Windows.Forms.Cursors.Hand; 
     this.plot3.Size = new System.Drawing.Size(300,300); 
     this.plot3.TabIndex = 0; 
     this.plot3.Text = "plot3"; 
     this.plot3.ZoomHorizontalCursor = System.Windows.Forms.Cursors.SizeWE; 
     this.plot3.ZoomRectangleCursor = System.Windows.Forms.Cursors.SizeNWSE; 
     this.plot3.ZoomVerticalCursor = System.Windows.Forms.Cursors.SizeNS; 
     // 
     // Form1 
     // 
     this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
     this.ClientSize = new System.Drawing.Size(1225, 900); 
     this.Controls.Add(this.plot3); 
     this.Controls.Add(this.plot1); 
     this.Controls.Add(this.plot2); 
     this.Name = "Form1"; 
     this.Text = "plot3 Score"; 
     this.ResumeLayout(false); 

    } 

私はその後、複数のPlotModel年代を作成し、データとそれらを満たし、そしてそれらに対応するPlotViewのにそれらを割り当てる:

 this.InitializeComponent(); 

     //Setup plot1 
     var plot1_model = new PlotModel { Title = "plot1 Score" }; 

     plot1_model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Minimum = 0, Maximum = a_count, Title = "Frame" }); 
     plot1_model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Minimum = 0, Maximum = 15, Title = "Score" }); 


     var plot1_Series = new LineSeries { StrokeThickness = 1, MarkerSize = 1 }; 

     for (int i = 0; i < a_count; i++) 
     { 
      int x_val = i; 
      int y_val = your_data[0, i]; 

      plot1_Series.Points.Add(new DataPoint(x_val, y_val)); 

     } 

     plot1_model.Series.Add(plot1_Series); 

     //Setup plot2 
     var plot2_Model = new PlotModel { Title = "plot2 Score" }; 

     plot2_Model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Minimum = 0, Maximum = a_count, Title = "Frame" }); 
     plot2_Model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Minimum = 0, Maximum = 15, Title = "Score" }); 


     var plot2_Series = new LineSeries { StrokeThickness = 1, MarkerSize = 1 }; 

     for (int i = 0; i < a_count; i++) 
     { 
      int x_val = i; 
      int y_val = your_data[1, i]; 

      plot2_Series.Points.Add(new DataPoint(x_val, y_val)); 

     } 

     plot2_Model.Series.Add(plot2_Series); 







     //Setup plot3 
     var plot3_Model = new PlotModel { Title = "plot3 Score" }; 

     plot3_Model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Minimum = 0, Maximum = a_count, Title = "Frame" }); 
     plot3_Model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Minimum = 0, Maximum = 15, Title = "Score" }); 


     var plot3_Series = new LineSeries{ StrokeThickness = 1, MarkerSize = 1}; 

     for (int i = 0; i < a_count; i++) 
     { 
      int x_val = i; 
      int y_val = your_data[3, i]; 

      plot3_Series.Points.Add(new DataPoint(x_val, y_val)); 

     } 
     this.plot1.Model = plot1_Model; 
     this.plot2.Model = plot2_model; 
     this.plot3.Model = plot3_Model; 

うまくいけば、これは、同じ機能を実装する必要があり、誰かを助けることができます。誰かが不思議に思っていた場合、私はOxyPlotのドキュメントからHelloWorldプログラムを使い、それを追加しました。それは見つけることができるhere

+0

この例では3つの異なるプロットしかありません。この場合画面に表示されます。しかし、同じ戦略を使用して、任意のサイズの画面を満たすのに十分なプロットを作成することができます。 –

0

別の行と列に別のプロットを配置するためにTableLayoutPanelを使用しました。プログラムでグラフを追加する予定だから、行を追加してレイアウトにドッキングすることができます。

関連する問題