【问题标题】:WinForm chart issueWinForm图表问题
【发布时间】:2015-04-02 09:11:27
【问题描述】:

我正在尝试基于dataTable 创建一个chart。该表仅包含两列,名称和计数:

+-------+-------+
| 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]));
}

这就是我得到的,这不是我所期望的:

【问题讨论】:

  • 您添加了许多系列,但我猜您只想要一个!另请注意,有预定义的 CA 和系列;确保清除它们以保持完全控制。
  • 我清除了所有内容。这是一个完全空白的图表。

标签: c# winforms charts


【解决方案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 集合中。

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多