2012-08-05 112 views
4

我正在使用jqPlot(版本1.0.2,我相信 - 7/25/12發行版)爲各種值呈現一天的太陽能生產價值。當我放大一天的某個部分時,通常會渲染圖表的錯誤區域。jqplot無法用日期軸渲染器正確縮放

這裏有情節的選項 -

var plotOptions = { 
    series: [{ showMarker:false} ], 
    axes: { 
     xaxis:{ 
      renderer:jQuery.jqplot.DateAxisRenderer, 
      tickOptions:{ 
       formatString:'%R' 
      }, 
      min: data[0].time * 1000, 
      max: data[data.length - 1].time * 1000 
     }, 
     yaxis: { 
      tickOptions: { 
       formatString: '%.3f' 
      } 
     } 
    }, 
    highlighter: { 
     show : true, 
     sizeAdjust: 7.5 
    }, 
    cursor: { 
     show : true, 
     zoom: true, 
     showToolTip: false 
    } 
}; 

的數據是整個電氣系統1米分鐘的樣品,與當前的默認值是一個相臂(標準的北美電力系統的交流電流 - - 120/240伏交流電)。通常有1440個樣本,每天一個分鐘。

我看到的情況是我會選擇一個區域,通常是4或6小時,並且數據的錯誤部分正在放大。例如,如果我選擇午夜到上午8點,我會看到凌晨4點到上午8點(或者上午9點,如果我在上午8點放大一點)縮放。這是相當一致的 - 顯示的範圍的後半部分 - 但我也看到情況下,沒有押韻或原因顯示,並且值可能放大得如此近,我不知道是什麼。

我試圖從例子中偷竊,但無濟於事。我也嘗試限制我的數據集的大小,這似乎沒有什麼幫助。

UPDATE:我試着從使用原始時間戳使用日期()對象,但沒有成功切換...

+1

因爲我開始使用jqplot進行縮放問題,所以我切換到[flot](http://people.iola.dk/olau/flot/examples/)。即使強硬的jqplot在視覺上更豐富,flot證明更可靠。 – 2012-08-05 13:11:25

+0

托馬斯 - 這就是我所要做的。除了「還沒有答案!」問題,我猜flot會是更好的選擇。如果我厭惡地放棄,我保證我會接受「轉儲jqPlot!」作爲你的回答;) – 2012-08-05 21:59:48

+0

@Thomas - 我一直在四處尋找stackoverflow,看看有多少其他jqPlot問題,並且有大量的問題沒有答案。所以...它看起來像切換到flot是正確的答案... – 2012-08-09 10:36:17

回答

2

我遇到了同樣的問題。我無法切換到Flot,儘管它也是一個很好的包裝。我做了一些挖掘,發現this post在jqplot用戶谷歌組有答案。

下面是簡短的答案。 src \ plugins \ jqplot.dateAxisRenderer.js中存在一個錯誤。該帖子裏說的解決辦法是commment出在dataAxisRenderer.js以下文件

min = new $.jsDate(min); 
min = min.getTime() + min.getUtcOffset(); 

不過,我不知道,如果

min = new $.jsDate(min); 
min = min.getTime(); 

是否必要,刪除此威力是一個壞主意。我沒有注意到任何東西,但我認爲我們可以保留這些線,並刪除min.getUtcOffset()

+0

就是這樣!我使用了最小化的JS文件,因此我必須在jqplot.dateAxisRenderer.js中搜索getUtcOffset(),拆分該行,然後註釋掉錯誤代碼以測試修訂。 – 2013-04-21 03:50:09

1

不是要低估jqPlot,這是一個偉大的插件,爲建設具有視覺吸引力的圖形和圖表,我建議你也看看Flot的建築圖與縮放功能。我已經嘗試過並發現Flot對於這種要求更可靠。

配置,同時使用海軍報日期時間軸(從Flot Reference)的一些技巧:

在海軍報的時間序列的支持是基於JavaScript的時間戳,你可以看到這樣的時間戳:

alert((new Date()).getTime()) 

.NET你可以得到適當的時間戳:

public static int GetJavascriptTimestamp(System.DateTime input) 
{ 
    System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse("1/1/1970").Ticks); 
    System.DateTime time = input.Subtract(span); 
    return (long)(time.Ticks/10000); 
} 

有些時間格式在這個SO question討論。