使图表图例代表两种颜色

时间:2016-04-14 04:54:54

标签: c# .net winforms charts legend

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

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. 或者更好的解决方案可能是在图例中只有一个双色的瓷砖。这样的事情:
  3. enter image description here

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

    非常感谢提前!

1 个答案:

答案 0 :(得分:2)

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

here for an example这样做;特别注意定位......!

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

要理解的第一条规则是添加LegendItems始终到列表的末尾。因此,除非您添加的Series位于开头,否则您无法将它们保持在一起。您可以} 使用Series.Insert(..),但使用这些双色矩形更好,非常好..

要显示所需的图形,只需在磁盘上或动态创建它们,并将它们存储在图表的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!

正如您设置{{1>} 全部 Colors一样,您也可以摆脱蓝色矩形:

DataPoints

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

请注意,传奇中的某些空格仍在使用!

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

enter image description here