2016-06-20 7 views
1

私は、同じ軸を共有する2つの円グラフを並べて作成しようとしています。誰もMSChartを使用してこれを達成するためのコードの例がありますか?私が達成したいもののC#MSChart - 同じ軸を共有する2つの円グラフをどのように作成できますか?

例: Example of what I want to achieve

はここで、これまでに私のコードです:互いの上に以下のグラフで

 Chart chart = new Chart(); 
     chart.Width = 800; 
     string PreContractSeriesName = "PreContract"; 
     string ContractSeriesName = "Contract"; 

     //two chart areas 
     chart.ChartAreas.Add(PreContractSeriesName); 
     chart.ChartAreas.Add(ContractSeriesName); 

     //two pie charts, so two series 
     chart.Series.Add(PreContractSeriesName); 
     chart.Series.Add(ContractSeriesName); 

     //add series to chart area 
     chart.Series[PreContractSeriesName].ChartArea = PreContractSeriesName; 
     chart.Series[ContractSeriesName].ChartArea = ContractSeriesName; 

     //set as pie chart 
     chart.Series[PreContractSeriesName].ChartType = SeriesChartType.Pie; 
     chart.Series[ContractSeriesName].ChartType = SeriesChartType.Pie; 

     chart.ChartAreas[PreContractSeriesName].AlignmentOrientation = AreaAlignmentOrientations.Horizontal; 
     chart.ChartAreas[ContractSeriesName].AlignmentOrientation = AreaAlignmentOrientations.Horizontal; 

     chart.Series[PreContractSeriesName].Points.AddXY("source1", 100); 
     chart.Series[PreContractSeriesName].Points.AddXY("source2", 200); 
     chart.Series[PreContractSeriesName].Points.AddXY("source3", 300); 
     chart.Series[PreContractSeriesName].Points.AddXY("source4", 400); 
     chart.Series[PreContractSeriesName].Points.AddXY("source5", 500); 

     chart.Series[ContractSeriesName].Points.AddXY("source1", 140); 
     chart.Series[ContractSeriesName].Points.AddXY("source2", 240); 
     chart.Series[ContractSeriesName].Points.AddXY("source3", 340); 
     chart.Series[ContractSeriesName].Points.AddXY("source4", 440); 
     chart.Series[ContractSeriesName].Points.AddXY("source5", 540); 

     using (MemoryStream memStream = new MemoryStream()) 
     { 
      chart.SaveImage(memStream, ChartImageFormat.Jpeg); 

      return File(memStream.ToArray(), "image/jpeg"); 
     } 

私のコードの結果:

enter image description here

私は知りたいです:

  1. グラフを並べるにはどうすればよいですか?
  2. これは、軸を共有する正しい方法ですか?
  3. 誰でもこれを達成する方法の例がありますか?

編集:ユーザーへ

ここ

である私の更新されたコードのおかげでTAW

 Chart chart = new Chart(); 
     chart.Width = 800; 
     string PreContractSeriesName = "PreContract"; 
     string ContractSeriesName = "Contract"; 

     //two chart areas 
     chart.ChartAreas.Add(PreContractSeriesName); 
     chart.ChartAreas.Add(ContractSeriesName); 

     //two pie charts, so two series 
     chart.Series.Add(PreContractSeriesName); 
     chart.Series.Add(ContractSeriesName); 

     //add series to chart area 
     chart.Series[PreContractSeriesName].ChartArea = PreContractSeriesName; 
     chart.Series[ContractSeriesName].ChartArea = ContractSeriesName; 

     //position chart areas side by side 
     chart.ChartAreas[PreContractSeriesName].Position = new ElementPosition(2, 5, 48, 80); 
     chart.ChartAreas[ContractSeriesName].Position = new ElementPosition(50, 5, 48, 80); 


     chart.Legends.Add(new Legend() { 
      Alignment = StringAlignment.Center, 
      Docking = Docking.Bottom } 
     ); 
     chart.Series[ContractSeriesName].IsVisibleInLegend = false; 

     //set as pie chart 
     chart.Series[PreContractSeriesName].ChartType = SeriesChartType.Pie; 
     chart.Series[ContractSeriesName].ChartType = SeriesChartType.Pie; 

     chart.Series[PreContractSeriesName].Points.AddXY("source1", 100); 
     chart.Series[PreContractSeriesName].Points.AddXY("source2", 200); 
     chart.Series[PreContractSeriesName].Points.AddXY("source3", 300); 
     chart.Series[PreContractSeriesName].Points.AddXY("source4", 400); 
     chart.Series[PreContractSeriesName].Points.AddXY("source5", 500); 

     chart.Series[ContractSeriesName].Points.AddXY("source1", 140); 
     chart.Series[ContractSeriesName].Points.AddXY("source2", 240); 
     chart.Series[ContractSeriesName].Points.AddXY("source3", 340); 
     chart.Series[ContractSeriesName].Points.AddXY("source4", 440); 
     chart.Series[ContractSeriesName].Points.AddXY("source5", 540); 
+0

何が起こりますか..?コードを投稿して誰かがそれを踏み越えることを期待しても、誰も良いことはありません..あなたは何が問題であるかを述べることができますか、または問題はあなたの既存のコードにありますか? – MethodMan

+0

@MethodMan、ありがとう。私は自分の投稿を編集して、私が経験した結果を強調し、より具体的な質問をしました。 – Ben

答えて

2

enter image description here

ここ

Chartチャートで2つのChartAreas CA1およびCA2を整列させる方法です。

ca1.Position = new ElementPosition(2, 5, 48, 80); 
ca2.Position = new ElementPosition(50, 5, 48, 80); 
chart.Legends[0].Docking = Docking.Bottom; 
chart.Legends[0].Alignment = StringAlignment.Center; 

これは、位置をチャートのサイズのパーセンテージにハードコードすることに注意してください。

実際に試した配置プロパティは、実際には、グラフエリアを配置しないデータの整列に関するものです。彼らのAreaAlignmentStylesを見てください! ChartAreaの配置を管理するには、デフォルトのAutoのままにして、独自の番号を選択する必要があります。

私は左右に2パーセントを残して、2つを直接隣に置くようにします。

私はLegendのbototmに15%残しました。これはボトムにドッキングされ、中央に配置されています。

独自の番号を使用することをお勧めします。

デフォルトでは、2つのパイはそれぞれ独自の凡例を取得します。あなたは1 Series S2のこのプロパティを設定できるエントリの1セットを抑圧するには、次のデバッガを使用するときに別の例として

S2.IsVisibleInLegend = false; 

see here!

+0

まさに私が必要なもの、ありがとう! – Ben

関連する問題