vue里echarts实现折线图tooltip自定义样式

简介: vue里echarts实现折线图tooltip自定义样式

效果


20210401115007629.png



实现

先编写父组件:

<stacked-line-chart :tooltipData="tooltipData" :monthNameData="monthNameData" :allApplyCountData="allApplyCountData"
  :hallApplyCountData="hallApplyCountData" :netApplyCountData="netApplyCountData"
></stacked-line-chart>
<script>
export default {
  data () {
    return {
      tooltipData: ['2020-01', '2020-02', '2020-03', '2020-04', '2020-05', '2020-06', '2020-07', '2020-09', '2020-10', '2020-12', '2021-01', '2021-02'],
      monthNameData: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '9月', '10月', '12月', '1月', '2月'], // x轴月份数据
      allApplyCountData: [120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90], // 总申办量
      hallApplyCountData: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390], // 实体大厅申办量
      netApplyCountData: [820, 932, 901, 934, 1290, 1330, 1320, 820, 932, 901, 934, 1290], // 网上大厅申办量
    };
  },
}
</script>


在编写StackedLineChart组件

<template>
  <div ref="stackedLineChart" class="stacked-line-chart-box"></div>
</template>
<script>
import * as echarts from 'echarts';
export default {
  name: 'StackedLineChart',
  props: {
    // 用于提示
    tooltipData: {
      type: Array,
      default: () => {
        return [];
      }
    },
    // x轴月份数据
    monthNameData: {
      type: Array,
      default: () => {
        return [];
      }
    },
    // 总申办量
    allApplyCountData: {
      type: Array,
      default: () => {
        return [];
      }
    },
    // 实体大厅申办量
    hallApplyCountData: {
      type: Array,
      default: () => {
        return [];
      }
    },
    // 网上大厅申办量
    netApplyCountData: {
      type: Array,
      default: () => {
        return [];
      }
    },
  },
  data () {
    return {
      option: {
        tooltip: {
          trigger: 'axis',
          padding: [8, 10, 8, 10],
          axisPointer: {
            type: 'line',
            lineStyle: {
              color: 'rgba(0, 0, 0, 0.65)'
            },
          },
          // 自定义提示框的内容
          formatter: (params) => {
            let result = this.tooltipData[params[0].dataIndex] + "</br>";
            params.forEach(el => {
              result += `${this.markDot(el.color)}${el.seriesName}:${el.data}</br>`
            })
            return result;
          }
        },
        color: ['#9A47FF', '#1890FF', '#2FC25B'],
        legend: {
          data: ['总申办量', '实体大厅申办量', '网上大厅申办量'],
          left: 'left',
          icon: 'circle',
          padding: 0,
          itemGap: 24,
          itemWidth: 6,
          itemHeight: 6,
          textStyle: {
            color: '#333',
            padding: [2, 0, 0, 0],
            lineHeight: 20
          }
        },
        grid: {
          left: '0',
          right: '2%',
          bottom: '0',
          containLabel: true,
        },
        xAxis: {
          type: 'category',
          boundaryGap: false,
          data: [],
          axisLine: {
            lineStyle: {
              color: '#E9E9E9'
            }
          },
          axisTick: {
            lineStyle: {
              color: '#E9E9E9'
            }
          },
          axisLabel: {
            color: '#777777'
          }
        },
        yAxis: {
          type: 'value',
          nameTextStyle: {
            color: 'red'
          },
          axisLine: {
            show: false
          },
          axisTick: {
            show: false
          },
          axisLabel: {
            color: '#777777'
          },
          splitLine: {
            lineStyle: {
              color: '#E9E9E9',
              type: 'dashed'
            }
          }
        },
        series: [
          {
            name: '总申办量',
            zlevel: 1,
            type: 'line',
            stack: '总量',
            symbol: 'circle',
            symbolSize: [2, 2],
            showSymbol: false,
            itemStyle: {
              borderWidth: 1,
              borderColor: '#fff'
            },
            data: []
          },{
            name: '实体大厅申办量',
            zlevel: 1,
            type: 'line',
            stack: '总量',
            symbol: 'circle',
            symbolSize: [2, 2],
            showSymbol: false,
            itemStyle: {
              borderWidth: 1,
              borderColor: '#fff'
            },
            data: []
          },{
            name: '网上大厅申办量',
            zlevel: 1,
            type: 'line',
            stack: '总量',
            symbol: 'circle',
            symbolSize: [2, 2],
            showSymbol: false,
            itemStyle: {
              borderWidth: 1,
              borderColor: '#fff'
            },
            data: []
          }
        ],
      }
    };
  },
  mounted() {
    this.initRender();
  },
  methods: {
    // 初始化渲染
    initRender() {
      this.option.xAxis.data = this.monthNameData; // x轴月份数据
      this.option.series[0].data = this.allApplyCountData; // 总申办量
      this.option.series[1].data = this.hallApplyCountData; // 实体大厅申办量
      this.option.series[2].data = this.netApplyCountData; // 网上大厅申办量
      let chartDom = this.$refs.stackedLineChart;
      let myChart = echarts.init(chartDom);
      myChart.setOption(this.option);
    },
    // 生成大小一样样色不同的圆点
    markDot(color) {
      let domHtml = '<span style="' +
        'display: inline-block;' +
        'margin-right: 8px;' +
        'margin-bottom: 2px;' +
        'border-radius: 6px;' +
        'width: 6px;' +
        'height: 6px;' +
        `background-color: ${color}` +
      '"></span>'
      return domHtml;
    }
  },
};
</script>
<style lang="scss" scoped>
.stacked-line-chart-box {
  height: 388px;
}
</style>



目录
相关文章
|
1月前
Echarts 热力图自定义开发
Echarts 热力图自定义开发
|
1月前
echarts 柱状图/折线图x轴坐标间隔
echarts 柱状图/折线图x轴坐标间隔
29 0
|
1月前
|
JavaScript 应用服务中间件 nginx
【报错】nginx部署项目后Echarts折线图无法展示
在Vue3+TS+Arco项目中,打包后使用Nginx部署的Echarts折线图显示异常,报`Cannot read properties of undefined(reading &#39;setOption&#39;)`错误。问题源于在定义div时使用了Vue2的`$refs`语法,导致DOM元素无法正确初始化Echarts。解决方法有两种:1) 不推荐使用`document.getElementById`获取DOM并初始化Echarts;2) 推荐在Vue3中通过`ref`获取DOM,在`onMounted`中使用`echarts.init`并借助`nextTick`异步绘制数据。
|
1月前
|
JavaScript
echarts_自定义graph关系图
echarts_自定义graph关系图
27 0
|
10天前
|
JavaScript 容器
|
30天前
|
存储 数据可视化 前端开发
Echarts+vue+java+mysql实现数据可视化
Echarts+vue+java+mysql实现数据可视化
|
1月前
|
前端开发 JavaScript 定位技术
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
40 0
|
1月前
|
JavaScript
如何在vue添加echarts图表
如何在vue添加echarts图表
25 0
|
1月前
|
SQL JavaScript 分布式数据库
使用Vue+ ECharts进行动态图表展示
Vue是一个用于构建用户界面的渐进式JavaScript框架,可以轻松构建单页面应用程序(SPA)。ECharts是一个基于JavaScript的数据可视化库,可以通过简单的配置实现各种图表的展示和交互。
112 0
|
1月前
【统计图】Echarts实现多条折线图渐变堆叠效果
【统计图】Echarts实现多条折线图渐变堆叠效果