我在应用程序中创建了一个柱形图,如下所示:

c# - 使图表图例代表两种颜色-LMLPHP

如您所见,正值是绿色,负值是红色。我需要在传说中代表这一点。我就是不知道

我已经尝试过的

我在CustomItems中添加了Legend。这是代码:

Legend currentLegend = chart.Legends.FindByName(chart.Series[series].Legend);
if (currentLegend != null)
{
    currentLegend.LegendStyle   = LegendStyle.Table;
    LegendItem li               = new LegendItem();
    li.Name                     = series;
    li.Color                    = Color.Red;
    li.BorderColor              = Color.Transparent;
    currentLegend.CustomItems.Add(li);
}


结果如下所示:

c# - 使图表图例代表两种颜色-LMLPHP

我可以忍受。但是,一旦我在图表中添加更多的序列,元素的顺序就会被破坏。这是一个例子:

c# - 使图表图例代表两种颜色-LMLPHP

我想要两个选项之一:


保持正面和负面的色彩在一起
甚至更好的解决方案可能是在图例中只有一个瓷砖是双色的。像这样:


c# - 使图表图例代表两种颜色-LMLPHP

您能帮我解决这个问题吗?

提前谢谢了!

最佳答案

是的,你可以这样做。但是请注意,您不能真正修改原始的Legend。因此,要获得完美的结果,您将需要创建一个新的自定义Legend

参见here for an example。请特别注意位置..!

但是也许您可以轻松一些。见下文!

首先要了解的规则是,添加的LegendItems始终位于列表的末尾。因此,除非将添加的Series放在开头,否则不能将它们放在一起。您可以使用Series.Insert(..)来做到这一点,但是使用那些两个颜色的矩形会更好,imo。

要显示所需的图形,只需将它们创建为位图,就可以在磁盘上或动态地将它们存储在图表的Images集合中:

Legend L = chart1.Legends[0];
Series S = chart1.Series[0];

// either load an image from disk (or resources)
Image img = Image.FromFile(someImage);

// or create it on the fly:
Bitmap bmp = new Bitmap(32, 14);
using (Graphics G = Graphics.FromImage(bmp))
{
    G.Clear(Color.Red);
    G.FillPolygon(Brushes.LimeGreen, new Point[] { new Point(0,0),
        new Point(32,0), new Point(0,14)});
}


现在将其添加到图表的NamedImage集合中:

chart1.Images.Add(new NamedImage("dia", bmp));


现在,您可以根据需要创建任意多个LegendItems

LegendItem newItem = new LegendItem();
newItem.ImageStyle = LegendImageStyle.Rectangle;
newItem.Cells.Add(LegendCellType.Image, "dia", ContentAlignment.MiddleLeft);
newItem.Cells.Add(LegendCellType.Text, S.Name, ContentAlignment.MiddleLeft);


并将它们添加到Legend

L.CustomItems.Add(newItem);


很遗憾,您无法删除原始项目。

除了从头创建新的Legend之外,您还可以执行以下操作:

清除像这样的文本:

S.LegendText = " "; // blank, not empty!


在设置所有ColorsDataPoints之后,您还可以摆脱蓝色矩形:

S.Color = Color.Transparent;


这也将使所有没有颜色的点透明,因此请确保为它们全部着色!

请注意,图例中的某些空间仍被占用!

这是结果,带有一些彩色点,并添加了线系列:

c# - 使图表图例代表两种颜色-LMLPHP

关于c# - 使图表图例代表两种颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36614148/

10-12 20:12