淺談echarts

近日,工作原因接觸到繪製圖表,粗糙的查詢了下繪製圖表工具,也因此接觸到了echarts,下面簡單的談一下使用時一些體會。

                                    (ps:認識較爲膚淺,大神勿噴)

首先,簡單介紹一下echarts:百度出品,純Javascript圖表庫,基於Canvas,底層依賴ZRender,商業產品通用圖表庫,提供直觀,生動,可交互,可個性化定製的數據可視化圖表,支持折線圖(區域圖)、柱狀圖(條狀圖)、散點圖(氣泡圖)、K線圖、餅圖(環形圖)、雷達圖(填充雷達圖)、和絃圖、力導向佈局圖、地圖(內置世界地圖、中國及全國34個省市自治區地理數據),同時支持任意維度的堆積和多圖表混合展現。剛好迎合了現在的大數據時代。是一款十分好的免費開源插件。

    首先談一下初次接觸echarts的感受,第一感覺:大氣,優雅,而且能夠清晰的體現數據的走勢。通過網頁審查元素,瞭解到在網頁解析後通過HTML5中標籤Canvas畫板來進行繪製,毋庸置疑,後臺必然通過JS來控制Canvas來繪製圖表,又查看了一下數據傳輸,使用JSON數據格式配合來進行繪製,好了,初步瞭解到此爲止。下面進行詳細解釋。


首先,要使用echarts,先要從echarts官網下載一下最新的源碼包http://echarts.baidu.com/index.html          文章中設計相關名詞可參見http://echarts.baidu.com/doc/doc.html#簡介
 
 下面開始繪製圖表開始:
   首先在網頁中要創建好一個容器,即爲一個具有固定寬高的div即可


接下來要做的就是生成圖表需要使用的文件路徑等

require.config({

                            paths:{

                                'echarts':'./ echarsjs/echarts', //echarts.js的路徑

                            }

                   });

接下來還要做的一步就是動態加載echarts然後在編寫一個回調函數,最後在回調函數中使用echarts設置 參數,最後就能生成圖表了。

 

require([

                            'echarts',

                            'echarts/chart/line'

                            ],

下面說一下需要設置的各項具體有
title (標題)、tooltip(氣泡提示框)、legend(圖例)、toolbox(輔助工具箱)、calculable(固定是否可計算)、xAxis(X軸)、yAxis(Y軸)、series(數據系列)大體的設置項有這些,其實其中好多東西都是爲了生成的圖表更好看而添加的設置項,所以大家可以按照自己的所需來進行添加,這點我就不多說了,畢竟每個人的審美觀不一樣。


咱們在詳細的說一下各設置項需要注意的東西


title:標題可分爲正標題和副標題


tooltip:氣泡提示框說白了就是鼠標放在對應位置動態出來的一個提示框


legend:圖例,每一項代表一個系列的name,默認佈局到達邊緣會自動分行這裏面需要設置的一項是data,這裏面的data會根據該值索引series中同名系列所用的圖表類型和itemStyle,如果索引不到,該item將默認爲沒啓用狀態


toolbox:這裏面要設置的是顯示策略 和具體的顯示信息


calculable:讓圖表一些值能夠可計算


xAxis:X軸顯示的數據


yAxis:Y軸顯示的數據


series:這就是echarts的核心了,是各項數據的詳細,對應索引的是lengend

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>收成表</title>
    <script src="./echarsjs/esl.js"></script>
</head>
<body>  
   <div id="main" style="height:500px;border:1px solid #ccc;padding:10px;"></div>
   <script>
    require.config({
            paths:{
                'echarts':'./Public/admin/js/echarsjs/echarts',
                'echarts/chart/line' : './Public/admin/js/echarsjs/echarts'
            }
        });
    
    require([
            'echarts',
            'echarts/chart/line'
            ],
            function(ex){
                var myChart = ex.init(document.getElementById('main'));
                
                myChart.showLoading({
                        text: '正在努力的讀取數據中...',    //loading話術
                    });
                 var option = {"title":{
                                        //正標題
                                        "text":"收成對比表",
                                        //副標題
                                        "subtext":"A:15年  B:14年"
                                        },
                                //氣泡提示框,常用於展現更詳細的數據
                                "tooltip":{"trigger":"axis"},  
                                //圖例,表述數據和圖形的關聯
                                "legend":{
                                            //數據  每一項代表一個系列的name,默認佈局到達邊緣會自動分行
                                            "data":[
                                                    //使用根據該值索引series中同名系列所用的圖表類型和itemStyle,如果索引不到,該item將默認爲沒啓用狀態。
                                                    "A收入",
                                                    "A支出",
                                                    "B收入",
                                                    "B支出"
                                                  ]
                                          },
                                //輔助工具箱,輔助功能,如添加標線,框選縮放等
                                "toolbox":{
                                            //顯示策略
                                            "show":true, 
                                            //
                                            "feature":{
                                                //輔助線
                                                "mark":["show",true],
                                                //數據視圖
                                                "dataView":{"show":true,"readOnly":false},
                                                //類型切換
                                                "magicType":{
                                                                "show":true,
                                                                //類型
                                                                "type":[
                                                                        //折線圖切換
                                                                        "line",
                                                                        //柱形圖切換
                                                                        "bar"
                                                                        ]
                                                            },
                                                //還原
                                                "restore":{"show":true},
                                                //保存爲圖片
                                                "saveAsImage":{"show":true}
                                                }
                                            },
                                //可計算
                                "calculable":true,
                                //直角座標系中的橫軸,通常並默認爲類目型
                                "xAxis":[{
                                            //類目型'category'
                                            "type":"category",
                                            //座標軸兩端空白策略,數組內數值代表百分比
                                            "boundaryGap":false,
                                            //類目列表
                                            "data":[
                                                        "一月",
                                                        "二月",
                                                        "三月",
                                                        "四月",
                                                        "五月",
                                                        "六月",
                                                        "七月",
                                                        "八月",
                                                        "九月",
                                                        "十月",
                                                        "十一月",
                                                        "十二月",
                                                    ]
                                          }
                                        ],
                                //直角座標系中的縱軸,通常並默認爲數值型
                                "yAxis":[{
                                            //縱軸默認爲數值型'value'
                                            "type":"value",
                                            //座標軸文本標籤
                                            "axisLabel":{
                                                            //間隔名稱格式器
                                                            "formatter":"{value} 元"
                                                        }
                                        }],
                                //數據系列,一個圖表可能包含多個系列,每一個系列可能包含多個數據
                                "series":[{
                                            //系列名稱,如啓用legend,該值將被legend.data索引相關
                                            "name":"A收入",
                                            //圖表類型,必要參數!如爲空或不支持類型,則該系列數據不被顯示。
                                            "type":"line", //折線
                                            //平滑曲線顯示,smooth爲true時lineStyle不支持虛線
                                            "smooth":true,
                                            //系列中的數據內容數組,折線圖以及柱狀圖時數組長度等於所使用類目軸文本標籤數組axis.data的長度,並且他們間是一一對應的
                                            "data":[
                                                        39880,
                                                        30228,
                                                        16923,
                                                        12182,
                                                        10328,
                                                        9826,
                                                        31565,
                                                        51428,
                                                        61827,
                                                        64096,
                                                        60613,
                                                        60884,
                                                    ],
                                            //系列中的數據標註內容
                                            "markPoint":{
                                                            //標註的數據內容數組,最直接的數據項可直接指定標註相關名稱type : 'max', name: '自定義名字'
                                                            "data":[{
                                                                     "type":"max",
                                                                     "name":"峯值"
                                                                    },
                                                                    {
                                                                    "type":"min",
                                                                    "name":"最小值"
                                                                    }
                                                                    ]
                                                        },
                                            //系列中的數據標線內容
                                            "markLine":{
                                                            //type : 'max', name: '自定義名字' 平均值水平線或垂直線
                                                            "data":[{
                                                                        "type":"average",
                                                                        "name":"平均值"
                                                                    }
                                                                    ]
                                                        }
                                            },
                                            
                                            {"name":"A支出",
                                                "type":"line",
                                                "smooth":true,
                                                "data":[16407,12533,6954,5018,4268,4281,12818,20538,24768,25547,24692,25331],
                                                "markPoint":{"data":[{"type":"max","name":"支出峯值"},
                                                                    {"type":"min","name":"支出最小值"}
                                                                    ]
                                                            },
                                                "markLine":{"data":[{"type":"average",
                                                                     "name":"平均值"}
                                                                    ]
                                                            }
                                            },
                                            {"name":"B收入",
                                             "type":"line",
                                             "smooth":true,
                                             "data":[14446,10484,6023,4713,3672,5174,11897,19406,20943,22420,22856,22586],
                                             "markPoint":{"data":[{"type":"max",
                                                                    "name":"收入峯值"},
                                                                  {"type":"min","name":"\u6700\u5c0f\u503c"}
                                                                 ]
                                                        },
                                            "markLine":{"data":[{"type":"average",
                                                                 "name":"平均值"}
                                                                ]
                                                        }
                                            },
                                            {"name":"B支出","type":"line","smooth":true,
                                             "data":[1283,1002,564,443,340,462,1106,1845,2059,2184,2249,2211],
                                             "markPoint":{"data":[{"type":"max",
                                                                    "name":"支出峯值"},
                                                                  {"type":"min","name":"\u6700\u5c0f\u503c"}
                                                                  ]
                                                          },
                                            "markLine":{"data":[{"type":"average",
                                                                 "name":"平均值"}
                                                                ]
                                                        }
                                            }
                                        ]
                                    };
                 myChart.setOption(option); 
                 myChart.hideLoading();
            }
            );
    </script>
</body>
</html>
上面最後兩句也就是咱們最後要做的兩句設置,截止到此,咱們的echarts圖表就是生成完了。
最後呢,我想在說一下,之前網上查了查,完全利用動態數據來生成圖表的貌似很少,我在這裏說一下吧,其實仔細觀察一下每個設置項不難發現,其實很明顯的是json的數據格式,那麼既然是json的數據格式,最先想到的就是利用ajax來進行數據傳遞,畢竟js操作起來json數據還是非常的好的,既然是利用ajax那麼我在後臺就是加工一下數據,說白了,json數據其實可以由php的數組來進行轉換,那麼現在的問題就是轉換成了,我去加工一個數據,然後再轉換成json的格式輸出到前臺,無論是你使用框架中的模板替換還是直接使用ajax來進行加載都是可行的,當然對於ajax個人認爲使用ajax的同步處理較異步處理要好,試想一下當數據量龐大時,異步處理可能造成情況爲前臺就是一個空的圖表,過一會纔會有數據出來,所以個人認爲採用ajax同步處理更爲好


好了,以上就是小弟一些淺顯的認識,歡迎大家來進行交流,謝謝。


發佈了30 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章