6

我有一个带有几条曲线的 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);

这在用户缩放图表之前工作正常,然后垂直线将延伸出实际的图表区域(参见下面的图片链接,还请注意它在图表内没有虚线,奇怪)。

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

有没有办法解决这个问题(如果只有一种方法可以获取当前缩放的 myPane.Xaxis.Scale.Min 和 Max,然后更新 ZoomEvent 中的图形?)或者有没有更好的类/方法来使用其他为此目的而不是 LineObj?

4

2 回答 2

3

不要定义 a LineObj,而是定义 aLineItem并将其添加到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位置仍将被限制在图形中。当然,如果您在不更新 的y值的情况下缩小line,则line端点将在图形内。

我从个人经验中知道,冲刺可能是 Zedgraph 中的一个问题。但是,添加 时似乎正确显示了破折号LineItem

于 2012-08-03T12:12:24.350 回答
3

您正在使用 LineObj 而不是 CurveItem 的好方法。

查看Location结构和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);
于 2013-11-11T19:49:04.100 回答