複数の系列データを含む折れ線グラフがあります。一連の点は互いに少し近いため、ラベルが重なっています。ポイント ラベルを単独で処理できるサポート ライブラリはありますか。
または、最も近いポイントを特定し、それに応じてラベルの位置を設定できるスマートなロジックはありますか??
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);
}
これにより、ラベルが作成され、どこに描画するかを選択できます。しかし、それはトリッキーな部分です。基本的に、グラフが画面上のどこにあり、ポイントがそのグラフのどこにあるかを見つける必要があります。非常に面倒ですが、静的グラフであれば問題ありません。それはハックだと私は知っていますが、それは機能し、誰もが思いついたようです.