[ js] - 使用echarts繪制圖表

隨便聊聊~~
最近接了新的項目需求,是有關于周報的事情,所以涉及到了各種柱狀圖,餅圖,散點圖以及地圖等等。即便之前也做過圖表,但是好多的配置項總是算查文檔才能搞明白,所以這次趁著有機會,就在這里小小的總結一下遇到的問題吧。

1、基本配置項

餅圖:
var optionPhase = {
      // 標題
      title: {
          text: '上周(' + _this.bannerData.startTimeMd + '-'+ 
                    _this.bannerData.endTimeMd + ')'+ 
                    _this.industyName + '領域獲投輪次分布',
       // 這里標題中加入了變量 展現形式: 上周(7.29-8.4)金融領域獲投輪次分布
         x:'center'  // 標題居中顯示
      },
    // 提示框
      tooltip : {
           trigger: 'item',
           formatter: "{a} <br/>{b} : {c} (mnxgye4%)"  // 提示框內容
     },
     // 工具內容
    toolbox: { 
         show: true,
         feature: {
             saveAsImage: {}   // 保存圖片
         }
    },
     series : [
         {
                name: '輪次',
                type: 'pie', //  餅狀圖
                radius : '55%',
                center: ['50%', '60%'],
                data: dataNonull,
                itemStyle: {
                      // 移入展示樣式
                      emphasis: {
                           shadowBlur: 10,
                           shadowOffsetX: 0,
                           shadowColor: 'rgba(0, 0, 0, 0.5)'
                     },
                     // 正常展示樣式
                      normal:{ 
                          label:{ 
                             show: true, 
                              formatter: '{b} mjjbh6b%',
                              textStyle: {
                                   color: '#000'
                              }
                     }, 
                   // 可以自定義展示顏色
                    color: function (params) {
                             var colorList = [
                                '#0076D0', '#43A8E0', '#22BA6F', '#41CC5D', '#FFA300',
                                '#F2CE00', '#FF6000', '#FF7020', '#A6A6A6', '#D9D9D9',
                                 '#c1beff', '#c2e7ff', '#fabdff' 
                             ];
                             return colorList[params.dataIndex]
                    },
                    labelLine :{show:true} 
                }
            }
        ]
};
柱狀圖
optionIndusty = {
     title: {
         text: '上周(7.1-7.7)國內各領域獲投數量',
         x:'center'
     },
     color: ['#0076D0'],
     tooltip : {
         trigger: 'axis',
         axisPointer : {   // 坐標軸指示器,坐標軸觸發有效
             type : 'shadow'  // 默認為直線,可選為:'line' | 'shadow'
         }
     },
     xAxis : [
         {
             type : 'category',
             data : ['企業服務',  '電商', '消費生活', '文娛傳媒', '教育', '醫療健康', '非MT', '汽車金融', '無人機', '體育'],
             axisTick: { //坐標軸刻度相關設置
                 alignWithLabel: true
             },
             axisLabel:{   //坐標軸刻度標簽的相關設置
                     interval:0,  
                     formatter:function(value)  
                     {  
                         return value.split("").join("\n");  
                     },
                     // rotate:-90,//傾斜度 -90 至 90 默認為0  
                     margin:10, 
                    textStyle:{  
                         color:"#000"  
                     }  
                 },
         }
     ],
     yAxis : [
         {
             type : 'value',
             splitLine: { // y軸分割線
                 show: false
             }
         }
     ],
     series : [
         {
             name:'融資數量',
             type:'bar',
             barWidth: 20,
             data:[10, 33, 4, 8, 15, 25, 52, 39, 30, 20],
             itemStyle: {
                 normal:{  // 柱狀圖上的數值顯示
                     label:{
                         show: true,
                         position: 'top',
                         textStyle: {
                             color: '#000'
                         }
                 }
             }
         }
     ]
 };
左右雙向柱狀圖(大多其實都在處理數據。。。)
var nameArr = ['百萬級', '千萬級', '億元級'];
var nameArrTemp = [];
var valueArrMTemp = [];
var valueArrRTemp = [];
var valueArrM = [];
var valueArrR = [];
var wplValue = ''; 
axios.get(接口地址, {params: sendData})
                .then(function (response) {
                    var dataNonull = response.data.data; 
                    for(var i = 0; i < dataNonull.length;i++) {
                        if (dataNonull[i].name.indexOf('美元') > -1) {
                            valueArrM.push(dataNonull[i].value);
                        } else if (dataNonull[i].name.indexOf('人民幣') > -1) {
                            valueArrR.push(dataNonull[i].value);
                        } else if(dataNonull[i].name.indexOf('未披露') > -1) {
                            wplValue = dataNonull[i].value;
                        }
                    }
                    valueArrM.reverse();
                    valueArrR.reverse();
                    for(var j = 0; j < nameArr.length; j++) {
                        if(valueArrM[j] == 0 && valueArrR[j] == 0) {
                        } else {
                            nameArrTemp.push(nameArr[j]);
                            valueArrMTemp.push(-valueArrM[j]);
                            valueArrRTemp.push(valueArrR[j]);
                        }
                    }
                    var amountChart = echarts.init(document.getElementById('amountChart'));
                    var optionAmount = {
                        title: {
                            text: '上周(' + _this.bannerData.startTimeMd + '-'+ _this.bannerData.endTimeMd + ')' + _this.industyName + '領域獲投金額分布',
                            x:'center',
                            subtext: '未披露的融資數量:' + wplValue,
                            subtextStyle: {
                                fontSize: '15',
                                color: '#555'
                            }
                        },
                        legend: {
                            data:[ '美元', '人民幣'],
                            bottom: 0
                        },
                        toolbox: {  // 工具內容
                            show: true,
                            feature: {
                                saveAsImage: {}   // 保存圖片
  }
                        },
                        tooltip : {
                            trigger: 'axis',
                            axisPointer : {            // 坐標軸指示器,坐標軸觸發有效
                                type : 'shadow'        // 默認為直線,可選為:'line' | 'shadow'
                            },
                            formatter: function (params, ticket, callback) {
                                var res = '融資數量' ;
                                // var res = params[0].name ;
                                for (var i = 0, l = params.length; i < l; i++) {
                                    res += '<br/>' + params[i].name + params[i].seriesName + ' : ' + Math.abs(params[i].value) ;     
                                }
                                setTimeout(function () {
                                    // 僅為了模擬異步回調
                                    callback(ticket, res);
                                }, 500)
                                return 'loading...';
                            }
                        },
                        grid: {
                            left: '3%',
                            right: '4%',
                            bottom: '10%', // 圖表距離
                            containLabel: true
                        },
                        xAxis: {
                            show: true,
                            type: 'value',
                            axisTick: { //坐標軸刻度相關設置
                                show: false
                            },
                            axisLabel : { 
                                formatter: function (value){return Math.abs(value);} //坐標軸顯示的數值都取絕對值
                            } 
                        },
                        yAxis: {
                            type: 'category',
                            axisTick: { //坐標軸刻度相關設置
                                show: false
                            },
                            data: nameArrTemp                        
                        },
                        series: [
                            {
                                name: '美元',
                                type: 'bar',
                                barWidth: 15,
                                stack: '總量',
                                itemStyle: {
                                    normal:{ 
                                        label:{ 
                                            show: true,
                                            position: 'left',
                                            textStyle: {
                                                color: '#000'
                                            },
                                            formatter:function(v){return Math.abs(v.data)}
                                        }
                                    }
                                },
                                data: valueArrMTemp                           
                            },
                            {
                                name: '人民幣',
                                type: 'bar',
                                barWidth: 15,
                                stack: '總量', // 數據堆疊,同類目軸上系列配置相同的stack值可以堆疊放置
                                itemStyle: {
                                    normal:{ 
                                        label:{ 
                                            show: true,
                                            position: 'right',
                                            textStyle: {
                                                color: '#000'
                                            }
                                        },
                                    }
                                },
                                data: valueArrRTemp    
                             }
                        ]
                    };
                    window.onresize = amountChart.resize;
                    amountChart.setOption(optionAmount);
                })                       

圖表如下:

image.png

2、常用/遇到過的問題

1、提示框組件
tooltip : {
     trigger: 'axis', // 'item'數據項圖形觸發,散點圖,餅圖等無類目軸的圖表中使用。'axis'坐標軸觸發,柱狀圖,折線圖等會使用類目軸的圖表中使用。
     axisPointer : {            // 坐標軸指示器,坐標軸觸發有效
          type : 'shadow'        // 默認為直線,可選為:'line' | 'shadow'
     }
},

[圖片上傳失敗...(image-43c46d-1565666494102)]

trigger: 'item',
formatter: "{a} <br/>{b} : {c} (c4ama0w%)"

[圖片上傳失敗...(image-6b6e9d-1565666494102)]

2、圖例組件
legend: {
    data: ['上上周',  '上周'],
   orient: 'vertical',  // 垂直顯示 ,默認水平
    bottom: 0  // 顯示再底部  left:'left' 顯示在左上部
}
3、工具
toolbox: {  // 工具內容
  show: true,
  orient: 'vertical', // 垂直
  left: 'right',  // 右部
  top: 'center'  // 上下居中
  feature: {
     dataView: { readOnly: false},
     restore: {},
     saveAsImage: {}   // 保存圖片
  }
}

[圖片上傳失敗...(image-817ae-1565666494102)]

4、坐標軸橫坐標標簽垂直顯示
                  xAxis : [
                            {
                                type : 'category',
                                data :  nameArr,
                                axisTick: { //坐標軸刻度相關設置
                                    show: false
                                }, 
                                axisLabel:{   //坐標軸刻度標簽的相關設置
                                    interval:0,  
                                    formatter:function(value)  
                                    {  
                                       return value.split("").join("\n");  
                                    },
                                    // rotate:-90,//傾斜度 -90 至 90 默認為0  
                                    margin:10,  
                                    textStyle:{  
                                        color:"#000"  
                                    }  
                                }, 
                            }
                        ],

[圖片上傳失敗...(image-68fa90-1565666494102)]

5、圖表邊距
                       grid: {
                           left: '3%',
                           right: '4%',
                           bottom: '10%', // 圖表距離
                           containLabel: true
                       },
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,151評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,659評論 25 708
  • 我去找你 大概要翻過一座山 但是如果你喜歡我 山上就住著愚公 我去找你 大概要淌過一片海 但是如果你喜歡我 海上就...
    燒溢閱讀 171評論 2 2
  • "I don't know why I ended up with leukemia, and I don't k...
    冰醉楓閱讀 296評論 0 3
  • 從小我們每個人不同階段就會有不同的夢想,幻想著自己長大以后要做什么。小時候接觸最多的就是老師,那時候每每被問及長大...
    呼呼姑涼閱讀 181評論 0 1