2013-01-23 119 views
1

我有多個系列數據的折線圖。由於這個原因,系列中的點很少彼此靠近,所以標籤與彼此重疊。 是否有任何可以自行處理點標籤的支持庫?ZedGraph點標籤重疊

或者是否有智能邏輯可以識別最近的點並相應地設置標籤的位置?

+0

我很好奇,如果你有這個工作。你有一些成功嗎? – tmwoods

回答

0

也許試試IsPreventLabelOverlap屬性爲true。不幸的是,這通常會擦除重疊的標籤,而不會將其展開。所以考慮到這一點,請參閱下文。

沒有一個圖書館可以按照您的要求提供,但有postpaint選項。不幸的是Zedgraph不能修復重疊的標籤(我試了很長時間,沒有運氣)。然而,有一個解決方法,但它是乏味的,你必須真正考慮放置你的圖形標籤的位置。請參見下面的代碼一個簡單的方法來添加一個標籤:

protected void Chart1_PostPaint(object sender, ChartPaintEventArgs e) 
{ 
    if (e.ChartElement is Chart) 
{ 
// create text to draw 
String TextToDraw; 
TextToDraw = "Chart Label" 

// get graphics tools 
Graphics g = e.ChartGraphics.Graphics; 
Font DrawFont = System.Drawing.SystemFonts.CaptionFont; 
Brush DrawBrush = Brushes.Black; 

// see how big the text will be 
int TxtWidth = (int)g.MeasureString(TextToDraw, DrawFont).Width; 
int TxtHeight = (int)g.MeasureString(TextToDraw, DrawFont).Height; 

// where to draw 
int x = 5; // a few pixels from the left border 

int y = (int)e.Chart.Height.Value; 
y = y - TxtHeight - 5; // a few pixels off the bottom 

// draw the string   
g.DrawString(TextToDraw, DrawFont, DrawBrush, x, y); 
} 

這將創建一個標籤爲您和您可以選擇在哪裏畫它。然而這是棘手的部分。您需要基本查明您的屏幕上的圖形以及該圖上的點。非常麻煩,但如果它是一個靜態圖,那麼它不應該成爲一個問題。我知道這是一種黑客行爲,但它起作用,並且這似乎是所有人都想出來的。