vue实现饼图
使用 ECharts 实现 Vue 饼图
安装 ECharts 依赖
npm install echarts --save
在 Vue 组件中引入 ECharts
import * as echarts from 'echarts'
创建饼图容器
<template>
<div id="pieChart" style="width: 600px; height: 400px;"></div>
</template>
初始化饼图
mounted() {
this.initPieChart()
},
methods: {
initPieChart() {
const chart = echarts.init(document.getElementById('pieChart'))
const option = {
title: {
text: '示例饼图',
subtext: '数据展示',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b}: {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 'left',
data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎']
},
series: [
{
name: '访问来源',
type: 'pie',
radius: '50%',
data: [
{ value: 335, name: '直接访问' },
{ value: 310, name: '邮件营销' },
{ value: 234, name: '联盟广告' },
{ value: 135, name: '视频广告' },
{ value: 1548, name: '搜索引擎' }
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
chart.setOption(option)
}
}
使用 Vue-ECharts 组件
安装 vue-echarts

npm install echarts vue-echarts
注册组件
import { provide } from 'vue'
import { createApp } from 'vue'
import App from './App.vue'
import ECharts from 'vue-echarts'
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { PieChart } from 'echarts/charts'
import {
TitleComponent,
TooltipComponent,
LegendComponent
} from 'echarts/components'
use([
CanvasRenderer,
PieChart,
TitleComponent,
TooltipComponent,
LegendComponent
])
const app = createApp(App)
app.component('v-chart', ECharts)
provide('$echarts', echarts)
app.mount('#app')
使用组件
<template>
<v-chart :option="chartOption" style="height: 400px" />
</template>
<script>
export default {
data() {
return {
chartOption: {
title: {
text: 'Vue-ECharts 饼图',
left: 'center'
},
tooltip: {
trigger: 'item'
},
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)'
}
}
}
]
}
}
}
}
</script>
响应式饼图实现
监听窗口变化

mounted() {
this.initPieChart()
window.addEventListener('resize', this.handleResize)
},
beforeDestroy() {
window.removeEventListener('resize', this.handleResize)
},
methods: {
handleResize() {
this.chart && this.chart.resize()
}
}
动态数据更新
updateChartData(newData) {
this.chart.setOption({
series: [{
data: newData
}]
})
}
自定义饼图样式
环形饼图配置
series: [{
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: '18',
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [
{value: 1048, name: '搜索引擎'},
{value: 735, name: '直接访问'}
]
}]
玫瑰图效果
series: [{
type: 'pie',
radius: [20, 140],
roseType: 'radius',
itemStyle: {
borderRadius: 5
},
data: [
{value: 40, name: 'rose 1'},
{value: 33, name: 'rose 2'}
]
}]






