2013-01-23 3 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); 
} 

이 당신을 위해 레이블을 만들 것입니다 그리고 당신은 어디를 그리는 방법을 선택할 수 있습니다 : 레이블을 추가하는 간단한 방법은 아래 코드를 참조하십시오. 그러나 그것은 까다로운 부분입니다. 기본적으로 화면에 그래프가있는 위치와 해당 그래프에 포인트가있는 지점을 찾아야합니다. 매우 복잡하지만 정적 그래프 인 경우에는 문제가되지 않습니다. 그것은 해킹입니다. 알아요.하지만 작동하고 모든 사람이 생각해 냈습니다.