更新时间:2023-12-05 21:44:52
由于似乎无法控制图例标记,因此您可能需要创建自定义图例.以下是它在 Form
和 PDF
中的外观示例:
Since there seems to be no way to control the Legend Markers you may need to create a custom Legend. Here is an example of how it may look in the Form
and in a PDF
:
我不得不缩小 PDF,所以它看起来更薄/更轻.
I had to zoom out the PDF, so it looks a little thinner/lighter.
这是一个返回 CustomLegend
的函数:
Here is a function that returns a CustomLegend
:
Legend CustomCloneLegend(Chart chart, Legend oLeg)
{
Legend newL = new Legend();
newL.Position = oLeg.Position; // copy a few settings:
newL.Docking = oLeg.Docking;
newL.Alignment = oLeg.Alignment;
// a few numbers for the drawing to play with; you may want to use floats..
int iw = 32; int iw2 = iw / 2; int ih = 18; int ih2 = ih / 2;
int ir = 12; int ir2 = ir / 2; int lw = 3;
// we want to access the series' colors!
chart.ApplyPaletteColors();
foreach (Series S in chart.Series)
{
// the drawing code is only for linechart and markerstyles circle or square:
Bitmap bmp = new Bitmap(iw, ih);
using (Graphics G = Graphics.FromImage(bmp))
using (Pen pen = new Pen(S.Color, lw))
using (SolidBrush brush = new SolidBrush(S.Color))
{
G.DrawLine(pen, 0, ih2, iw, ih2);
if (S.MarkerStyle == MarkerStyle.Circle)
G.FillEllipse(brush, iw2 - ir2, ih2 - ir2, ir, ir);
else if (S.MarkerStyle == MarkerStyle.Square)
G.FillRectangle(brush, iw2 - ir2, ih2 - ir2, ir, ir);
}
// add a new NamesImage
NamedImage ni = new NamedImage(S.Name, bmp);
chart.Images.Add(ni);
// create and add the custom legend item
LegendItem lit = new LegendItem( S.Name, Color.Red, S.Name);
newL.CustomItems.Add(lit);
}
oLeg.Enabled = false;
return newL;
}
我是这样称呼它的:
Legend LC = CustomCloneLegend(chart3, L);
chart1.Legends.Add(LC);
一些注意事项:
chart.ApplyPaletteColors()
.这是访问 Series
颜色所必需的.NamedImage
和Chart.Images
.这是必要的,因为在 Chart
中设置任何图像都需要一个字符串!LegendCells
.例如见这里!ChartType
(Line
) 和两个 MarkerStyles
编写了图像绘图.CustomItems
.有关详细信息,请参阅此处..Series.MarkerSize
但通过在循环内设置 ir = S.MarkerSize;
等很容易调整代码!Font
..chart.ApplyPaletteColors()
. This is necessary to access the Series
color.NamedImage
and Chart.Images
. This is neccessary since setting any images in a Chart
requires a string!LegendCells
. For an example see here!ChartType
(Line
) and only two MarkerStyles
. CustomItems
. See here for more info..Series.MarkerSize
but it is easy to adapt the code by setting ir = S.MarkerSize;
etc inside the loop!Font
..