ZedGraph Point标签重叠

时间:2013-01-23 22:54:38

标签: c# charts zedgraph linechart

我有多个系列数据的折线图。串联的点彼此不太接近,因此由于这个原因,标签彼此重叠。 是否有任何支持lib可以自己处理点标签。

或者是否有任何智能逻辑可以识别最近的点并相应地设置标签的位置?

1 个答案:

答案 0 :(得分: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);
}

这将为您创建一个标签,您可以选择绘制它的位置。然而,这是棘手的部分。您需要基本找出图表在屏幕上的位置以及该图表上的点。非常麻烦,但如果它是一个静态图形,那么它应该不是问题。这是一个黑客,我知道,但它的确有效,而且似乎所有人都想出来。