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>



目录
相关文章
|
3月前
|
JSON JavaScript 定位技术
vue中使用echarts实现省市地图绘制,根据数据显示省市天气图标及温度信息
vue中使用echarts实现省市地图绘制,根据数据显示省市天气图标及温度信息
361 1
|
3月前
|
JavaScript API
Echarts中单独为每个legend图例设置样式-根据数据正负显示不同样式
通过上述方法,我们便能够在ECharts中根据数据的正负为每个图例项设置不同的样式,增强了图表的可读性和表现力。这种方法虽然略显间接,但不失为一种灵活的解决方案。
308 2
|
3月前
|
算法 Java Linux
java制作海报五:java 后端整合 echarts 画出 折线图,项目放在linux上,echarts图上不显示中文,显示方框口口口
这篇文章介绍了如何在Java后端整合ECharts库来绘制折线图,并讨论了在Linux环境下ECharts图表中文显示问题。
56 1
|
3月前
|
JavaScript
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
611 0
|
3月前
|
JSON JavaScript 前端开发
vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果
vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果
777 0
|
3月前
|
JSON JavaScript 定位技术
Vue结合ECharts绘制省市地图:数据驱动区域颜色展示,支持省市下钻与经纬度打点功能
Vue结合ECharts绘制省市地图:数据驱动区域颜色展示,支持省市下钻与经纬度打点功能
236 0
|
5月前
|
JavaScript
echarts在Vue项目中的实际运用效果图
这篇文章展示了在Vue项目中使用ECharts图表库的步骤,包括安装ECharts、引入到Vue组件、创建图表实例以及通过watch监听数据变化来实现实时数据更新的方法。
echarts在Vue项目中的实际运用效果图
|
5月前
|
JavaScript 数据可视化 搜索推荐
在Vue项目中使用Echarts图表库
这篇文章介绍了如何在Vue项目中集成ECharts图表库,并通过具体的代码示例展示了如何创建并配置一个饼图来展示数据。
69 0
在Vue项目中使用Echarts图表库
|
5月前
|
XML SQL JavaScript
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
|
5月前
|
JavaScript
Echarts——VUE中如何给echarts绑定click事件
Echarts——VUE中如何给echarts绑定click事件
298 1