使图表图例代表两种颜色

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

柱形图与正面和负面的颜色

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

我已经尝试过的:

我将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); } 

这导致以下表示:

带有代表正负颜色的图例的柱形图

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

在此处输入图像描述

我想有两个选项之一:

  1. 保持正面和负面颜色
  2. 或者更好的解决方案可能是在图例中只有一个双色的瓷砖。 像这样的东西:

在此处输入图像描述

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

提前谢谢了!

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

在这里看一个这样做的例子 ; 注意特别是定位..!

但也许你可以轻松一点; 见下文!

要理解的第一条规则是添加的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! 

无论如何,您已经设置了所有 DataPointsColors ,您还可以摆脱蓝色矩形:

 S.Color = Color.Transparent; 

这也将使所有点都没有颜色透明,所以一定要将它们全部着色!

请注意,传说中的一些空间仍然采取!

结果如下,添加了几个彩色点并添加了系列:

在此处输入图像描述