ZedGraph垂直线与LineObj问题(ZedGraph vertical lines with

2019-09-20 18:09发布

我有在那几个曲线ZedGraphControl,我想在某个固定的x位置添加垂直线。 该行当然应该仅是实际的图形区域内。

我尝试以下

LineObj line = new LineObj(Color.Black, xPos, myPane.YAxis.Scale.Min, xPos, myPane.YAxis.Scale.Max);  
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash;
line.Line.Width = 1f;
myPane.GraphObjList.Add(line);

和直到用户放大图形能正常工作,竖直线将会然后伸出实际的图形区域(见下文PIC链接,还注意到它未在图内虚线,单数)。

http://imageshack.us/photo/my-images/196/zedgraphzoom.png/

有没有办法解决这个问题(如果仅仅有AA的方式来获得当前变焦的myPane.Xaxis.Scale.Min和Max,然后在ZoomEvent更新图表?)还是有什么更好的类的方式/方法使用其他比LineObj为了这个目的?

Answer 1:

相反定义的LineObj ,定义LineItem并将其添加到GraphPane.CurveList

LineItem line = new LineItem(String.Empty, new[] { xPos, xPos },
                new[] { myPane.YAxis.Scale.Min, myPane.YAxis.Scale.Max }, 
                Color.Black, SymbolType.None);
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash;
line.Line.Width = 1f;

myPane.CurveList.Add(line);

这种结合line在图形窗格中的坐标系统,这样当你缩放或平移line位置仍然会在图中被限制。 当然,如果你缩小而不更新yline ,该line的末端将是在图表上。

以我个人的经验,身手矫健可以在Zedgraph问题认识; 然而,这似乎是一个加时,正确显示横飞LineItem ,虽然。



Answer 2:

你是在使用LineObj而非CurveItem的好办法,。

对一看位置结构和CoordinateFrame财产。 它允许使用不同的坐标系的X和/或Y.

设置CoordinateFrameXScaleYChartFraction允许使用0D和1d为Y,意思是“底部”和图形窗格中(而不是YAxis.Scale.Min和YAxis.Scale.Max)的“顶部”,作为X继续使用在X轴刻度坐标系。

这意味着你可以使用.AxisChange(),缩放,平移和LineObj不会与Y轴的比例变化地干扰!

var line = new LineObj(Color.Black, xPos, 0, xPos, 1);

line.Location.CoordinateFrame = XScaleYChartFraction; // This do the trick !
line.IsClippedToChartRect = true;

line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash;
line.Line.Width = 1f;

myPane.GraphObjList.Add(line);


文章来源: ZedGraph vertical lines with LineObj issue