2015-04-02 66 views
0

我正在尝试创建基于dataTablechart。表格只包含两列,名称和数量:WinForm图表问题

+-------+-------+ 
| names | count | 
+-------+-------+ 
| name1 | 650 | 
+-------+-------+ 
| name2 | 0  | 
+-------+-------+ 
| name3 | 211 | 
+-------+-------+ 
| name4 | 50 | 
+-------+-------+ 

我想Y axiscount,我想要为每个name生成一个列,并标记实际名称。

这是我的尝试:

int max = 0; 
for (int i = 0; i < table.Rows.Count; i++) 
{ 
    if (Convert.ToInt32(table.Rows[i][1]) > max) max = Convert.ToInt32(max.Rows[i][1]); 
} 
chart1.ChartAreas.Add("area"); 
chart1.ChartAreas[0].AxisY.Minimum = 0; 
chart1.ChartAreas[0].AxisY.Maximum = max; 
chart1.ChartAreas[0].AxisY.Interval = max/ 10; 

for (int i = 0; i < table.Rows.Count; i++) 
{ 
    chart1.Series.Add(table.Rows[i][0].ToString()); 
} 
for (int i = 0; i < table.Rows.Count; i++) 
{ 
    chart1.Series[i].Points.AddXY(table.Rows[i][0].ToString(), Convert.ToInt32(table.Rows[i][1])); 
} 

这是我所得到的,这并不完全符合我的预期: enter image description here

+0

你正在添加很多系列,但我想你只想要一个!另请注意,有预定义的CA和系列;一定要清除它们以保持完全控制。 – TaW 2015-04-02 09:38:57

+0

我清除了一切。这是一张完全空白的图表。 – fishmong3r 2015-04-02 09:43:19

回答

1

更改此:

for (int i = 0; i < table.Rows.Count; i++) 
{ 
    chart1.Series.Add(table.Rows[i][0].ToString()); 
} 
for (int i = 0; i < table.Rows.Count; i++) 
{ 
    chart1.Series[i].Points.AddXY(table.Rows[i][0].ToString(), 
            Convert.ToInt32(table.Rows[i][1])); 
} 

本:

Series S = chart1.Series.Add("names"); 

for (int i = 0; i < table.Rows.Count; i++) 
{ 
    S.Points.AddXY(table.Rows[i][0].ToString(), Convert.ToInt32(table.Rows[i][1])); 
} 

您的原始代码为每个系列的每行和一个数据点添加了一个系列。这使得图表将它们彼此放在一起并显示它们的唯一点,每个点都具有独特的系列颜色。

新代码只创建一个系列并将所有数据点添加到其Points集合。