2014-12-18 3 views
1

ZedGraph을 사용하고 있으며 GraphPane 개체에서 각 Y 축을 가로 지르는 가로 선을 그리는 데 어려움을 겪고 있습니다. GraphPane에 수평 라인을 그리기LineObj y 값을 특정 Y 축에 연결하는 방법은 무엇입니까?

간단하다 : 나는 많은 Y에 부착 된 여러 CurveItems이 경우에는 상황이 더 복잡해지고있다

var l = new LineObj(0, y, 1, y); 
l.IsClippedToChartRect = true; 
l.Location.CoordinateFrame = CoordType.XChartFractionYScale; 
pane.GraphObjList.Add(l); 

같은 GraphPane에 축.

Y 또는 Y2 이외의 다른 Y 축척을 사용하여 각 CurveItem에 수평선을 그려야합니다.

foreach(var ci in pane.CurveItems) 
{ 
    ... 
    var l = new LineObj(0, y, 1, y); 
    l.IsClippedToChartRect = true; 
    l.Location.CoordinateFrame = ??? // CoordType.XChartFractionYScale is for the main Y axis ! 
    // How to specify a Y value for LineObj 
    // and "attach" it to another Y axis than Y and Y2 ? 
} 

한편, 나는

var yaxis = ci.GetYAxis(foundPane); 
var yy = getHTarget(1d - (y - yaxis.Scale.Min)/(yaxis.Scale.Max - yaxis.Scale.Min)); 
... 
l.Location.CoordinateFrame = CoordType.ChartFraction 

를 사용할 수 있지만, 정말 Y 축 스케일에 LineObj을 "연결"하지 않습니다.

나 또는 ZedGraph에서 일부 부품이 누락 된 것처럼 보입니다. XChartFractionYScaleIndexed과 함께 사용되는 l.Location.YAxisIndex과 같은 것이 부족합니다.

사용자 정의 GraphObj를 작성하기 전에 누군가에게 해결책이 있는지 듣고 싶습니다.

+0

뭔가 오래된 녀석을 어떻게 관리? :) –

+0

[yahoo finance] (http://finance.yahoo.com/echarts?s=%5EIXIC+Interactive#%7B%22scale%22%3A%22linear%22%7D)의 커서를 모방하려고합니다.) 차트. ChartFraction 팁을 사용하여 정상적으로 실행되지만 GraphObj를 특정 도끼에 고정시킬 수 없습니다. 내 트렌드 응용 프로그램은 하나 이상의 Y 축을 처리하므로 개별적으로 확대/축소 및 이동할 수 있습니다. 일단 마우스 포인터가 차트 외부에 있으면 GraphObj를 숨겨야합니다. – Larry

+0

안녕 Larry, 채팅 준비가 되었습니까? –

답변

1

커브 개체를 사용하고 싶습니다.

아래에 수평 파선을 그리는 방법을 설명합니다.

Yahoo Finance 그래프에 대한 귀하의 의견에 따라 2 차 곡선 오브젝트를 사용하여 수직선에 대해서도 동일한 작업을 수행하고 곡선 오브젝트에 대한 포인트 쌍을 재 할당하여 선을 이동할 수 있습니다.

~ 마이크

//reference to the graph to draw on 
GraphPane oPane = ZedGraph.MasterPane[0]; 

double fMinX = 0; 
double fMaxX = 100; 
double fYvalue = 42; 

//values for the point pair list to define the horizontal line 
var oPPL = new PointPairList(); 
oPPL.Add(fMinX, fYvalue); 
oPPL.Add(fMaxX, fYvalue); 

//draw the line as a curve object, then format.... 
var oPoints = oPane.AddCurve(string.Empty, oPPL, Color.Red, SymbolType.None); 
oPoints.Line.IsVisible = true; 
oPoints.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
oPoints.Line.Width = 3F; 
oPoints.Symbol.IsVisible = false; 

//and hang on to the curve object so you can move the line around as needed 
      oPoints.Clear(); 
      oPoints.AddPoint(blah blah blah... 
관련 문제