1. 程式人生 > >echarts折線圖分段用不同顏色顯示

echarts折線圖分段用不同顏色顯示

之前在用echarts做折線圖的時候,需要一條線段根據某個條件用兩種顏色顯示。在網上找到的解決方案都是series.data用兩組資料模擬,由於我的資料是動態載入的,所以這種方法並不怎麼可取,因此我就去官方文件找看有沒有相關的配置項(先百度再找官方文件實在不是什麼好的習慣,尤其是官方文件還是中文的),果然,在官網上看到一個這樣的例項:點選檢視,發現是visualMap的作用,當然官網上的這個效果也是通過靜態的配置實現的,但是我們可以動態的配置引數呀~

特意記錄一個小例子在這裡,方便以後用到的時候查詢。

要求:當資料連續是300的時候,顯示紅色,其餘顯示綠色。

實現:這個例子完全是根據官網的例子修改而來,這裡只貼出修改的部分。

visualMap部分修改為:
visualMap: {
    show: false,
    dimension: 0,
    pieces: [],  //pieces的值由動態資料決定
    outOfRange: {
        color: 'green'
    }
}

在chart.setOption(option)前新增:
var data = [300, 280, 250, 260, 270, 300, 300, 300,          400, 390, 300, 300, 300, 500, 600, 750, 800, 700, 600, 400];  //模擬動態資料
var j = 0; 
option.series[0
].data = data; //連續為300時,顏色變為紅色 for(let i = 0; i < data.length; i++) { if(data[i] === 300 && data[i + 1] === 300) { option.visualMap.pieces[j] = {gte:i,lte:i+1,color:'red'}; j++; } }

最後的效果如下:

結果

當然,有時候我們還有這樣的需求:將資料在500以上時將其改為紅色顯示,這時需要將程式碼修改為:

visualMap部分修改為:
visualMap: {
    show: false,
    dimension: 1
, pieces: [], //pieces的值由動態資料決定 outOfRange: { color: 'green' } } 在chart.setOption(option)前新增: var data = [300, 280, 250, 260, 270, 300, 300, 300, 400, 390, 300, 300, 300, 500, 600, 750, 800, 700, 600, 400]; //模擬動態資料 var j = 0; var max = Math.max.apply(Math, data); //資料的最大值 option.series[0].data = data; option.visualMap.pieces[0] = {gte: 500, lte: max, color: 'red'};

最後的效果如下:

結果

在這個需求中必須設定最大值(即lte),因為dimension:1表示pieces區間根據series.data中的資料決定,但是因為折線圖是分段型的,並非連續型的,如果不設定最大值,則只會在點上顯示顏色,如下:

錯誤示範

問題解決了N久才拖拖拉拉做了一個記錄,吸取教訓:早做記錄、先查文件!

作為一隻小白,如果本文有什麼錯誤,歡迎各位前輩指正,希望各位不吝賜教!如果還有像我一樣的小白,如果裡面有些引數不太理解,可以去檢視官方文件,地址如下:echarts-visualMap