当前位置:首页 > 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 实现走势图的方法 使用 ECharts 库 ECharts 是一个强大的数据可视化库,支持多种图表类型,包括走势图(折线图)。在 Vue 项目中可以通过 vue-echarts 封装库或直接使…

vue实现单点

vue实现单点

Vue 实现单点登录(SSO)方案 单点登录(SSO)允许用户在多个相关但独立的系统中使用同一组凭证登录。以下是基于 Vue 的实现方案: 基于 OAuth2/OpenID Connect 的实现…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <i…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(…

vue实现visual

vue实现visual

Vue 实现可视化(Visual)的常见方法 在 Vue 中实现可视化通常涉及数据可视化库的集成,以下是几种主流方案: 使用 ECharts ECharts 是一个强大的 JavaScript 图表…

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm…