2013-07-26 54 views
1

我正在嘗試使用DyGraphs來繪製股票數據。它在繪製和縮放數據方面做得很完美。但由於股票沒有在假期交易,我在數據上存在空白。我不希望星期六和星期日在X軸上顯示。我希望在Google財經上有這樣的圖表,其中X軸跳過星期六和星期日(沒有數據的日期)。那可能嗎?如果我使用繪圖儀選項,可以實現這個結果嗎?如何在Dygraps x軸上跳過週末。

p.s.我不介意圖表是否縮放到小時或分鐘級別。

+0

這將是很難 - dygraphs僅支持線性x軸,所以你唯一的希望就是讓你的X座標「市場開放分鐘「,即某事,例如包括市場未開放的時候。然後您必須使用axisLabelFormatter,valueFormatter和可能的ticker將它們轉換回日期。 – danvk

+0

感謝您的回覆。我希望我可能錯過了一些可以實現魔法的選項。現在,我將使用數字軸,並在相應的div中在圖表上顯示相應的日期。如果我能成功地在不破壞整個事情的情況下正確地更改代碼,就會在這裏更新。 –

回答

1

我一直認爲,也許我們可以從Dygraphs中抽象出足夠多的軸,使其不僅僅是線性與對數的定義,而是問題在於它很容易變得低效。 Dygraphs速度很快,有時候我們會保留這些功能來保持它。但任何想法都會受到歡迎。

1

這是幾年後,但我有一個簡單的解決方案。

下面是我用的數據:https://pastebin.com/kbT6gY2u

它被格式化爲顯示爲燭臺(日期,打開,關閉,高,低),因爲我用在這裏找到繪圖儀:http://dygraphs.com/tests/plotters.html但是我的解決方案將與合作默認繪圖儀。

的原理是這樣的:

  • 推入你的數據到陣列中的每個日期,並通過其指數更換日期。這將刪除數據中的所有空白,以便您可以製作一張連續的圖表。
  • 創建自定義axisLabelFormatter到索引上的X再次轉換爲日期軸
  • 創建自定義valueFormatter到索引再次在圖例上/鼠標移到

代碼示例轉換爲日期(使用代碼清晰underscore.js和moment.js)

var dateIndex = []; 
var data = _.map(data, function(line, n) { 
    dateIndex.push(line[0]); // Save the date to the array 
    line[0] = dateIndex.length-1; // Replace the date by the index of the date in the array 
    return line; 
}); 
var g = new Dygraph(element, data, { 
    axes: { 
     x: { 
      valueFormatter: function (val, opts, series_name, dygraph) { 
       // val is the date, which we have rewritten to the array's index. 
       // So here we can exchange it back for the actual date, and format it 
       return moment(dateIndex[val]).format("dddd, MMM Do YYYY, h:mm a"); 
      }, 
      axisLabelFormatter: function (val, granularity, opts, dygraph) { 
       return moment(dateIndex[val]).format("MMM DD"); 
      } 
     } 
    } 
}); 
+1

不錯! +1(分鐘字符是堆棧上的波洛尼) – NimChimpsky