在折线图中使用文本作为点标记

时间:2017-03-07 12:12:11

标签: c# winforms charts

我试图将C#Chart中的点显示为字母(例如“A”和“B”)来分隔各组点,而不是用绿色/红色着色。 点集合的Label属性不满足此请求,因为它只将标签放在旁边,我希望标签替换点。

这就是我所拥有的:

while (reader.Read())
{                    
    if (reader[2].ToString() == "Kupi 002")
        chart3.Series["Good_Group"].Points[pointsCounter].Label = "A";
    else
        chart3.Series["Good_Group"].Points[pointsCounter].Label = "B";
    pointsCounter = pointsCounter + 1;
}

我应该使用什么属性而不​​是Label来实现我的目标?

提前致谢。

1 个答案:

答案 0 :(得分:0)

一种选择是使用系列或点的MarkerImage属性来应用每个字母的自定义位图标签:

A B

chart.Series[0].MarkerImage = "a.png";
chart.Series[0].Points[2].MarkerImage = "b.png";
chart.Series[0].Points[4].MarkerImage = "b.png";

Chart with letter labels

位图图像可以在绘图程序中创建,并随程序一起分发。它们也可以动态生成,如下面的(高度简化的)示例所示:

private void CreateLetterBitmap(char letter, string path)
{
    using (var bmp = new Bitmap(13, 13))
    using (var gfx = Graphics.FromImage(bmp))
    using (var font = new Font(FontFamily.GenericSansSerif, 12.0f, FontStyle.Bold, GraphicsUnit.Pixel))
    {
        gfx.TextRenderingHint = TextRenderingHint.AntiAlias;
        gfx.DrawString(letter.ToString(), font, Brushes.Black, new Point(0, 0));
        bmp.Save(path, ImageFormat.Png);
    }
}

private void PrepareChart()
{
    CreateLetterBitmap('A', "a.png");
    CreateLetterBitmap('B', "b.png");

    chart.Series[0].MarkerImage = "a.png";
    chart.Series[0].Points[2].MarkerImage = "b.png";
    chart.Series[0].Points[4].MarkerImage = "b.png";
}