python半圆,(小小黑科技)vue+echarts实现半圆图表

本文介绍如何在ECharts中创建半圆图表。通过设置饼图起始角度为180度,并添加一个透明的总和数据项,可以将饼图切割成半圆。在处理数据时,需要注意 formatter 函数的使用,以正确显示每个数据项的百分比。同时,当鼠标悬停在隐藏部分时,可通过设置 tooltip 的 formatter 来避免显示提示信息。最后,确保在 Vue 的 mounted 生命周期钩子中初始化图表。
摘要由CSDN通过智能技术生成

如何用echarts实现半圆图表?在echarts官方实例倒腾一波,发现官方并没有提供半圆图表的写法,那怎么办呢?官方没提供,但需求还是要实现的。

半圆图表其实就是饼图的一半,那么简单的思路如下:设置一个sum值,用来累计所有要展示的数据的总和,再添加到数据里面,那么整个饼图就可以分成均匀的两半,然后将sum值的数据在饼图里面隐藏,就只剩下半圆。下面上代码:

安装echarts

npm install echarts --save

全局引入、配置

// main.js 文件

import echarts from 'echarts'

Vue.prototype.$echarts = echarts

全局引入echarts,文件会比较大,我们实现半圆其实只需要饼图,那么建议还是按需引入

// MyChart.vue

import echarts from 'echarts'

// 引入饼图

require('echarts/lib/chart/pie')

// 引入提示框等组件

require('echarts/lib/component/tooltip')

require('echarts/lib/component/title')

创建容器

// MyChart.vue

初始化容器

let pieChart = echarts.init(document.getElementById('myChart'))

// 初始化数据

let data = [{name: '游泳健身', value: 1024}, {name: '学车考驾照', value: 2048}]

let sum = 0

// 放置需要显示的图例(if you need)

let legendData = []

// 循环数据 累计sum值

data.forEach(item => {

sum += item.value * 1 // *1保证sum值为数值

legendData.push(item.name)

})

// 给数据加上总数sum 通过颜色及透明度设置不显示

data.push({name: '总数', value: sum, itemStyle: {normal: {color: 'rgba(0, 0, 0, 0)'}}})

// 下面给图例加上配置 都是官方的api

pieChart.setOption({

tooltip: {

trigger: 'item',

// formatter: '{a}
{b}:{c}({d}%)'

formatter: '{b}:{c}({d}%)'

},

legend: {

orient: 'horizontal', // vertical 设置图例展示方向

data: legendData

},

series: [

{

name: '随意啦', // 上面formatter的a,不显示a可不设置

type: 'pie',

startAngle: 180, // 重点!这里设置饼图从180°初渲染,刚好从上下将饼图平分成两部分

radius: ['50%', '60%'],

center: ['50%', '60%'],

data: data,

itemStyle: {

emphasis: {

shadowBlur: 10,

shadowOffsetX: 10,

shadowColor: 'rgba(0, 0, 0, 0.5)'

}

}

}

]

})

配置完毕,来对比一下:

配置之前(环形):

bVbq681?w=394&h=369

配置之后:

bVbq699?w=384&h=266

哈哈,半圆就已经出来了,但是不是已经完美了呢?我们把鼠标覆盖上其中一个数据试试:

bVbq7bv?w=384&h=173

吃惊!果然有问题,这里因为我们给数据加上了一条{name: '总数', value: sum}这样总的数据,所以图表统计的时候,其它数据占比就是原来比例的50%!那要怎么处理呢?formatter了解一下。

将原来的formatter改造:

// 原先的formatter

formatter: '{b}:{c}({d}%)'

// 改造formatter

formatter: function (param) {

let str = ''

let c = (param['value'] / sum) * 100 // 算出百分比

c = c.toFixed(2)

str = str + c + '%'

return str

}

看下效果图:

bVbq7eP?w=392&h=257

nice!改造成功。但这里还有一个小小的问题,那就是把鼠标覆盖上被隐藏那部分圆形的时候,还是会有提示显示:

bVbq7gy?w=389&h=377

这里的一个处理就是,当我们在添加最后这一条总数据的时候,把它的tooltip设置为空就行了

data.push({name: '总数', value: sum, tooltip: {formatter: () => ''}, itemStyle: {normal: {color: 'rgba(0, 0, 0, 0)'}}})

最后,该渲染方法应该放在vue的mounted生命周期里,当dom渲染后再初始化容器

mounted () {

this.drawPie()

},

methods: {

drawPie () {

...

}

}

OK,这样就大功告成了!

吐槽:晚上改完的图表,隔天早上领导就说还是换回环形图展示吧(・`ω´・)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值