且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

.NET图表标记大小

更新时间:2023-12-05 21:01:22

由于似乎没有办法控制Legend Markers,你可能需要创建一个自定义Legend。下面是一个在表单 PDF 中的示例:

我不得不

这里是一个返回 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()。这是访问系列颜色所必需的。

  • 它还使用了一些已知的类 NamedImage Chart.Images 。这是必要的,因为在图表中设置任何图像都需要一个字符串!

  • 如果要放大图像, LegendCells 。有关示例,请参见此处

  • 我已经编写的图像绘制只有一个 ChartType )和只有两个 MarkerStyles

  • 有许多方法可自订这些 CustomItems 。有关详情,请参见此处。 。 c $> c $> c $>

  • 您可能需要将原始图例中的几个设置复制到自定义图例,而不是我所做的。我只是注意到你设置了 Font ..

  • The code uses the chart.ApplyPaletteColors(). This is necessary to access the Series color.
  • It also makes use of the little know classes NamedImage and Chart.Images. This is neccessary since setting any images in a Chart requires a string!
  • If you want to enlarge the image you may need to use LegendCells. For an example see here!
  • I have coded the image drawing only for one ChartType (Line) and only two MarkerStyles.
  • There are many ways to customize those CustomItems. See here for more info..
  • I did use the Series.MarkerSize but it is easy to adapt the code by setting ir = S.MarkerSize; etc inside the loop!
  • You may need to copy a few more settings from your original legend to the custom legend than the 3 I did. I just noticed that you have set a Font..