如何在c#chart中的'x'点上添加'y'中的值

时间:2014-04-20 15:55:30

标签: c# .net visual-studio-2010 visual-studio charts

我正在尝试基于字符串数组创建柱形图。如果多于1个字符串对应于相同的字符串值,则应该将该数字相加并使用相同的条形表示相似的字符串。然而,我的这个代码导致在不同的条形图上表示(每个条形图的值为1):

    private void plot_chart(string[] DTCs)
    {
        foreach (string str in DTCs)
        {
            bool doNotaddSeries = false;

            foreach (var ser in chart3.Series)
            {
                if (str == ser.Name)    //series already exists
                {
                    doNotaddSeries = true;
                    ser.Points.AddY(1);
                    //MessageBox.Show(str + " exists");
                    break;
                }
            }

            if (!doNotaddSeries)
            {
                chart3.Series.Add(str);
                chart3.Series[str].Points.AddY(1);
            }

            doNotaddSeries = false;
        }
    }

我想要的是(让我们说),如果我有:

    str[0]="abc"
    str[1]="def"
    str[2]="abc"

我想" abc"在单个条上表示,y值为2。而" def"在y轴上应该有1个值。我得到的是" abc"被表示为2个不同的条形但在图例中的颜色代表相似

1 个答案:

答案 0 :(得分:0)

只需使用linq GroupBy为您处理,然后在

之后添加它们
var DTCs = new [] {"abc", "def", "abc"};
var points = DTCs.GroupBy(str => str).Select(group => new
    {
        x = group.Key,
        y = group.Count()
     });

// loop through points adding them to the chart
foreach (var p in points)
{    
    // Assume this is correct for your chart object
    chart3.Series.Add(p.x);
    chart3.Series[p.x].Points.AddY(p.y);
}