參考資料 ----
Apache Echarts 原本由百度開發並開放源碼,之後百度貢獻給 Apache,成為 Apache 的專案項目之一,所以有詳盡豐富的中文參考文檔(雖然是簡體中文)。
這個真的要狂推!不僅免費,功能強大,又容易上手,而且有中文文檔。
要使用 ECharts 有多種方法,老人家選擇 "通过 jsDelivr 等 CDN 引入 的方式",除了 jsDelivr 外,還有 Staticfile;直接由 CDN 引入好像成了目前的趨勢,ZingChart 現在也採用這種方式。
最簡單的範例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts</title> <!-- 引入 echarts.js --> <script src="https://cdn.jsdelivr.net/npm/echarts@5.0.2/dist/echarts.min.js"></script> <!-- 引入 vitage 樣式 js --> <script src="https://cdn.jsdelivr.net/npm/echarts@5.0.2/theme/vintage.js"></script> </head> <body> <!-- 為 ECharts 準備一個具備大小(寬高)的 DOM --> <div id="main" style="width:600px; height:400px;"></div> <script type="text/javascript"> <?php $aDlday = [5, 20, 36, 10, 10, 20]; $aExam = ["1"=>7, "2"=>15, "3"=>26, "4"=>1, "5"=>17, "6"=>32]; echo 'var aDlday = '.json_encode($aDlday,JSON_NUMERIC_CHECK).";\n"; // 將 PHP 陣列轉出成 javascript 陣列 // 要注意 json_encode() 的第 2 個參數 // 若沒有第 2 個參數, json_encode 預設會轉出成 字串 陣列, 每個數字會以雙引號包住 // 這樣會造成圖表的顯示出現無法預期的結果,ex: 線亂畫、座標點錯誤... // 當陣列有索引時,要先轉成無索引陣列 $arr = array_values($aExam); echo 'var aExam = '.json_encode($arr,JSON_NUMERIC_CHECK).";\n"; ?> // 基於準備好的 DOM,初始化 echarts 實體 var myChart = echarts.init(document.getElementById('main'), 'vintage'); // 第 2 個參數 是 樣式 選項: 預設, light(內建), dark(內建), vintage, macarons, infographic, shine, roma // 如果沒有 "樣式" 參數,就是預設樣式 // light樣式 與 預設樣式 的差異在 light 的顏色比預設更淡 // 若要採用不同樣式, 除了內建的 light/dark,其他樣式則上面也要引入相應的 js // 指定圖表的配置項和數據 var option = { title: { text: 'ECharts 入門範例' // 圖表標題 }, tooltip: {}, legend: { // 圖例(即折線, 直條, ...)說明 // 預設位置在圖表上方, 可在上 top, 左 left, 右 right // 例如 left:30 // type: 'scroll', // 當要畫的圖例很多項時, 可以捲動方式顯示 data:['下載數','練習數'] // 注意這裡的陣列元素就是下方 series 的 name 屬性 }, xAxis: { boundaryGap:false, // 預設值 true,名稱會顯示在 x 軸兩個座標點中間 // 值為 false 時,則名稱顯示在 x 軸座標點 data: ["初等考試","大學指考","高考護理師","國中會考","機車駕照","汽車駕照"] }, yAxis: {}, // y 軸座標, 預設是數值, 會自動隨 series 的數值改變 // 例如:本例 series 最大值 36, 則 y 軸座標點自動顯示為 10, 20, 30, 40 series: [{ name: '下載數', type: 'line', // 圖表種類為 長條圖 // 另有 line(折線圖), radar(雷達圖), pie(圓餅圖), tree(樹狀圖), gauge(儀表板), // k(K線圖), scatter(散點圖), ... // 可參考示例 https://echarts.apache.org/examples/zh/index.html#chart-type-scatter data: aDlday, // 這是由 PHP 轉出的陣列 symbol: 'emptyCircle', // 折點的樣式, 預設為 'emptyCircle', 其他值有 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none' }, { name: '練習數', type: 'line', data: aExam }], tooltip: { // 是否顯示折點的數值, 預設為 none // item: 滑鼠移至該折點時, 只顯示該折點的值 // axis: 會顯示一條通過滑鼠的垂直(虛)線, 及在垂直線上所有折點的值 trigger: 'axis' // item, axis, none }, }; // 使用剛才指定的配置項和數據顯示圖表。 myChart.setOption(option); </script> </body> </html>
Echarts 會自動幫您為每條線配色,您也可以自己指定顏色。
點擊 legend 的某一項目,代表該項目的線就會隱藏,再點一次,就又出現,這在很多線條時很好用,可以將部份線隱藏,觀察您關心的某幾條線。
試著將陣列 aExam 的值放大 100 倍,這時 aDlday 的折線會因為數值太低而趜近水平線。
我們可以顯示雙 Y 軸,左邊的 Y 軸顯示下載數,右邊的 Y 軸顯示練習數。
... ... $aDlday = [5, 20, 36, 10, 10, 20]; $aExam = ["1"=>700, "2"=>1500, "3"=>2600, "4"=>100, "5"=>1700, "6"=>3200]; ... ... yAxis: [ { // 左右兩邊都有座標軸 name: '下載數', type: 'value' }, { name: '練習數', type: 'value', // inverse: true // 數字小的在上 } ], series: [{ name: '下載數', type: 'line', data: aDlday, yAxisIndex:0, // 加入這列參數 symbol: 'emptyCircle' }, { name: '練習數', type: 'line', yAxisIndex:1, // 加入這列參數 data: aExam }],
相關筆記 ----
24行變數沒打$
回覆刪除謝謝指正
刪除