gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:27:14 28 4
gpt4 key购买 nike

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

Column chart with positive and negative colors

如您所见,正值是绿色,负值是红色。我需要在图例中表示这一点。我只是不知道如何。

我已经尝试过的:

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

这导致以下表示:

Column chart with legend representing positive and negative color

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

enter image description here

我想要以下两个选项之一:

  1. 将正负颜色放在一起
  2. 或者更好的解决方案可能是在图例中只有一个双色图 block 。像这样:

enter image description here

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

非常感谢!

最佳答案

是的,你可以做到。但是请注意,您不能真正修改原始的 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);

并将它们添加到图例:

L.CustomItems.Add(newItem);

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

除了从头开始创建新的 Legend 之外,您还可以做的是:

像这样清除文本:

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

无论如何,您已经设置了所有 DataPointsColors,您也可以去掉蓝色矩形:

S.Color = Color.Transparent;

这也会使所有没有颜色的点透明,所以一定要给它们上色!

请注意,它仍然占据了 Legend 中的一些空间!

这是结果,添加了一些彩色点和您的线系列:

enter image description here

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com