我正在尝试基于字符串数组创建柱形图。如果多于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个不同的条形但在图例中的颜色代表相似
答案 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);
}