1
我有多個系列數據的折線圖。由於這個原因,系列中的點很少彼此靠近,所以標籤與彼此重疊。 是否有任何可以自行處理點標籤的支持庫?ZedGraph點標籤重疊
或者是否有智能邏輯可以識別最近的點並相應地設置標籤的位置?
我有多個系列數據的折線圖。由於這個原因,系列中的點很少彼此靠近,所以標籤與彼此重疊。 是否有任何可以自行處理點標籤的支持庫?ZedGraph點標籤重疊
或者是否有智能邏輯可以識別最近的點並相應地設置標籤的位置?
也許試試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);
}
這將創建一個標籤爲您和您可以選擇在哪裏畫它。然而這是棘手的部分。您需要基本查明您的屏幕上的圖形以及該圖上的點。非常麻煩,但如果它是一個靜態圖,那麼它不應該成爲一個問題。我知道這是一種黑客行爲,但它起作用,並且這似乎是所有人都想出來的。
我很好奇,如果你有這個工作。你有一些成功嗎? – tmwoods