vue中echarts的使用

80 阅读2分钟

柱状图渲染:

        /* 是否显示整个x轴线 */
        /* show:true, */
        axisLine: {
          /* 是否显示x轴的水平线(不包括刻度线) */
          show: true,
          /* 控制整个x轴的颜色 */
          lineStyle: {
            color: {
              type: "linear",
              x: 0,
              y: 0,
              /* 颜色变化的顺序为从左到右 */
              x2: 1,
              y2: 0,
              colorStops: [
                {
                  offset: 0,
                  color: "red",
                },
                {
                  offset: 1,
                  color: "blue",
                },
              ],
              global: false,
            },
            width: 5,
          },
        },
        /* 刻度线的设置 */
        axisTick:{
          /* 是否显示刻度线 */
          show:true,
          /* 刻度线是否在柱子的中间位置显示 */
          alignWithLabel:true,
          /* true刻度线显示在水平线的上方 false刻度线显示在水平线的下方 */
          inside:false,
          /* 控制刻度线的长度 */
          length:10,
          /* 设置刻度线的颜色样式 */
          lineStyle:{
            /* 设置颜色 */
            color:'green',
            /* 设置颜色的模糊度 */
            shadowBlur:4,
            /* 设置模糊颜色 */
            shadowColor:'red'
          },
        },
        /* x轴文字的样式 */
        axisLabel: {
          color:'blue',
          /* 显示所有的x轴的数据 */
          interval: 0,
          /* 放不下的倾斜角度 */
          rotate: 0,
          /* 数据距离顶部刻度线上面的距离 */
          margin: 15,
        },
        /* x轴的网格线 */
        splitLine:{
          /* 是否显示网格线 */
          show:true,
          /* 网格线的颜色样式  */
          lineStyle:{
            color:'#007ACC'
          }
复制代码
 yAxis: {
        /* y轴的网格线 */
        splitLine:{
          /* 是否显示网格线 */
          show:true,
          /* 网格线的颜色样式  */
          lineStyle:{
            color:'#007ACC'
          }
        },
        /* 不显示y轴的垂直线 */
        axisLine: {
          show:false,
        }
      },
复制代码

折线图渲染数据:

展示页面调接口:

/* 可视化数据 */
export const reportsGet = (path="",params={})=> httpServe({path,params});
复制代码
import {reportsGet} from '@/http/request.js'
 data(){
    return{
      reportsList:{}
    }
  },
  created(){
    reportsGet('reports/type/1')
    .then(res=>{
      let {meta,data} = res.data;
      /* 当状态为200表示数据获取成功
      把数据传递给子组件 */
      if(meta.status==200){
        this.reportsList = data;
      }else{
        this.$message.error(meta.msg)
      }
    })
    .catch(err=>{
      this.$message.error(err)
    })
  },
复制代码
  <el-card shadow="always">
          <!-- 一定要添加判断,因为接口获取数据是异步的,不加判断会直接把初始化的空对象
          传给组件,所以需要加判断,等待接口获取到数据之后,再渲染折线图组件 -->
          <line-chart :reportsList="reportsList" v-if="Object.keys(reportsList).length"/>
        </el-card>
复制代码

组件:

name: "LineChart",
  props: {
    reportsList: {
      type: Object,
      default: () => {
        return {
          title: {
            text: "折线图",
          },
          tooltip: {},
          /* grid: {
            left: 30,
            top: 100,
          }, */
          xAxis: {
            axisLabel: {
              /* 显示所有的x轴的数据 */
              interval: 0,
              /* 放不下的倾斜角度 */
              rotate: 0,
              /* 数据距离刻度线的距离 */
              margin: 15,
            },
            data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
          },
          yAxis: {},
          series: [
            {
              name: "销量",
              type: "line",
              data: [5, 20, 36, 10, 10, 20],
            },
            {
              name: "库存",
              type: "line",
              data: [15, 30, 26, 20, 50, 30],
            },
          ],
        };
      },
    },
  },
  data() {
    return {
      lineList: {},
    };
  },
  mounted() {
    //基于准备好的dom,初始化echarts实例
    // var myChart = echarts.init(document.getElementById('main'));
    var myChart = echarts.init(this.$refs.main);
    /* 深拷贝一下 生成两个不同的对象 */
    this.lineList = JSON.parse(JSON.stringify(this.reportsList));
    this.lineList.title = {
      text: "折线图",
    };
    /* 给折线图设置上下左右的距离和图表尺寸大小 */
    this.lineList.grid = {
      width: "80%",
      left: "20%",
      top: "30%",
    };
    /* 下面这种方式需要先给一个对象 */
    /*  this.lineList.grid = {};
    this.lineList.grid.width = '80%';
    this.lineList.grid.left = '20%';
    this.lineList.grid.top = '30%'; */

    /* 把图例的位置调整一下 */
    this.lineList.legend.top = '10%';
    /* x轴文字的样式 */
    this.lineList.xAxis[0].axisLabel= {
      /* 显示所有的x轴的数据 */
      interval: 0,
      /* 放不下的倾斜角度 */
      rotate: 30,
      /* 数据距离顶部刻度线上面的距离 */
      margin: 15,
    }

    /* 把折线图的所属区域删掉 */
    this.lineList.series.forEach(r=>{
      delete r.areaStyle;
      r.smooth = true;
    })
    console.log(this.lineList)