我试图将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
来实现我的目标?
提前致谢。
答案 0 :(得分:0)
一种选择是使用系列或点的MarkerImage
属性来应用每个字母的自定义位图标签:
chart.Series[0].MarkerImage = "a.png";
chart.Series[0].Points[2].MarkerImage = "b.png";
chart.Series[0].Points[4].MarkerImage = "b.png";
位图图像可以在绘图程序中创建,并随程序一起分发。它们也可以动态生成,如下面的(高度简化的)示例所示:
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";
}