2016-11-08 4 views
-1

データベースに格納されたデータからグラフを表示するWindowsフォームアプリケーションがあります。私はバーグラフまたは円グラフで表示するデータを取得することができます。しかし、棒グラフの凡例には、シリーズの名前である "Series1"しか表示されません。円グラフの凡例は、系列データで正しい凡例を表示します。私はMSDNを検索し、凡例を追加するためのいくつかの記事を見つけましたが、それらはすべて同じ結果を持っています。ここで棒グラフの凡例に表示する系列データを取得するには

は私の棒グラフコードです:ここで

 string[] xvals = new string[dt.Rows.Count]; 
     int[] yvals = new int[dt.Rows.Count]; 

     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      xvals[i] = dt.Rows[i]["XValues"].ToString(); 
      yvals[i] = Convert.ToInt32(dt.Rows[i]["YValues"].ToString()); 
     } 

     Chart barChart = new Chart(); 
     ChartArea chartArea = new ChartArea(); 
     barChart.ChartAreas.Add(chartArea); 
     barChart.Dock = DockStyle.Fill; 
     barChart.BackColor = Color.Transparent; 
     barChart.Palette = ChartColorPalette.Fire; 
     barChart.ChartAreas[0].BackColor = Color.Transparent; 
     barChart.ChartAreas[0].AxisX.MajorGrid.Enabled = false; 
     barChart.ChartAreas[0].AxisY.MajorGrid.Enabled = false; 

     Series series1 = new Series 
     { Name = "Series1", IsVisibleInLegend = true, ChartType = SeriesChartType.Bar }; 
     series1.ChartType = SeriesChartType.Column; 

     barChart.Series.Add(series1); 
     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      series1.Points.AddXY(dt.Rows[i]["XValues"].ToString(), 
       Convert.ToInt32(dt.Rows[i]["YValues"].ToString())); 
      var p1 = series1.Points[i]; 
      p1.Color = Color.FromArgb((byte)r.Next(90, 255), (byte)r.Next(90, 255), 160); 
     } 

     barChart.Legends.Add(new Legend("Legend1")); 
     barChart.Legends["Legend1"].BackColor = Color.Transparent; 
     barChart.Series["Series1"].Legend = "Legend1"; 
     series1.IsVisibleInLegend = true; 

     gbo1.Controls.Add(barChart); 

は私の円グラフコードです:私は

  string[] xvals = new string[dt.Rows.Count]; 
     int[] yvals = new int[dt.Rows.Count]; 

     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      xvals[i] = dt.Rows[i]["XValues"].ToString(); 
      yvals[i] = Convert.ToInt32(dt.Rows[i]["YValues"].ToString()); 
     } 

     Chart pieChart = new Chart(); 
     ChartArea chartArea = new ChartArea(); 
     chartArea.Name = "PieChartArea"; 
     pieChart.ChartAreas.Add(chartArea); 
     pieChart.Dock = DockStyle.Fill; 
     pieChart.Location = new Point(0, 50); 

     pieChart.Palette = ChartColorPalette.Fire; 
     pieChart.BackColor = Color.Transparent; 
     pieChart.ChartAreas[0].BackColor = Color.Transparent; 

     Series series2 = new Series 
     { Name = "Series2", IsVisibleInLegend = true, ChartType = SeriesChartType.Pie }; 

     pieChart.Series.Add(series2); 
     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      series2.Points.Add((int)dt.Rows[i]["YValues"]); 
      var p2 = series2.Points[i]; 
      p2.Color = Color.FromArgb((byte)r.Next(90, 255), (byte)r.Next(90, 255), 160); 
      p2.LegendText = dt.Rows[i]["XValues"].ToString(); 
     } 

     pieChart.Legends.Add(new Legend("Legend2")); 
     pieChart.Legends["Legend2"].BackColor = Color.Transparent; 
     pieChart.Series["Series2"].Legend = "Legend2"; 
     series2.IsVisibleInLegend = true; 

     gboReport1.Controls.Add(pieChart); 

何をしないのですか?助けてください。ここで

は、棒グラフの出力です: Pie Chart with good Legend

+0

どのチャートAPIを使用していますか? –

+0

これはあなたが意味するものです:using System.Windows.Forms.DataVisualization.Charting; –

答えて

0

BarPieチャートは動作するようにをを設計している方法です。ここで Bar Chart with bad Legend

は、円グラフの出力です。

すべてChartTypes除くPieチャートはSeries.NamesまたはそのLegendSeriesTexts表示します。のみとにかく Seriesを持って

のみPieチャートは、DataPoint.YValues[0]が表示されます。

あなたが本当にあなたのLegendあなたは、いくつかのデータポイント以上のものを追加した場合、もちろん、それは混雑しになりますことを行うことができますにデータポイントのデータを表示したい場合は...

これはどのようにすることができますの例です。定期Legendを隠し、データ値を表示し、新しいものを追加追加:

chart1.ApplyPaletteColors(); 
chart1.Legends[0].Enabled = false; 

Legend L2 = new Legend(); 
chart1.Legends.Add(L2); 
L2.Docking = Docking.Right; 
foreach (DataPoint dp in yourSeries.Points) 
{ 
    LegendItem LI = new LegendItem(dp.YValues[0].ToString("0.##"), dp.Color, ""); 
    LI.BorderWidth = 0; 
    L2.CustomItems.Add(LI); 
} 

enter image description here

あなたがしたい場合にも、正規にそれらの項目を追加することができます;単にそれへの参照を作成し、上記のコードを使用する:あなたは、元のLegendから元のアイテムを削除することはできません

Legend L1 = chart1.Legends[0]; 

注意、しかし!

関連する問題