系統(tǒng)了解ECharts的使用

ECharts是一款開源的統(tǒng)計(jì)圖表框架,ECharts 底層依賴 ZRender,ZRender是一個(gè)輕量級(jí)的二維繪制庫。ECharts的使用也是非常的簡單威蕉,網(wǎng)上有很多教程,這里再簡單的整理一下橄仍。

首先韧涨,echarts.min.js的引入;
可以去官網(wǎng)或github上下載合適的版本侮繁,也可以優(yōu)雅地使用npm install echarts --save命令下載虑粥,這里從github下載最新的版本4.7.0;

第二宪哩,在進(jìn)行統(tǒng)計(jì)圖的使用之前娩贷,還有一點(diǎn)非常重要,那就是主題的設(shè)置锁孟。
echarts默認(rèn)有三個(gè)主題彬祖,第一個(gè)是默認(rèn)的主題茁瘦,第二個(gè)是dark,黑色的背景储笑;第三個(gè)是light甜熔,白色的背景;統(tǒng)計(jì)圖表里的顏色突倍,有默認(rèn)值腔稀。

很多同事,包括我自己羽历,一上來就畫統(tǒng)計(jì)圖烧颖,還不知道有主題設(shè)置這一說,后面在調(diào)整統(tǒng)計(jì)圖里的色調(diào)時(shí)窄陡,費(fèi)了老大的勁了,而且越調(diào)整越不協(xié)調(diào)拆火,搞得花里胡哨的跳夭。通過設(shè)置主題可以避免這個(gè)繁瑣的環(huán)節(jié)。

先看看效果们镜,有對(duì)比币叹,才有差異;主題設(shè)置是很重要的一環(huán)模狭,選對(duì)了主題颈抚,后面就不需要手動(dòng)設(shè)置color調(diào)整顏色了,調(diào)色絕對(duì)是個(gè)費(fèi)時(shí)費(fèi)力不討好的活嚼鹉,畢竟每個(gè)人的審美觀不同贩汉。選對(duì)了主題,就不用拘于調(diào)色這種小節(jié)了锚赤,多省事匹舞。

就用餅圖,做三種主題的的區(qū)分吧线脚;


默認(rèn)主題
dark主題
light主題
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>myProject</title>
    <!-- 引入 lib/echarts.custom.min.js -->
    <script src="lib/echarts.min.js"></script>
</head>
<body>
    <div id="main" style="width: 600px;height:400px;"></div>
    <script>
        // 繪制圖表赐稽。
        var pieMain = echarts.init(document.getElementById('main'),'light');//使用默認(rèn)樣式、dark浑侥、light姊舵;
        
        pieMain.setOption({
            series: {
                type: 'pie',
                data: [
                    {name: 'A', value: 1212},
                    {name: 'B', value: 2323},
                    {name: 'C', value: 1919}
                ]
            }
        });
    </script>
</body>
</html>

這三種主題,如果都不滿意寓落,那么可以通過 ECharts主題定制 自定義主題括丁,這些主題,有主色調(diào)零如,媚而不妖躏将,太耐看了锄弱。

      //設(shè)置主題
        $.getJSON('lib/wonderland.json', function (themeJSON) {
            echarts.registerTheme('wonderland',themeJSON)
            var chart = echarts.init(document.getElementById('main'), 'wonderland');
            chart.setOption({
                series: {
                    type: 'pie',
                    data: [
                        {name: 'A', value: 1212},
                        {name: 'B', value: 2323},
                        {name: 'C', value: 1919},
                        {name: 'D', value: 1719},
                        {name: 'E', value: 1519}
                    ]
                }
            });
        });
自定義主題效果圖-夢(mèng)幻仙境

echarts的js文件有三個(gè),需要注意一下祸憋,echarts.js體積最大会宪,包含所有的圖表和組件;echarts.common.js蚯窥,體積適中掸鹅,包含常見的圖表和組件;echarts.simple.js拦赠,體積較小巍沙,僅包含最常用的圖表和組件;

做數(shù)據(jù)統(tǒng)計(jì)的目的荷鼠,是讓數(shù)據(jù)說話句携,不用看繁多的數(shù)據(jù)記錄,通過一個(gè)圖表簡單明了地把數(shù)據(jù)的趨勢允乐、歷史曲線展現(xiàn)出來矮嫉。既然如此,每個(gè)統(tǒng)計(jì)圖表都有其特別的用途牍疏,每個(gè)圖的用途不同蠢笋,關(guān)注點(diǎn)自然也不同。

在ECharts中有多少統(tǒng)計(jì)圖形呢鳞陨,請(qǐng)看下圖昨寞,仔細(xì)數(shù)一數(shù),有二十多種厦滤,這還是單一的援岩,不算復(fù)合的。


圖表chart

除了圖表馁害,還有坐標(biāo)系窄俏;


坐標(biāo)系

組件也是很重要的一環(huán),錦上添花的小物件碘菜;


組件

折線圖凹蜈,用線條的升降表示事物的發(fā)展變化趨勢;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>myProject</title>
    <script src="lib/jquery.min.js"></script>   
    <script src="lib/echarts.min.js"></script>
    <!--以引用的方式調(diào)用theme,必須放置echarts文件后-->
    <script src="lib/wonderland.js"></script>
</head>
<body>
    <div id="main" style="width: 600px;height:400px;"></div>
    <script>
        var chart = echarts.init(document.getElementById('main'), 'wonderland');            
        var option = {
            legend: {
                left: 'center',
                top: 'top'
            },
            dataset: {
                // 提供一份數(shù)據(jù)忍啸。
                source: [
                    ['product', '橘子', '桃子', '蘋果', '西瓜'],
                    ['2012', 43.3, 85.8, 93.7, 65.8],
                    ['2013', 83.1, 73.4, 55.1, 83.4,],
                    ['2014', 86.4, 65.2, 82.5, 75.2,],
                    ['2015', 72.4, 53.9, 39.1, 63.9,]
                ]
            },
            xAxis: {
                type: 'category'
            },
            yAxis: {
                type: 'value',
            },
            series: [
                {type: 'line'},{type: 'line'},{type: 'line'},{type: 'line'}
            ]
        };      
        chart.setOption(option);
    </script>
</body>
</html>
折線效果圖

餅圖仰坦,以一個(gè)圓的面積表示總體,用扇形的面積表示部分在總體中所占的百分比计雌;展示部分與總體的關(guān)系悄晃,部分相對(duì)于總數(shù)的大小。上面已有例子,這里忽略妈橄。

柱形圖庶近,條圖,也是很常用的統(tǒng)計(jì)圖眷蚓,現(xiàn)在柱形圖的展示方式也多了花樣鼻种;

        var chart = echarts.init(document.getElementById('main'), 'wonderland');
        var option = {
            legend: {},
            tooltip: {},
            dataset: {
                source: [
                    ['product', '2012', '2013', '2014', '2015'],
                    ['Matcha Latte', 41.1, 30.4, 65.1, 53.3],
                    ['Milk Tea', 86.5, 92.1, 85.7, 83.1],
                    ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4]
                ]
            },
            xAxis: [
                {type: 'category', gridIndex: 0},
                {type: 'category', gridIndex: 1}
            ],
            yAxis: [
                {gridIndex: 0},
                {gridIndex: 1}
            ],
            grid: [
                {bottom: '55%'},
                {top: '55%'}
            ],
            series: [
                // 這幾個(gè)系列會(huì)在第一個(gè)直角坐標(biāo)系中,每個(gè)系列對(duì)應(yīng)到 dataset 的每一行沙热。
                {type: 'bar', seriesLayoutBy: 'row'},
                {type: 'bar', seriesLayoutBy: 'row'},
                {type: 'bar', seriesLayoutBy: 'row'},
                // 這幾個(gè)系列會(huì)在第二個(gè)直角坐標(biāo)系中叉钥,每個(gè)系列對(duì)應(yīng)到 dataset 的每一列。
                {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
                {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
                {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
                {type: 'bar', xAxisIndex: 1, yAxisIndex: 1}
            ]
        }
        chart.setOption(option);
多坐標(biāo)多系列

餅圖和折線圖的完美結(jié)合篙贸;

var chart = echarts.init(document.getElementById('main'), 'wonderland');
        var option = {
                legend: {},
                tooltip: {
                    trigger: 'axis',
                    showContent: false
                },
                dataset: {
                    source: [
                        ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
                        ['Matcha Latte', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
                        ['Milk Tea', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
                        ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
                        ['Walnut Brownie', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
                    ]
                },
                xAxis: {type: 'category'},
                yAxis: {gridIndex: 0},
                grid: {top: '55%'},
                series: [
                    {type: 'line', smooth: true, seriesLayoutBy: 'row'},
                    {type: 'line', smooth: true, seriesLayoutBy: 'row'},
                    {type: 'line', smooth: true, seriesLayoutBy: 'row'},
                    {type: 'line', smooth: true, seriesLayoutBy: 'row'},
                    {
                        type: 'pie',
                        id: 'pie',
                        radius: '30%',
                        center: ['50%', '25%'],
                        label: {
                            formatter: '投队: {@2012} (iwdld7r%)'
                        },
                        encode: {
                            itemName: 'product',
                            value: '2012',
                            tooltip: '2012'
                        }
                    }
                ]
            };

            chart.on('updateAxisPointer', function (event) {
                var xAxisInfo = event.axesInfo[0];
                if (xAxisInfo) {
                    var dimension = xAxisInfo.value + 1;
                    chart.setOption({
                        series: {
                            id: 'pie',
                            label: {
                                formatter: ': {@[' + dimension + ']} (2koryx3%)'
                            },
                            encode: {
                                value: dimension,
                                tooltip: dimension
                            }
                        }
                    });
                }
            });
        chart.setOption(option);
餅圖與折線的完美組合

基礎(chǔ)概念一覽
echarts 實(shí)例爵川,一個(gè)網(wǎng)頁中可以有多個(gè)實(shí)例敷鸦;
系列(series),一個(gè)實(shí)例里有多個(gè)系列寝贡,每個(gè)系列的type可以是line(折線圖)轧膘、bar(柱狀圖)、pie(餅圖)兔甘、scatter(散點(diǎn)圖)、graph(關(guān)系圖)鳞滨、tree(樹圖)等其中的一種洞焙;
組件(component):xAxis(直角坐標(biāo)系 X 軸)、yAxis(直角坐標(biāo)系 Y 軸)拯啦、grid(直角坐標(biāo)系底板)澡匪、angleAxis(極坐標(biāo)系角度軸)、radiusAxis(極坐標(biāo)系半徑軸)褒链、polar(極坐標(biāo)系底板)唁情、geo(地理坐標(biāo)系)、dataZoom(數(shù)據(jù)區(qū)縮放組件)甫匹、visualMap(視覺映射組件)甸鸟、tooltip(提示框組件)、toolbox(工具欄組件)兵迅、series(系列)這些都屬于組件抢韭;
option 描述圖表:有什么數(shù)據(jù)、要畫什么圖表恍箭、圖表長什么樣子刻恭、含有什么組件、組件能操作什么事情等等扯夭。簡而言之鳍贾,option 表述了:數(shù)據(jù)鞍匾、數(shù)據(jù)如何映射成圖形、交互行為骑科。
組件之間的定位需要靠坐標(biāo)系橡淑,坐標(biāo)系又有直角坐標(biāo)系(grid)、極坐標(biāo)系(polar)纵散、地理坐標(biāo)系(GEO)梳码、單軸坐標(biāo)系(singleAxis)、日歷坐標(biāo)系(calendar)伍掀;

一句話的概括:
一個(gè)頁面上可以有多個(gè)echarts 實(shí)例掰茶,一個(gè)echarts 實(shí)例中包含多個(gè)系列(series),系列需要運(yùn)行在坐標(biāo)系上蜜笤,還有零零碎碎的很多組件(component)濒蒋,系列、組件都被裝在option容器里面把兔,通過最后的設(shè)置option沪伙,就渲染成了圖表。

更多精彩县好,請(qǐng)參考以下文檔
github下載地址:https://github.com/apache/incubator-echarts/releases
EChats下載地址:https://echarts.apache.org/zh/download.html
EChats文檔:https://echarts.apache.org/zh/tutorial.html
主題的設(shè)定:https://echarts.baidu.com/theme-builder/
官網(wǎng): https://echarts.baidu.com/index.html
常見問題: https://www.echartsjs.com/zh/faq.html
菜鳥教程: https://www.runoob.com/echarts/echarts-tutorial.html
統(tǒng)計(jì)效果實(shí)現(xiàn)的參考: http://www.zi-han.net/theme/hplus/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末围橡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缕贡,更是在濱河造成了極大的恐慌翁授,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晾咪,死亡現(xiàn)場離奇詭異收擦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谍倦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門塞赂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昼蛀,你說我怎么就攤上這事宴猾。” “怎么了叼旋?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鳍置,是天一觀的道長。 經(jīng)常有香客問我送淆,道長税产,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮辟拷,結(jié)果婚禮上撞羽,老公的妹妹穿的比我還像新娘。我一直安慰自己衫冻,他們只是感情好诀紊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隅俘,像睡著了一般邻奠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上为居,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天碌宴,我揣著相機(jī)與錄音,去河邊找鬼蒙畴。 笑死贰镣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膳凝。 我是一名探鬼主播碑隆,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼蹬音!你這毒婦竟也來了上煤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤著淆,失蹤者是張志新(化名)和其女友劉穎楼入,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牧抽,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年遥赚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扬舒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凫佛,死狀恐怖讲坎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愧薛,我是刑警寧澤晨炕,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站毫炉,受9級(jí)特大地震影響瓮栗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一费奸、第九天 我趴在偏房一處隱蔽的房頂上張望弥激。 院中可真熱鬧,春花似錦愿阐、人聲如沸微服。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽以蕴。三九已至,卻和暖如春辛孵,著一層夾襖步出監(jiān)牢的瞬間丛肮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留适滓,地道東北人罢坝。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像伴鳖,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徙硅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356