当前位置:首页 > VUE

vue实现复杂饼图

2026-01-23 06:30:49VUE

使用 ECharts 实现复杂饼图

ECharts 是一个功能强大的数据可视化库,支持复杂的饼图配置,包括嵌套饼图、环形图、自定义标签等。

安装 ECharts:

npm install echarts --save

基础饼图实现:

<template>
  <div ref="chart" style="width: 600px; height: 400px;"></div>
</template>

<script>
import * as echarts from 'echarts';

export default {
  mounted() {
    this.initChart();
  },
  methods: {
    initChart() {
      const chartDom = this.$refs.chart;
      const myChart = echarts.init(chartDom);

      const option = {
        title: {
          text: '基础饼图示例',
          left: 'center'
        },
        tooltip: {
          trigger: 'item',
          formatter: '{a} <br/>{b}: {c} ({d}%)'
        },
        legend: {
          orient: 'vertical',
          left: 'left',
        },
        series: [
          {
            name: '访问来源',
            type: 'pie',
            radius: '50%',
            data: [
              { value: 1048, name: '搜索引擎' },
              { value: 735, name: '直接访问' },
              { value: 580, name: '邮件营销' },
              { value: 484, name: '联盟广告' },
              { value: 300, name: '视频广告' }
            ],
            emphasis: {
              itemStyle: {
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowColor: 'rgba(0, 0, 0, 0.5)'
              }
            }
          }
        ]
      };

      myChart.setOption(option);
    }
  }
};
</script>

实现环形饼图

修改 radius 属性即可创建环形图:

vue实现复杂饼图

series: [
  {
    name: '访问来源',
    type: 'pie',
    radius: ['40%', '70%'],  // 内半径40%,外半径70%
    data: [
      // 数据同上
    ]
  }
]

实现嵌套饼图(多层饼图)

通过多个 series 叠加实现:

series: [
  {
    name: '外层',
    type: 'pie',
    radius: ['50%', '70%'],
    label: {
      show: false
    },
    data: [
      { value: 335, name: 'A' },
      { value: 310, name: 'B' },
      { value: 234, name: 'C' }
    ]
  },
  {
    name: '内层',
    type: 'pie',
    radius: ['0', '30%'],
    label: {
      position: 'inner'
    },
    data: [
      { value: 100, name: 'A1' },
      { value: 90, name: 'A2' },
      { value: 145, name: 'A3' }
    ]
  }
]

自定义饼图样式

可以自定义每个扇区的样式:

data: [
  {
    value: 1048,
    name: '搜索引擎',
    itemStyle: {
      color: '#c23531',
      borderWidth: 2,
      borderColor: '#fff'
    }
  },
  // 其他数据项...
]

添加交互效果

配置 tooltip 和 emphasis 增强交互:

vue实现复杂饼图

tooltip: {
  trigger: 'item',
  formatter: function(params) {
    return `${params.seriesName}<br/>
            ${params.marker} ${params.name}<br/>
            数值: ${params.value}<br/>
            占比: ${params.percent}%`;
  }
},
emphasis: {
  scale: true,
  scaleSize: 5,
  label: {
    show: true,
    fontSize: '20',
    fontWeight: 'bold'
  }
}

响应式处理

添加窗口大小变化监听:

mounted() {
  this.initChart();
  window.addEventListener('resize', this.handleResize);
},
methods: {
  handleResize() {
    this.myChart && this.myChart.resize();
  }
},
beforeDestroy() {
  window.removeEventListener('resize', this.handleResize);
}

使用 Vue-ECharts 组件

对于更简单的集成,可以使用 vue-echarts 封装组件:

npm install vue-echarts echarts --save

使用示例:

<template>
  <v-chart :option="chartOption" style="height: 400px" />
</template>

<script>
import { use } from 'echarts/core';
import { PieChart } from 'echarts/charts';
import {
  TitleComponent,
  TooltipComponent,
  LegendComponent
} from 'echarts/components';
import { CanvasRenderer } from 'echarts/renderers';
import VChart from 'vue-echarts';

use([
  TitleComponent,
  TooltipComponent,
  LegendComponent,
  PieChart,
  CanvasRenderer
]);

export default {
  components: {
    VChart
  },
  data() {
    return {
      chartOption: {
        // 同上配置
      }
    };
  }
};
</script>

以上方法提供了从基础到高级的 Vue 中实现复杂饼图的完整方案,可根据实际需求选择合适的实现方式。

标签: 复杂vue
分享给朋友:

相关文章

vue实现签名

vue实现签名

实现Vue签名功能的步骤 安装签名库 使用vue-signature库可以快速实现签名功能。通过npm或yarn安装: npm install vue-signature --save # 或 y…

vue 实现长列表

vue 实现长列表

Vue 实现长列表的优化方案 虚拟滚动技术 虚拟滚动是处理长列表的高效方式,仅渲染可视区域内的元素。通过计算滚动位置动态加载和卸载DOM节点,大幅减少内存占用和渲染压力。 <template&…

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$router…

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPa…

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDia…

vue实现打印二维码

vue实现打印二维码

安装二维码生成库 使用 qrcode 或 vue-qrcode 库生成二维码。通过 npm 安装: npm install qrcode vue-qrcode 生成二维码 在 Vue 组…