2015-02-24 57 views
0

我有一个简单的时间系列图表,从0到5秒。Zedgraph - 最后一个小勾号消失

 GraphPane pane = zedGraph.GraphPane; 
     pane.XAxis.Type = AxisType.Date; 
     pane.XAxis.Scale.Format = "mm:ss.fff"; 
     pane.XAxis.Scale.Min = new XDate(2011, 2, 5, 0, 0, 0, 0); 
     pane.XAxis.Scale.Max = new XDate(2011, 2, 5, 0, 0, 5, 0); 

     pane.YAxis.Scale.MajorStep = 1; 
     pane.YAxis.Scale.Min = -1.0; 
     pane.YAxis.Scale.Max = 3.0; 

     zedGraph.IsEnableWheelZoom = true; 
     zedGraph.AxisChange(); 
     zedGraph.Invalidate(); 

小勾号应小于1秒。但是zedgraph并不会在每个主要时间点前显示每个最后一个小勾号。

如果我缩小到小于1秒,它会正常显示。 当我改变主要和次要尺度,可能有几个主要的蜱前打勾丢失:

 pane.XAxis.Scale.MajorUnit = DateUnit.Second; 
     pane.XAxis.Scale.MajorStep = 1; 
     pane.XAxis.Scale.MinorUnit = DateUnit.Second; 
     pane.XAxis.Scale.MinorStep = 0.10; 

不Zedgraph有一定的局限性处理以毫秒为单位次要刻度秤?

+0

解释问题的一些屏幕: http://i.stack.imgur.com/JJomI.jpg http://i.stack.imgur.com/uS6Ci.jpg – Sairus 2015-02-24 16:59:02

回答

0

看起来像这样是Axis.DrawMinorTics方法中的问题。

轴值是双和XDate用途可以说天作为其基本单元,2011,2,5和2011,2,5,0,0,5被转换为兼作40579.0和40579.000057870522

当计算是否绘制次要标记,使用ε值来将刻度值与下一个主要值进行比较。这个例子中的epsilon是1e-10。考虑到XDate的基数使用与毫秒相比如此之大,该比较计算开始变得非常小。

你怎么能解决此问题:

如果您使用的是源直接可以更新Axis.DrawMiorTicks使用较小的小量。 1e-20应该足够小。

如果使用二进制版本(例如nuget包),则可以用开始值偏移所有日期值,以便日期更小,计算的可能性更小。

var start = new XDate(2011, 2, 5); 
pane.XAxis.Scale.Min = new XDate(2011, 2, 5, 0, 0, 0, 0) - start; 
pane.XAxis.Scale.Max = new XDate(2011, 2, 5, 0, 0, 5, 0) - start; 

然而这并不保证它不会再与一些值,如XDate使用天为一个基本单元和扩展到毫秒级,这将最终再次发生发生。

更好的解决方案是将基本单位设为几秒或甚至几毫秒,根本不使用AxisType.Date设置,并连接到XAxisScaleFormatEvent事件以手动设置值。

+0

谢谢您的解释!我只是设置新的XDate(1899,12,30,0,0,5,0),它工作正常。 – Sairus 2015-03-05 18:09:23