Vue+Echarts饼状图展示

本文展示了如何在Vue中复用Echarts组件来创建饼图,并监听图表的点击事件。通过`PieChart.vue`组件,接收数据并设置图表样式,当点击饼图扇形时触发`chartClick`事件,传递扇形信息。同时,详细展示了组件的模板、样式和脚本部分,以及如何初始化Echarts实例和设置图表选项。

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

npm install echarts -S

一,引用组件

<template>
  <div class="analysis">
    <PieChart :chartData="chartList"
              @chartClick="chartClick" />
  </div>
</template>

<script>
import PieChart from './PieChart.vue'

export default {
  name: 'IndexAnalysis',
  components: {
    PieChart,
  },
  data() {
    return {
      chartList: [
        {
          name: 'recall_error',
          value: 3,
          itemStyle: {
            color: '#9a60b4',
          },
        },
        {
          name: 'rank_error',
          value: 5,
          itemStyle: {
            color: '#fc8452',
          },
        },
        {
          name: 'qp_error-QP',
          value: 2,
          itemStyle: {
            color: '#5470c6',
          },
        },
      ],
    }
  },
  methods: {
    //接受echarts扇形信息传递
    chartClick(param) {
      console.log(param)
    },
  },
}
</script>

<style scoped>
</style>

二,复用 Echarts 组件

<template>
  <div id="chart"
       ref="chart">
  </div>
</template>

<style scoped>
#chart {
  width: 500px;
  height:300px;
  display: inline-block;
}
</style>

<script>
// 引入 ECharts 主模块
import * as ECharts from 'echarts'
export default {
  props: {
    chartData: {
      type: Array,
      default: [],
    },
  },
  methods: {
    echartTree() {
      this.myChart = ECharts.init(this.$refs.chart)
      this.myChart.setOption(
        (this.optionChart = {
          tooltip: {
            triggerOn: 'click',
            trigger: 'item',
          },
          series: [
            {
              type: 'pie',
              radius: '50%', //图形大小
              data: this.seriesData,
              center: ['50%', '50%'], // 图形位置 默认全局居中
              emphasis: {
                //设置鼠标放到哪一块扇形上面的时候,扇形样式、阴影
                itemStyle: {
                  shadowBlur: 10,
                  shadowOffsetX: 0,
                  shadowColor: 'blue',
                  normal: {
                    color: ['#FE8463', 'red', 'green'],
                  },
                },
              },
              itemStyle: {
                normal: {
                  label: {
                    show: true,
                    //百分比展示
                    formatter: `{b} : {d}% - {c}`,
                    textStyle: {
                      fontSize: 14,
                      fontWeight: 'bolder',
                    },
                  },
                },
              },
            },
          ],
        })
      )
      this.myChart.off('click')
      // 饼状图点击扇形 数据传递
      this.myChart.on('click', (params) => {
        this.$emit('chartClick', params)
      })
    },
  },
  mounted() {
    console.log(this.seriesData)
    this.echartTree()
  },
  data() {
    return {
      myChart: null,
      seriesData: this.$props.chartData,
      optionChart: '',
    }
  },
  watch: {
    chartData(val) {
      if (val) {
        this.seriesData = val
      } else {
        this.seriesData = null
      }
      this.echartTree()
    },
  },
}
</script>

效果图展示(对应上方数据)
          name: 'recall_error',
          value: 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值