2013-04-04 47 views
5

私は2つ以上のY軸を持つチャートを使用する必要があるクライアントを持っています。C#Winforms - 複数のY軸(3以上)を持つチャートを作成する

私はすでに、Y2軸に建てられ、その作業

偉大たコンポーネントの一つ(C1Chart)チャートを使用しています。

チャートに3つ以上のY軸を表示できるチャートコントロールを知っている人はいますか?

+1

は、私はあなたがあなたがVisual Studio用のCrystal Reportsのプラグインをダウンロードすることができ、複数のシリーズ – V4Vendetta

+0

を使用してグラフ(MSChart)でそれを行うことができると思います、あなたは、チャートのすべての種類と、それにレポートを作ることができます。 – Max

+0

私は大学で私のシニアプロジェクトに[ZedGraph](http://sourceforge.net/projects/zedgraph/)を使用しました。それはかなりうまくいくように見えました。メインサイトはしばらく更新されていませんが、いくつかのドキュメント[here](http://zedgraph.dariowiz.com/)、短いチュートリアル[here](http://www.codeproject.com/Articles/5431/A-flexible-charting-library-for-NET)、およびいくつかのサンプル[here](http://zedgraph.sourceforge.net/samples.html)を参照してください。 – valverij

答えて

1

MS Chart controlには、チャートに関する限り、ほとんどすべてのものが必要です。サンプルをダウンロードして実行し、チャートフィーチャ>軸>複数のY軸に移動します。私はあなたが探しているものを見つけるだろうと思う!

5

Samples Environments for Microsoft Chart Controlsには、複数のY軸の例が含まれています。
コードのいくつかの作品:

private void checkBoxUseMultipleYAxis_CheckedChanged(object sender, System.EventArgs e) 
    { 
     if(checkBoxUseMultipleYAxis.Checked) 
     { 
      // Set custom chart area position 
      Chart1.ChartAreas["Default"].Position = new ElementPosition(25,10,68,85); 
      Chart1.ChartAreas["Default"].InnerPlotPosition = new ElementPosition(10,0,90,90); 

      // Create extra Y axis for second and third series 
      CreateYAxis(Chart1, Chart1.ChartAreas["Default"], Chart1.Series["Series2"], 13, 8); 
      CreateYAxis(Chart1, Chart1.ChartAreas["Default"], Chart1.Series["Series3"], 22, 8); 
     } 
     else 
     { 
      // Set default chart areas 
      Chart1.Series["Series2"].ChartArea = "Default"; 
      Chart1.Series["Series3"].ChartArea = "Default"; 

      // Remove newly created series and chart areas 
      while(Chart1.Series.Count > 3) 
      { 
       Chart1.Series.RemoveAt(3); 
      } 
      while(Chart1.ChartAreas.Count > 1) 
      { 
       Chart1.ChartAreas.RemoveAt(1); 
      } 

      // Set default chart are position to Auto 
      Chart1.ChartAreas["Default"].Position.Auto = true; 
      Chart1.ChartAreas["Default"].InnerPlotPosition.Auto = true; 

     } 
    } 

public void CreateYAxis(Chart chart, ChartArea area, Series series, float axisOffset, float labelsSize) 
    { 
     // Create new chart area for original series 
     ChartArea areaSeries = chart.ChartAreas.Add("ChartArea_" + series.Name); 
     areaSeries.BackColor = Color.Transparent; 
     areaSeries.BorderColor = Color.Transparent; 
     areaSeries.Position.FromRectangleF(area.Position.ToRectangleF()); 
     areaSeries.InnerPlotPosition.FromRectangleF(area.InnerPlotPosition.ToRectangleF()); 
     areaSeries.AxisX.MajorGrid.Enabled = false; 
     areaSeries.AxisX.MajorTickMark.Enabled = false; 
     areaSeries.AxisX.LabelStyle.Enabled = false; 
     areaSeries.AxisY.MajorGrid.Enabled = false; 
     areaSeries.AxisY.MajorTickMark.Enabled = false; 
     areaSeries.AxisY.LabelStyle.Enabled = false; 
     areaSeries.AxisY.IsStartedFromZero = area.AxisY.IsStartedFromZero; 


     series.ChartArea = areaSeries.Name; 

     // Create new chart area for axis 
     ChartArea areaAxis = chart.ChartAreas.Add("AxisY_" + series.ChartArea); 
     areaAxis.BackColor = Color.Transparent; 
     areaAxis.BorderColor = Color.Transparent; 
     areaAxis.Position.FromRectangleF(chart.ChartAreas[series.ChartArea].Position.ToRectangleF()); 
     areaAxis.InnerPlotPosition.FromRectangleF(chart.ChartAreas[series.ChartArea].InnerPlotPosition.ToRectangleF()); 

     // Create a copy of specified series 
     Series seriesCopy = chart.Series.Add(series.Name + "_Copy"); 
     seriesCopy.ChartType = series.ChartType; 
     foreach(DataPoint point in series.Points) 
     { 
      seriesCopy.Points.AddXY(point.XValue, point.YValues[0]); 
     } 

     // Hide copied series 
     seriesCopy.IsVisibleInLegend = false; 
     seriesCopy.Color = Color.Transparent; 
     seriesCopy.BorderColor = Color.Transparent; 
     seriesCopy.ChartArea = areaAxis.Name; 

     // Disable drid lines & tickmarks 
     areaAxis.AxisX.LineWidth = 0; 
     areaAxis.AxisX.MajorGrid.Enabled = false; 
     areaAxis.AxisX.MajorTickMark.Enabled = false; 
     areaAxis.AxisX.LabelStyle.Enabled = false; 
     areaAxis.AxisY.MajorGrid.Enabled = false; 
     areaAxis.AxisY.IsStartedFromZero = area.AxisY.IsStartedFromZero; 
     areaAxis.AxisY.LabelStyle.Font = area.AxisY.LabelStyle.Font; 

     // Adjust area position 
     areaAxis.Position.X -= axisOffset; 
     areaAxis.InnerPlotPosition.X += labelsSize; 

    } 

結果:
Multi Y axis off Multi Y axis off

+0

このデータは各y軸に対応してプロットされます。 – vivek

+0

@vivekはい、この特定のケースでは、3つのグラフ、3つの軸、それぞれのy軸に対応する各グラフデータ – fat

2

私はあなたが同じチャートオブジェクト内の複数のプロットを手配することを可能にする複数のChartAreaのを、試みることができると思います。

You can assign each Series to its own ChartArea.

関連する問題