1

複数の系列データを含む折れ線グラフがあります。一連の点は互いに少し近いため、ラベルが重なっています。ポイント ラベルを単独で処理できるサポート ライブラリはありますか。

または、最も近いポイントを特定し、それに応じてラベルの位置を設定できるスマートなロジックはありますか??

4

1 に答える 1

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);
}

これにより、ラベルが作成され、どこに描画するかを選択できます。しかし、それはトリッキーな部分です。基本的に、グラフが画面上のどこにあり、ポイントがそのグラフのどこにあるかを見つける必要があります。非常に面倒ですが、静的グラフであれば問題ありません。それはハックだと私は知っていますが、それは機能し、誰もが思いついたようです.

于 2013-03-02T08:48:05.937 に答える