自定义图表元素

Custom chart elements

我想在 C# 中使用自定义元素制作图表。我有:

我想要的:

红圈标记的元素需要用图片替换。我的程序代码很短,只是图表的一些值。图表的所有设置均由图表部分的 "Collection" 设置(如第一张图片所示)。

这是一个 BoxPlot 图表,需要 6 个 y 值。

您可以添加它们或让图表计算它们。

您似乎想将多张图像添加到各种 y 值..

这里有一个例子,说明如何通过所有者绘制图表来做到这一点。 (不,不是整个图表,只是一些额外的自定义绘图;-)

它将图像添加到 每个 的 y 值;只适应您真正想要的那些值应该很容易。如果你只想要一个,你甚至可以取消 ImageList 并从资源中选择图像; (尽管使用 ImageList 是一种不错的方式,只要您能忍受 256x256 最大尺寸的限制并且所有图像具有相同的尺寸和颜色深度..)

您似乎只想要其中之一:

4 Average and mean

5 Median

private void chart_PostPaint(object sender, ChartPaintEventArgs e)
{
    Series s1 = chart.Series[0];
    ChartArea ca = chart.ChartAreas[0];
    Axis ax = ca.AxisX;
    Axis ay = ca.AxisY;
    Graphics g = e.ChartGraphics.Graphics;
    int iw = imageList1.ImageSize.Width / 2;
    int ih = imageList1.ImageSize.Height / 2;
    foreach (DataPoint dp in s1.Points)
    {
        int x = (int) ax.ValueToPixelPosition(dp.XValue);
        for (int i = 0; i < 6; i++)
        {
            int y = (int) ay.ValueToPixelPosition(dp.YValues[i]);
            g.DrawImage(imageList1.Images[i], x - iw, y - ih);
        }
    }
}

我建议使用 png 具有透明度和奇数宽度的文件,这样它们看起来不错并且居中。 (我随机使用了 16x16,这不是很好 ;-) - 为此你需要设置 ImageSizeImageListColorDepth

要进一步设计图表样式,您可以使用这些特殊属性

Custom attributes

BoxPlotPercentile, BoxPlotSeries, BoxPlotShowAverage, BoxPlotShowMedian, BoxPlotShowUnusualValues, BoxPlotWhiskerPercentile, DrawSideBySide, MaxPixelPointWidth, MinPixelPointWidth, PixelPointDepth, PixelPointGapDepth, PixelPointWidth, PointWidth

注意需要全部设置为字符串,可能是这样:

  s1.SetCustomProperty("someAttribute", "someValue");