echarts柱狀堆疊圖實現示例(圖例和x軸都是動態的)

問題描述: 

 echarts柱狀堆疊圖,是很常用的圖表,官網的例子很簡單 。圖例(legend),x軸(xAxis)都是寫死的。但是一般實際應用中都是 動態的。下面就舉個例子,實現圖例和x軸都是動態的 柱狀堆疊圖。

echarts 官網柱狀 堆疊圖 示例

 實現思路及步驟:

思路:通過官網的例子,我們能知道

  1.  xAxis 是一個數組 
  2.  series 是一個數組對象  其中name需要 對應著的是圖例,有幾個圖例 series裡就應該有幾個項。需要把你的數據處理成 和例子數據結構一樣的。
  3. stack 這個屬性 很重要 Documentation – Apache ECharts stack API,官網的例子裡 是三個柱狀圖並列。stack 相同的就會 堆疊在一起(stack 有幾個他就會有幾排並列,官網例子裡有Ad,Search Engine他就有兩個堆疊,去掉沒有 stack屬性的就能看到瞭)。

知道瞭這些就 很清晰瞭。

  • 第一步就是 遍歷數據 ,找出 x軸的數據(切記要去重)
  • 遍歷數據 生成 series

其實就是對數據的處理。 

示例:

 把這樣的數據 做成堆疊圖

let data = [
        { 日期: '2022-08-16', 要素名稱: '空調液加註-正壓壓力', 報警總次數: 15 },
        { 日期: '2022-08-16', 要素名稱: '空調液加註-正壓檢漏值', 報警總次數: 3 },
        { 日期: '2022-08-16', 要素名稱: '剎車液加註-正壓壓力', 報警總次數: 5 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-二次抽真空值', 報警總次數: 6 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-二次抽真空時間', 報警總次數: 6 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-加註量', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '空調液加註-正壓壓力', 報警總次數: 45 }, ,
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-真空檢漏值', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-含水量', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-真空檢漏時間', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '空調液加註-二次抽真空值', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-正壓壓力', 報警總次數: 15 },
        { 日期: '2022-08-18', 要素名稱: '剎車液加註-加註量', 報警總次數: 6 },
        { 日期: '2022-08-18', 要素名稱: '剎車液加註-正壓壓力', 報警總次數: 23 },
        { 日期: '2022-08-18', 要素名稱: '剎車液加註-正壓檢漏值', 報警總次數: 3 },
        { 日期: '2022-08-18', 要素名稱: '空調液加註-加註量', 報警總次數: 3 },
        { 日期: '2022-08-18', 要素名稱: '剎車液加註-精真空值', 報警總次數: 6 },
        { 日期: '2022-08-18', 要素名稱: '空調液加註-正壓壓力', 報警總次數: 69 },
        { 日期: '2022-08-18', 要素名稱: '空調液加註-正壓檢漏時間', 報警總次數: 3 },
        { 日期: '2022-08-19', 要素名稱: '剎車液加註-含水量', 報警總次數: 6 },
        { 日期: '2022-08-19', 要素名稱: '剎車液加註-正壓壓力', 報警總次數: 31 },
        { 日期: '2022-08-19', 要素名稱: '剎車液加註-精真空值', 報警總次數: 12 },
        { 日期: '2022-08-19', 要素名稱: '空調液加註-正壓壓力', 報警總次數: 99 },
        { 日期: '2022-08-19', 要素名稱: '剎車液加註-真空檢漏值', 報警總次數: 6 },
        { 日期: '2022-08-19', 要素名稱: '空調液加註-正壓檢漏值', 報警總次數: 6 },
        { 日期: '2022-08-19', 要素名稱: '空調液加註-正壓檢漏時間', 報警總次數: 6 },
        { 日期: '2022-08-19', 要素名稱: '空調液加註-真空檢漏值', 報警總次數: 12 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-加註量', 報警總次數: 12 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-含水量', 報警總次數: 12 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-正壓檢漏值', 報警總次數: 9 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-正壓檢漏時間', 報警總次數: 6 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-真空檢漏時間', 報警總次數: 9 },
        { 日期: '2022-08-20', 要素名稱: '空調液加註-加註量', 報警總次數: 9 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-真空檢漏值', 報警總次數: 9 },
        { 日期: '2022-08-20', 要素名稱: '空調液加註-正壓檢漏值', 報警總次數: 12 },
        { 日期: '2022-08-20', 要素名稱: '空調液加註-真空檢漏值', 報警總次數: 15 },
    ];

代碼:

把該代碼復制到 官網例子裡 就能看到效果 。

let data = [
        { 日期: '2022-08-16', 要素名稱: '空調液加註-正壓壓力', 報警總次數: 15 },
        { 日期: '2022-08-16', 要素名稱: '空調液加註-正壓檢漏值', 報警總次數: 3 },
        { 日期: '2022-08-16', 要素名稱: '剎車液加註-正壓壓力', 報警總次數: 5 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-二次抽真空值', 報警總次數: 6 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-二次抽真空時間', 報警總次數: 6 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-加註量', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '空調液加註-正壓壓力', 報警總次數: 45 }, ,
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-真空檢漏值', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-含水量', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-真空檢漏時間', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '空調液加註-二次抽真空值', 報警總次數: 3 },
        { 日期: '2022-08-17', 要素名稱: '剎車液加註-正壓壓力', 報警總次數: 15 },
        { 日期: '2022-08-18', 要素名稱: '剎車液加註-加註量', 報警總次數: 6 },
        { 日期: '2022-08-18', 要素名稱: '剎車液加註-正壓壓力', 報警總次數: 23 },
        { 日期: '2022-08-18', 要素名稱: '剎車液加註-正壓檢漏值', 報警總次數: 3 },
        { 日期: '2022-08-18', 要素名稱: '空調液加註-加註量', 報警總次數: 3 },
        { 日期: '2022-08-18', 要素名稱: '剎車液加註-精真空值', 報警總次數: 6 },
        { 日期: '2022-08-18', 要素名稱: '空調液加註-正壓壓力', 報警總次數: 69 },
        { 日期: '2022-08-18', 要素名稱: '空調液加註-正壓檢漏時間', 報警總次數: 3 },
        { 日期: '2022-08-19', 要素名稱: '剎車液加註-含水量', 報警總次數: 6 },
        { 日期: '2022-08-19', 要素名稱: '剎車液加註-正壓壓力', 報警總次數: 31 },
        { 日期: '2022-08-19', 要素名稱: '剎車液加註-精真空值', 報警總次數: 12 },
        { 日期: '2022-08-19', 要素名稱: '空調液加註-正壓壓力', 報警總次數: 99 },
        { 日期: '2022-08-19', 要素名稱: '剎車液加註-真空檢漏值', 報警總次數: 6 },
        { 日期: '2022-08-19', 要素名稱: '空調液加註-正壓檢漏值', 報警總次數: 6 },
        { 日期: '2022-08-19', 要素名稱: '空調液加註-正壓檢漏時間', 報警總次數: 6 },
        { 日期: '2022-08-19', 要素名稱: '空調液加註-真空檢漏值', 報警總次數: 12 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-加註量', 報警總次數: 12 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-含水量', 報警總次數: 12 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-正壓檢漏值', 報警總次數: 9 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-正壓檢漏時間', 報警總次數: 6 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-真空檢漏時間', 報警總次數: 9 },
        { 日期: '2022-08-20', 要素名稱: '空調液加註-加註量', 報警總次數: 9 },
        { 日期: '2022-08-20', 要素名稱: '剎車液加註-真空檢漏值', 報警總次數: 9 },
        { 日期: '2022-08-20', 要素名稱: '空調液加註-正壓檢漏值', 報警總次數: 12 },
        { 日期: '2022-08-20', 要素名稱: '空調液加註-真空檢漏值', 報警總次數: 15 },
    ];
    console.log(data)
    let date = []; //x軸日期
    let lenged = []; //series的個數
    let s = [];
    data.map((item) => {
        date.push(item["日期"]);
        lenged.push(item["要素名稱"]);
 
    });
 
    date = [...new Set(date)]; //去重
    lenged = [...new Set(lenged)];
    console.log(date, lenged)
    let series = [];
    lenged.map((item) => { //生成  series
        let obj = {
            name: item,
            type: "bar",
            stack: "As",
            emphasis: {
                focus: 'series'
            },
            data: []
        };
        series.push(obj);
    });
    console.log(series)
 
    data.map((item) => {//對series 的data進行處理
 
        series.map((item1) => {
 
            if (item1.name == item["要素名稱"] && date.indexOf(item["日期"]) > -1) {
                item1.data[date.indexOf(item["日期"])] = item["報警總次數"]
            };
        })
    })
   
option = {
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'shadow'
    }
  },
  legend: {},
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  xAxis: [
    {
      type: 'category',
      data: date
    }
  ],
  yAxis: [
    {
      type: 'value'
    }
  ],
  series: series
};

總結

到此這篇關於echarts柱狀堆疊圖的文章就介紹到這瞭,更多相關echarts柱狀堆疊圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: