如何在';y';在相同的';x';c图表中的点
本文关键字: | 更新日期: 2023-09-27 17:59:10
我正在尝试创建一个基于字符串数组的柱状图。如果有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"被表示为两个不同的条,但在图例中颜色的表示相似
只需使用linqGroupBy为您处理它,然后在之后添加它们
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);
}