WinForm图表问题

时间:2015-04-02 09:11:28

标签: c# winforms charts

我尝试根据chart创建dataTable。该表只包含两列,名称和计数:

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

我希望Y axis成为count。我希望为每个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

1 个答案:

答案 0 :(得分: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集合中。