2017-03-07 54 views
0

我正在嘗試使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

使用PostPaint事件添加內置圖不支持的內容。 –

+0

您可以爲此使用標記或註釋。截圖總是有助於理解你想要的東西.. – TaW

回答

0

一種選擇是使用兩種系列或點的MarkerImage屬性以將每個字母的自定義位圖標籤:

AB

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"; 
} 
+0

我想使用你的代碼,但在我的系統中,TextRenderingHint.AntiAlias無法識別..我有名稱空間繪圖,你有任何想法爲什麼它不工作? –

+1

確保包含名稱空間System.Drawing.Text –

相關問題