Vue使用echarts做两个数据对比

该博客展示了如何利用Echarts库创建柱状图,并实现在鼠标悬停时两个图表同步显示提示信息和高亮效果。代码示例中,通过监听`mouseover`事件并调用`dispatchAction`方法实现了图表间的联动。这种技术常用于数据对比和宏观展示,如气温变化或销售额对比等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

有时候我们需要数据对比或者数据宏观展示的时候比如去年的气温和今年的气温可视化对比,今年的销售额和去年的销售额对比,当我们滑动到某个图表的时候另一个图表也展示相应的位置

具体代码:

dispatchAction

<template>
<div>
  <!-- 柱状图 -->
  <div id="main" style="height: 290px; width: 550px;"></div>
    <div id="main1" style="height: 290px; width: 550px;"></div>
</div>
</template>
<script>
import * as echarts from 'echarts';
  export default {

    mounted() {
      this.initCharts()
    },
    methods: {
        // 柱状图
        initCharts(){
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('main'));
 var myChart1 = echarts.init(document.getElementById('main1'));

     // 指定图表的配置项和数据
     var option = {
         title: {
         text: '月销量'
         },
         // 提示框
         tooltip: {},
         // 图例
         legend: {
         data: ['销量']
         },
         // 表示x轴坐标
         xAxis: {
         data: ['oppo', 'vivo', 'iphone', '小米', '三星', '魅族']
         },
         // 表示y轴坐标
         yAxis: {},
         //
         series: [
         {
             name: '销量',
             type: 'bar',
             data: [3500, 2200, 4500, 6500, 200, 3000]
         }
         ]
     };
    myChart.setOption(option);
    myChart1.setOption(option);
    myChart.on('mouseover', function (params) {
       myChart1.dispatchAction({
        type:'showTip',
        seriesIndex:0,
        dataIndex:params.dataIndex
    });
    myChart1.dispatchAction({
                    type:'highlight',
                    seriesIndex:0,
                    dataIndex:params.dataIndex
                });
     });


 },
}
}
</script>

解析,我们可以通过echarts 的原生监听事件获取到目前点击或者滑动到的参数通过参数去触发指定的另一个图表位置,

效果图

在这里插入图片描述

### 实现 Vue3 中两个 ECharts 图表 #### 创建和配置两个 ECharts 图表实例 为了在 Vue3 项目中创建并配置两个 ECharts 图表,需遵循以下流程: 1. **安装依赖** 确保已安装 `echarts` 库。如果尚未安装,则可通过命令行工具执行如下操作来完成安装[^2]。 ```bash cnpm install echarts ``` 2. **引入 ECharts** 在需要使用的组件文件顶部导入 ECharts 库。 ```javascript import * as echarts from 'echarts'; ``` 3. **模板部分设置容器** HTML 模板里为每个图表预留显示区域,通常使用 `<div>` 定义,并赋予唯一 ID 或者绑定动态属性以便后续 JavaScript 访问这些 DOM 节点[^1]。 ```html <template> <div> <!-- 第一个图表 --> <div id="chart-one" style="width: 600px;height:400px;"></div> <!-- 第二个图表 --> <div id="chart-two" style="width: 600px;height:400px;"></div> </div> </template> ``` 4. **脚本逻辑编写** 利用生命周期钩子函数(如 mounted),分别初始化两个不同的 ECharts 实例对象,并调用各自的 `setOption()` 方法传入相应的选项数据结构以定制化外观样式与行为特性。 ```javascript <script setup> import { onMounted, ref } from "vue"; import * as echarts from 'echarts'; onMounted(() => { // 获取第一个图表DOM节点 let chartOneDom = document.getElementById('chart-one'); // 初始化第一个ECharts实例 var chartOneInstance = echarts.init(chartOneDom); // 设置第一个图表的option chartOneInstance.setOption({ title : { text: '第一个柱状图', subtext: '' }, tooltip : { trigger: 'axis' }, xAxis : [ { type : 'category', data : ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] } ], yAxis : [ { type : 'value' } ], series : [ { name:'销量', type:'bar', data:[120, 132, 101, 134, 90, 230, 210] } ] }); // 同样的过程应用于第二个图表 let chartTwoDom = document.getElementById('chart-two'); var chartTwoInstance = echarts.init(chartTwoDom); chartTwoInstance.setOption({ title : { text: '第二个折线图', subtext: '' }, tooltip : { trigger: 'axis' }, xAxis : [ { type : 'category', boundaryGap : false, data : ['周一','周二','周三','周四','周五','周六','周日'] } ], yAxis : [ { type : 'value' } ], series : [ { name:'邮件营销', type:'line', stack: '总量', areaStyle: {}, data:[120, 132, 101, 134, 90, 230, 210] } ] }); }); </script> ``` 上述代码展示了如何在一个 Vue 组件内部同时管理两个独立运作却又相互关联的 ECharts 可视化图形;其中不仅包含了基础的数据序列定义还涉及到了不同类型的可视化表达形式——柱形图与折线图之间的对比呈现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值