ajax+json實現echarts多個統計圖顯示

  • 2019 年 10 月 5 日
  • 筆記

前端時常會遇到這樣的問題,有一個單獨的模組用作統計圖,將多個折線或者柱狀圖,混合使用,下面的例子是用ajax+json模擬了調用介面實現echarts多個統計圖顯示。 樣式布局暫時就不放在上面了,以下是從項目裡面複製過來的一個小的demo,程式碼僅供參考。

<!DOCTYPE html>  <html>      <head>          <meta charset="utf-8">          <title></title>          <link rel="stylesheet" href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css">          <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>          <script src="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>          <!-- 引入 echarts.js -->          <script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts.min.js" type="text/javascript"></script>      </head>      <body>          <div class="page-container">              <!-- 統計圖模組   -->              <div class="row">                  <div class="col-md-12  col-sm-12  col-xs-12">                      <div class="col-md-2  col-sm-2  col-xs-2" style="width: 21%">                          <div class="charts2">                              <div id="main1" style="width: 300px;height: 180px;"></div>                          </div>                      </div>                        <div class="col-md-5  col-sm-5  col-xs-5" style="width: 39%;">                          <div class="charts4">                              <!-- 為ECharts準備一個具備大小(寬高)的Dom -->                              <div id="main" style="width: 500px; height: 200px;"></div>                          </div>                          <div class="charts5">                              <div id="main2" style="width: 500px; height: 200px;"></div>                          </div>                      </div>                  </div>                    <div class="row">                      <div class="col-md-12  col-sm-12  col-xs-12 charts6">                          <div id="main3" style="width: 500px;height: 200px;"></div>                      </div>                  </div>                    <div class="col-md-12  col-sm-12  col-xs-12  bottom">                      <div class="col-md-7  col-sm-7  col-xs-7  charts7">                          <div id="main4" style=" height: 200px;"></div>                      </div>                      <div class="col-md-5  col-sm-5  col-xs-5  charts8">                          <div id="main5" style="width: 600px; height: 200px;"></div>                      </div>                  </div>              </div>            </div>            <script type="text/javascript">              $.ajax({                  url: "test.json",                  data: {},                  type: 'GET',                  success: function(data) {                      alert(JSON.stringify(data))                      aFun(data.echatX, data.echatY);                      bFun(data);                      cFun(data.echatX, data.echatY);                      dFun(data.echatX, data.echatY);                      eFun(data.echatX, data.echatY);                      fFun(data.echatX, data.echatY);                  },              });                //              var aChart = echarts.init(document.getElementById('main'));              function aFun(x_data, y_data) {                  // 指定圖表的配置項和數據                  aChart.setOption({                      title: {},                      tooltip: {},                      legend: {                          data: ['銷量']                      },                      xAxis: {                           splitLine: {     show: false   },                          /* 改變x軸顏色 */                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                          data: x_data,                      },                      yAxis: {                           splitLine: {     show: false   },                          type: 'value',                          scale: true,                          name: '心率值',                          max: 150,                          min: 0,                          splitNumber: 5,                          // 改變y軸顏色                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                      },                      series: [{                          name: '巡檢達標率',                          type: 'bar',                          // 設置柱狀圖大小                          barWidth: 20,                          // 設置柱狀圖漸變顏色                          itemStyle: {                              normal: {                                  color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{                                      offset: 0,                                      color: "#1268f3" // 0% 處的顏色                                  }, {                                      offset: 0.6,                                      color: "#08a4fa" // 60% 處的顏色                                  }, {                                      offset: 1,                                      color: "#01ccfe" // 100% 處的顏色                                  }], false)                              }                          },                          data: y_data,                      }]                  });              }              //              var bChart = echarts.init(document.getElementById('main1'));              function bFun(param) {                  // 指定圖表的配置項和數據                  bChart.setOption({                      tooltip: {                          trigger: 'item',                          formatter: "{a} <br/>{b}: {c} ({d}%)"                      },                      series: [{                          name: '統計人數',                          type: 'pie',                          radius: ['50%', '70%'],                          avoidLabelOverlap: false,                          label: {                              normal: {                                  rich: {                                      a: {                                          color: '#999',                                          lineHeight: 22,                                          align: 'center'                                      },                                      b: {                                          fontSize: 16,                                          lineHeight: 33                                      },                                  }                              }                          },                          data: [                              /* { value: 12, name: '管理', itemStyle: { color: '#5f4b9c' } },                                { value: 3, name: '鍊鋼工', itemStyle: { color: '#2e73ba' } },                                { value: 4, name: '操作工', itemStyle: { color: '#7aa83a' } },*/                                {                                  value: param.peopleOutline,                                  name: '在線',                                  itemStyle: {                                      color: '#005eff'                                  }                              },                              { value: param.peopleOnline, name: '離線', itemStyle: { color: '#ff9194' } },                          ]                      }]                  });              }                // 基於準備好的dom,初始化echarts實例              var cChart = echarts.init(document.getElementById('main2'));              function cFun(x_data, y_data) {                  // 指定圖表的配置項和數據                  cChart.setOption({                      title: {                      },                      tooltip: {                          trigger: 'axis'                      },                      legend: {                          data: ['近七日收益']                      },                      grid: {                          left: '3%',                          right: '4%',                          bottom: '3%',                          containLabel: true                      },                      xAxis: {                           splitLine: {     show: false   },                          // 改變x軸顏色                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                          type: 'category',                          boundaryGap: false,                          data: x_data,                      },                      yAxis: {                           splitLine: {     show: false   },                          type: 'value',                          scale: true,                          name: '心率值',                          max: 150,                          min: 0,                          splitNumber: 5,                          // 改變y軸顏色                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                      },                      series: [                          {                              name: '',                              type: 'line',                              symbol: 'circle', // 折線點設置為實心點                              symbolSize: 6, // 折線點的大小                              itemStyle: {                                  normal: {                                      color: "#1bdaf8", // 折線點的顏色                                      lineStyle: {                                          color: "#0d427e" // 折線的顏色                                      }                                  }                              },                              areaStyle: {                                  normal: {                                      color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{                                          offset: 0,                                          color: "#0e4b7a" // 0% 處的顏色                                      }, {                                          offset: 0.6,                                          color: "#0d3f70" // 60% 處的顏色                                      }, {                                          offset: 1,                                          color: "#0c3367" // 100% 處的顏色                                      }], false)                                  }                              },                              stack: '總量',                              data: y_data                          }                      ]                  });              }                // 基於準備好的dom,初始化echarts實例              var dChart = echarts.init(document.getElementById('main3'));              // 指定圖表的配置項和數據              function dFun(x_data, y_data) {                  dChart.setOption({                      title: {                          left: 'left',                          text: '概率',                          show: false                      },                      tooltip: {                          trigger: 'axis',                          formatter: '{a}:{c}',                          axisPointer: {                              type: 'cross',                              crossStyle: {                                  color: '#999'                              }                          }                      },                      grid: {                          show: false,                          top: '30',                          bottom: '60',                          right: '60',                          left: '60'                      },                      legend: {                          show: true,                          selectedMode: 'single', // 設置顯示單一圖例的圖形,點擊可切換                          bottom: 10,                          left: 50,                          textStyle: {                              color: '#666',                              fontSize: 12                          },                          itemGap: 20,                          data: ['設備一', '設備二', '設備三'],                          inactiveColor: '#ccc'                      },                      xAxis: {                          splitLine: {     show: false   },                          type: 'category',                          data: x_data,                          axisPointer: {                              type: 'shadow'                          },                          // 改變x軸顏色                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                          axisTick: {                              show: true,                              interval: 0                          },                      },                      // 設置兩個y軸,左邊顯示數量,右邊顯示概率                      yAxis: [{                              splitLine: {     show: false   },                              type: 'value',                              name: '數量',                              max: 1000,                              min: 0,                              show: true,                              interval: 500,                              // 改變y軸顏色                              axisLine: {                                  lineStyle: {                                      color: '#00a2e2',                                      width: 1, // 這裡是為了突出顯示加上的                                  }                              },                      },                          // 右邊顯示概率                          {                              splitLine: {     show: false   },                              type: 'value',                              name: '概率',                              min: 0,                              max: 100,                              interval: 10,                              // 改變y軸顏色                              axisLine: {                                  lineStyle: {                                      color: '#00a2e2',                                      width: 1, // 這裡是為了突出顯示加上的                                  }                              },                              axisLabel: {                                  formatter: '{value} %'                              }                          }                        ],                      // 每個設備分數量、概率2個指標,只要讓他們的name一致,即可通過,legeng進行統一的切換                      series: [{                              name: '設備一',                              type: 'bar',                              symbol: 'circle', // 折線點設置為實心點                              symbolSize: 6, // 折線點的大小                              itemStyle: {                                  normal: {                                      color: "#1bdaf8", // 折線點的顏色                                      lineStyle: {                                          color: "#0d427e" // 折線的顏色                                      }                                  }                              },                              areaStyle: {                                  normal: {                                      color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{                                          offset: 0,                                          color: "#0e4b7a" // 0% 處的顏色                                      }, {                                          offset: 0.6,                                          color: "#0d3f70" // 60% 處的顏色                                      }, {                                          offset: 1,                                          color: "#0c3367" // 100% 處的顏色                                      }], false)                                  }                              },                              data: y_data,                              barWidth: '50%',                          },                          {                              name: '設備一',                              type: 'line',                              symbol: 'circle', // 折線點設置為實心點                              symbolSize: 6, // 折線點的大小                              itemStyle: {                                  normal: {                                      color: "#1bdaf8", // 折線點的顏色                                      lineStyle: {                                          color: "#0d427e" // 折線的顏色                                      }                                  }                              },                              yAxisIndex: 1, // 這裡要設置哪個y軸,默認是最左邊的是0,然後1,2順序來。                              data: y_data,                              symbolSize: 10,                              itemStyle: {                                  normal: {                                      color: "#DDA0DD"                                  }                              }                          },                      ]                  });              }              // 基於準備好的dom,初始化echarts實例              var eChart = echarts.init(document.getElementById('main4'));              // 指定圖表的配置項和數據              function eFun(x_data, y_data) {                  eChart.setOption({                      title: {                          text: ''                      },                      tooltip: {                          trigger: 'axis'                      },                      legend: {                          data: ['近七日收益']                      },                      grid: {                          left: '3%',                          right: '4%',                          bottom: '3%',                          containLabel: true                      },                      xAxis: {                           splitLine: {     show: false   },                          // 改變x軸顏色                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                          type: 'category',                          boundaryGap: false,                          data: x_data,                      },                      yAxis: {                           splitLine: {     show: false   },                          type: 'value',                          scale: true,                          name: '心率值',                          max: 150,                          min: 0,                          splitNumber: 10,                          // 改變y軸顏色                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                      },                      series: [                          {                              name: '近七日收益',                              type: 'line',                              symbol: 'circle', // 折線點設置為實心點                              symbolSize: 6, // 折線點的大小                              itemStyle: {                                  normal: {                                      color: "#1bdaf8", // 折線點的顏色                                      lineStyle: {                                          color: "#0d427e" // 折線的顏色                                      }                                  }                              },                              areaStyle: {                                  normal: {                                      color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{                                          offset: 0,                                          color: "#0e4b7a" // 0% 處的顏色                                      }, {                                          offset: 0.6,                                          color: "#0d3f70" // 60% 處的顏色                                      }, {                                          offset: 1,                                          color: "#0c3367" // 100% 處的顏色                                      }], false)                                  }                              },                              stack: '總量',                              data: y_data,                          }                      ]                  });              }                var fChart = echarts.init(document.getElementById('main5'));              // 指定圖表的配置項和數據              function fFun(x_data, y_data) {                  fChart.setOption({                      title: {                      },                      tooltip: {},                      legend: {                          data: ['銷量']                      },                      xAxis: {                           splitLine: {     show: false   },                          // 改變x軸顏色                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                            data: x_data,                      },                      yAxis: {                           splitLine: {     show: false   },                            type: 'value',                          scale: true,                          name: '心率值',                          max: 150,                          min: 0,                          splitNumber: 10,                          // 改變y軸顏色                          axisLine: {                              lineStyle: {                                  color: '#00a2e2',                                  width: 1, // 這裡是為了突出顯示加上的                              }                          },                      },                      series: [{                          name: '巡檢達標率',                          type: 'bar',                          // 設置柱狀圖大小                          barWidth: 20,                          // 設置柱狀圖漸變顏色                          itemStyle: {                              normal: {                                  color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{                                      offset: 0,                                      color: "#e12251" // 0% 處的顏色                                  }, {                                      offset: 0.6,                                      color: "#df635a" // 60% 處的顏色                                  }, {                                      offset: 1,                                      color: "#e79363" // 100% 處的顏色                                  }], false)                              }                          },                          data: y_data,                      }]                  });                }          </script>      </body>  </html>

test.json

{      "echatX": [          "2019-07-02",          "2019-07-03",          "2019-07-04",          "2019-07-05",          "2019-07-06",          "2019-07-07",          "2019-07-08",          "2019-07-09",          "2019-07-10",          "2019-07-11",          "2019-07-12",          "2019-07-13",          "2019-07-14",          "2019-07-15"      ],      "echatY": [          501,210,123,333,445,157,151,369,101,101,350,435,153,100      ],      "echatY2": [        80,40,13,36,57,77,41,39,61,31,60,73,33,50      ],      "peopleTotal":15,"peopleOnline":4,"peopleOutline":12,"ranges":[]  }