Echarts 饼图中心添加图片

需求

在这里插入图片描述

问题 - 暂时无法解决(如果图表居中不存在该问题)

由于此处饼图位置不处于当前 echarts 图表容器的中心位置,而是偏左一点,我们需要设置:

  1. 中心图片所在靠左位置【见 - 主要代码1】官方手册 https://echarts.apache.org/zh/option.html#graphic.elements-image.left
  2. 饼图所在靠左位置【见 - 主要代码2】官方手册 https://echarts.apache.org/zh/option.html#series-pie.radius

【主要代码1】【主要代码2】需要同时修改 距左侧距离:

  1. 固定值 的话浏览器窗口过大 时饼图过大,会导致饼图左侧部分区域 超出
    在这里插入图片描述
  2. 百分比 的话中心图片的距左百分比和饼图距左百分比 对应不上 (中心图片百分比参照容器计算有问题),会导致错位。(也会超出,但此处错位是主要问题)
    在这里插入图片描述

代码

<template>
  <div id="AnomalyStatisticsEcharts" />
</template>

<script>
export default {
  name: 'AnomalyStatisticsEcharts',
  components: {},

  props: {
    theme: {
      type: String,
      required: true
    },
    dataList: {
      type: Array,
      // required: true
      default: () => {
        return [
          { value: 20, name: '测试1', pre: '10' },
          { value: 20, name: '测试2', pre: '10' },
          { value: 20, name: '测试3', pre: '10' },
          { value: 20, name: '倒计时社保卡接收不到三部分但实际福克斯', pre: '10' },
          { value: 20, name: '测试5', pre: '10' },
          { value: 20, name: '测试6', pre: '10' },
          { value: 20, name: '测试7', pre: '10' }
        ]
      }
    }
  },

  data() {
    return {
      Echarts: null
    }
  },

  computed: {
    options() {
      return {
        graphic: {
          /**
           * 【主要代码】图形中心展示图片
           */
          elements: [
            {
              type: 'image',
              style: {
                image: require('@/assets/images/home/home_pie_center.png'), // 图片地址
                width: 120,
                height: 120
              },
              // left: '18.5%',
              left: '60', // 【主要代码1】
              top: 'center'
            }
          ]
        },
        title: {
          show: !this.dataList.length,
          text: '暂无数据',
          left: 'center',
          top: 'center',
          textStyle: {
            color: this.theme === 'light-theme' ? '#000' : '#fff'
          }
        },
        tooltip: {
          trigger: 'item'
        },
        grid: {
          left: 0
        },
        legend: {
          type: 'scroll',
          top: '5%',
          right: 0,
          orient: 'vertical',
          itemGap: 14,
          itemWidth: 14,

          formatter: (name) => {
            for (let i = 0; i < this.dataList.length; i++) {
              if (this.dataList[i].name === name) {
                const count = this.dataList[i].value
                const percent = `${this.dataList[i].pre}%`
                return `{name| ${name}} {count| ${count} |} {percent| ${percent}} `
              }
            }
          },
          textStyle: {
            // rich放在textStyle里面
            rich: {
              name: {
                fontSize: 14
                // width: 100
              },
              count: {
                fontSize: 14
              },
              percent: {
                fontSize: 14
              }
            }
          }
        },
        series: [
          {
            name: '异常点统计分析',
            type: 'pie',
            radius: ['70%', '90%'],
            // center: ['25%', '50%'],
            center: ['120', '50%'], // 【主要代码2】
            avoidLabelOverlap: false,
            itemStyle: {
              // borderRadius: 10,
              borderWidth: 2,
              borderColor: '#fff'
            },
            label: {
              show: false,
              position: 'center'
            },
            emphasis: {
              label: {
                show: true,
                fontSize: 20,
                fontWeight: 'bold',

                renderMode: 'html',
                formatter: ['{b|{b}}', '{c|{c}}'].join('\n'),
                // formatter: (params) => {
                //   console.log('params----', params)
                //   return `<div>aaaaa</div>`
                // },
                rich: {
                  b: {
                    color: '#000',
                    fontSize: 16,
                    padding: [0, 0, 10, 0]
                  },
                  c: {
                    fontSize: 32,
                    color: '#222',
                    fontWeight: 'bold'
                  }
                }
              }
            },
            labelLine: {
              show: false
            },
            data: this.dataList || []
          }
        ]
      }
    }
  },

  watch: {
    theme() {
      this.init()
    },
    dataList() {
      this.init()
    }
  },

  created() {},
  mounted() {
    window.addEventListener('resize', () => {
      if (document.getElementById('AnomalyStatisticsEcharts')) {
        this.Echarts = this.$echarts.init(document.getElementById('AnomalyStatisticsEcharts'))
        this.Echarts.resize()
      }
    })

    this.init()
  },

  methods: {
    init() {
      if (this.Echarts) {
        this.Echarts.dispose()
      }
      this.Echarts = this.$echarts.init(document.getElementById('AnomalyStatisticsEcharts'))

      this.Echarts.setOption(this.options)
      // 高亮
      let currentIndex = 0
      this.Echarts.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        dataIndex: currentIndex
      })
      this.Echarts.on('mouseover', (params) => {
        // 取消之前高亮
        this.Echarts.dispatchAction({
          type: 'downplay',
          seriesIndex: 0,
          dataIndex: currentIndex
        })
        // 获取当前高亮索引
        currentIndex = params.dataIndex
        // 设置当前高亮
        this.Echarts.dispatchAction({
          type: 'highlight',
          seriesIndex: 0,
          dataIndex: params.dataIndex
        })
      })
    }
  }
}
</script>

<style lang='scss' scoped>
#AnomalyStatisticsEcharts {
  width: 100%;
  height: 100%;
}
</style>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在echarts饼图底下增加图片,可以通过在echarts的option中添加背景图片来实现。你可以在option中的series中配置一个饼图和一个image组件,将饼图在上面,将image在下面作为背景图。具体的代码如下所示: ```javascript option = { series: [ { name: '访问来源', type: 'pie', radius: ['30%', '55%'], data: [ { value: 135, name: '视频广告' }, { value: 1048, name: '百度' }, { value: 251, name: '谷歌' }, { value: 147, name: '必应' }, { value: 102, name: '其他' } ] }, { type: 'image', z: -1, // 设置为负数,使其在饼图下方 style: { image: 'your-image-url', // 替换为你的图片链接 x: 'center', y: 'center', width: '100%', height: '100%' } } ] }; ``` 在这个例子中,我们在series中添加了一个image组件,并设置了背景图片的链接、位置和大小。通过将image的z值设置为负数,使其在饼图下方显示。你可以将`your-image-url`替换为你自己的图片链接。这样就可以在echarts饼图底下增加图片了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [echarts饼图各个板块之间的空隙如何实现](https://download.csdn.net/download/weixin_38708841/14919497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [echarts pie饼图底部有横线](https://blog.csdn.net/Igiveufireworks/article/details/128791846)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [echarts 饼图引导线周围文字位置的改变](https://blog.csdn.net/mobingdetong/article/details/80769413)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值