一、准備工作
首先我們需要到官網下載所需的文件:
官網下載(筆者選擇的是jquery.jqplot.1.0.8r1250.zip這個版本)
然后讀者需要根據自己的情況新建一個項目並且按照如下的方式加載對應的js和css(因為筆者在VS2012環境下新建的,並且所需的js和css都會對應的放到js和css文件夾下,請讀者根據自己的情況修正加載的路徑)。
1 <link href="css/jquery.jqplot.min.css" rel="stylesheet" /> 2 <script src="js/jquery.min.js"></script> 3 <script src="js/jquery.jqplot.min.js"></script> 4 5 <!--[if lt IE 9]> 6 <script src="js/excanvas.min.js"></script> 7 <![endif]--> 8 <script src="js/jqplot.dateAxisRenderer.min.js"></script> 9 <script src="js/jqplot.ohlcRenderer.min.js"></script> 10 <script src="js/jqplot.highlighter.min.js"></script>
其中最后三個js文件在plugins下,今后會經常使用到這個文件夾下的文件,因為他們是很多擴展功能所需的文件。除了引用基本的文件之后我們還需要放置一個占位符用來作為圖表的容器,我們需要放置一個寬度為500高度為300的DIV:
1 <div id="chart" style="width:500px;height:300px;" ></div>
二、正文
今天我們將會介紹一個全新的圖表,而且這個圖表也比較偏向於行業,它的名字就是陰陽燭圖,當然我們首先需要具備一組數據,這樣我們才能夠使用Jqplot去呈現,下面是我們后面示例中需要用到的數據:
var ohlc = [ ['06/15/2009 16:00:00', 136.01, 139.5, 134.53, 139.48], ['06/08/2009 16:00:00', 143.82, 144.56, 136.04, 136.97], ['06/01/2009 16:00:00', 136.47, 146.4, 136, 144.67], ['05/26/2009 16:00:00', 124.76, 135.9, 124.55, 135.81], ['05/18/2009 16:00:00', 123.73, 129.31, 121.57, 122.5], ['05/11/2009 16:00:00', 127.37, 130.96, 119.38, 122.42], ['05/04/2009 16:00:00', 128.24, 133.5, 126.26, 129.19], ['04/27/2009 16:00:00', 122.9, 127.95, 122.66, 127.24], ['04/20/2009 16:00:00', 121.73, 127.2, 118.6, 123.9], ['04/13/2009 16:00:00', 120.01, 124.25, 115.76, 123.42], ['04/06/2009 16:00:00', 114.94, 120, 113.28, 119.57], ['03/30/2009 16:00:00', 104.51, 116.13, 102.61, 115.99], ['03/23/2009 16:00:00', 102.71, 109.98, 101.75, 106.85], ['03/16/2009 16:00:00', 96.53, 103.48, 94.18, 101.59], ['03/09/2009 16:00:00', 84.18, 97.2, 82.57, 95.93], ['03/02/2009 16:00:00', 88.12, 92.77, 82.33, 85.3], ['02/23/2009 16:00:00', 91.65, 92.92, 86.51, 89.31], ['02/17/2009 16:00:00', 96.87, 97.04, 89, 91.2], ['02/09/2009 16:00:00', 100, 103, 95.77, 99.16], ['02/02/2009 16:00:00', 89.1, 100, 88.9, 99.72], ['01/26/2009 16:00:00', 88.86, 95, 88.3, 90.13], ['01/20/2009 16:00:00', 81.93, 90, 78.2, 88.36], ['01/12/2009 16:00:00', 90.46, 90.99, 80.05, 82.33], ['01/05/2009 16:00:00', 93.17, 97.17, 90.04, 90.58], ['12/29/2008 16:00:00', 86.52, 91.04, 84.72, 90.75], ['12/22/2008 16:00:00', 90.02, 90.03, 84.55, 85.81], ['12/15/2008 16:00:00', 95.99, 96.48, 88.02, 90], ['12/08/2008 16:00:00', 97.28, 103.6, 92.53, 98.27], ['12/01/2008 16:00:00', 91.3, 96.23, 86.5, 94], ['11/24/2008 16:00:00', 85.21, 95.25, 84.84, 92.67], ['11/17/2008 16:00:00', 88.48, 91.58, 79.14, 82.58], ['11/10/2008 16:00:00', 100.17, 100.4, 86.02, 90.24], ['11/03/2008 16:00:00', 105.93, 111.79, 95.72, 98.24], ['10/27/2008 16:00:00', 95.07, 112.19, 91.86, 107.59], ['10/20/2008 16:00:00', 99.78, 101.25, 90.11, 96.38], ['10/13/2008 16:00:00', 104.55, 116.4, 85.89, 97.4], ['10/06/2008 16:00:00', 91.96, 101.5, 85, 96.8], ['09/29/2008 16:00:00', 119.62, 119.68, 94.65, 97.07], ['09/22/2008 16:00:00', 139.94, 140.25, 123, 128.24], ['09/15/2008 16:00:00', 142.03, 147.69, 120.68, 140.91] ];
有了這組數據之后我們就可以開始完成圖表了,既然是新的圖表必然我們就需要使用新的引擎,相信學習了幾篇的讀者一眼就能夠發現今天我們需要使用OHLCRenderer引擎,而X軸依然是使用DteAxisRenderer引擎,畢竟是時間。下面我們通過如下的代碼來制作圖1.1所示的圖表:
1 $.jqplot('chart', [ohlc], { 2 title: "陰陽燭圖", 3 seriesDefaults:{yaxis:"y2axis"}, 4 axes: { 5 xaxis: { 6 renderer: $.jqplot.DateAxisRenderer, 7 tickOptions: { formatString: "%b %e" }, 8 min: "09-01-2008 16:00", 9 max: "06-22-2009 16:00", 10 tickInterval: "5 weeks" 11 }, 12 y2axis: { 13 tickOptions: {formatString:"$%d"} 14 } 15 }, 16 series: [{ renderer: $.jqplot.OHLCRenderer }], 17 highlighter: { 18 show: true, 19 showMarker: false, 20 tooltipAxes: "xy", 21 yvalues: 4, 22 formatString: '<table class="jqplot-highlighter"> \ 23 <tr><td>date:</td><td>%s</td></tr> \ 24 <tr><td>open:</td><td>%s</td></tr> \ 25 <tr><td>hi:</td><td>%s</td></tr> \ 26 <tr><td>low:</td><td>%s</td></tr> \ 27 <tr><td>close:</td><td>%s</td></tr></table>' 28 } 29 });
其中seriesDefaults表示Y軸顯示的數據放到右邊的Y軸,axes下的xaxis中則通過min和max指定X軸顯示的最大日期和最小日期,並且還通過tickInterval指定我們的間隔為6個星期,其中還有一個新的特性就是提示框的格式是可以自定義的,這里我們就通過highlighter的formatString指定了,但是光指定還是沒用,還要告訴它如何去呈現這個自定義的提示,所以我們還需要借助tooltipAxes指定數據從x軸到y軸來獲取並呈現,並且從X軸獲取一個數據填充formatString的第一次占位符,而用Y軸中按順序獲取4個值來填充,這個的4是用過yvalues指定的,這樣我們就可以自定義提示了。
圖1.1
該圖中每條豎線都有兩個小橫桿,他們分別表示開始時的價格,和關閉時的價格,而豎線的兩端則表示最低價以及最高價,但是通過這個圖我們沒法直觀的看出開始的價格和關閉時的價格,所以我們還可以指定另一個參數讓他們從小橫線變成矩形,這樣就能夠直觀的看到圖1.2的效果了:
1 $.jqplot('chart', [ohlc], { 2 title: "陰陽燭圖", 3 seriesDefaults:{yaxis:"y2axis"}, 4 axes: { 5 xaxis: { 6 renderer: $.jqplot.DateAxisRenderer, 7 tickOptions: { formatString: "%b %e" }, 8 min: "09-01-2008 16:00", 9 max: "06-22-2009 16:00", 10 tickInterval: "5 weeks" 11 }, 12 y2axis: { 13 tickOptions: {formatString:"$%d"} 14 } 15 }, 16 series: [{ 17 renderer: $.jqplot.OHLCRenderer, 18 rendererOptions: { 19 candleStick: true 20 } 21 }], 22 highlighter: { 23 show: true, 24 showMarker: false, 25 tooltipAxes: "xy", 26 yvalues: 4, 27 formatString: '<table class="jqplot-highlighter"> \ 28 <tr><td>date:</td><td>%s</td></tr> \ 29 <tr><td>open:</td><td>%s</td></tr> \ 30 <tr><td>hi:</td><td>%s</td></tr> \ 31 <tr><td>low:</td><td>%s</td></tr> \ 32 <tr><td>close:</td><td>%s</td></tr></table>' 33 } 34 });
這里我們僅僅只是在series中給rendererOptions的candleStick屬性設置為了true。
圖1.2