.NET图表标记大小 [英] .NET Charting Legend Marker Size

查看:300
本文介绍了.NET图表标记大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在.NET Windows窗体项目上使用DataVisualizations图表控件。我的问题是,当我打印图表的图例不显示系列标记(实际上它是一种显示,但它只是看起来像一个较暗的像素在线上)。当在表单上查看图表时,标记是可见的,尽管它们不是非常大,并且相对于系列的MarkerSize值不会改变。但是,当图表打印(在纸上或PDF上)时,标记不在那里。

I'm using the DataVisualizations Charting control on a .NET Windows form project. The problem I'm having is that when I print the chart the legend is not showing the series marker (actually it is kind of showing but it just looks like a darker pixel on the line). When the chart is viewed on the form the markers are visible although they are not very large and do not seem to change in relation to the MarkerSize value for the series. But when the chart is printed (on paper or to a PDF) the markers are not there.

此图片显示在表单上查看时图表的视图。正如你可以看到的图例标记是可见的,但仍然没有附近的实际系列标记是什么。

This picture shows the view of the chart when viewed on the form. As you can see the legend markers are sort of visible but still no where near what the actual series markers are.

此图片显示相同图表的PDF版本。

This image shows a PDF version of the same chart. If you squint real hard you can see darker pixel in the center of the legend line.

如何修复图例标记,使其在打印时显示,并使其大小更大?

How can I fix the legend markers so they actually show when printed and to make them larger in size?

推荐答案

由于似乎没有办法控制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..

这篇关于.NET图表标记大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆