2015-02-24 63 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