vue3之echarts间隔圆环

vue3之echarts间隔圆环

效果:
在这里插入图片描述
版本
"echarts": "^5.1.2"

核心代码:

<template>
    <div class="chart" ref="hazardCharts"></div>
</template>

<script lang="ts" setup>
import * as echarts from 'echarts';
import { reactive, ref, onMounted,onBeforeUnmount } from 'vue';

const hazardCharts = ref(null);
let chartObj: any = null;
let timer: any = null;
const chartColor = ref(['#FF5151', '#F88518', '#E4C537', '#00FFFF' , '#3DB6FB']);
const state = reactive({
    chartData: [
        {
            "name": "已销号",
            "percentage": 20.5,
            "value": 1475
        },
        {
            "name": "待销号",
            "percentage": 30,
            "value": 145
        },
        {
            "name": "待验收",
            "percentage": 19.5,
            "value": 14
        },
        {
            "name": "待整改",
            "percentage": 10,
            "value": 14
        },
        {
            "name": "待下达",
            "percentage": 20,
            "value": 14
        }
    ],
});

const initChart = () =>{
    if (!chartObj) {
      chartObj = echarts.init(hazardCharts.value);
    }
    const option = getOption(state.chartData)

    // 设置配置项
    chartObj.setOption(option);
}

const getOption = (data: any) => {
    let peiData: any = [];

    data.forEach((ele: any, index: number)=>{
        peiData.push({
            value: ele.percentage,
            name: ele.name,
            itemStyle: {
                normal: {
                    borderWidth: 0,
                    color: chartColor.value[index],
                }
            }
        },
            {
            value: 1,
            name: '',
            itemStyle: {
                normal: {
                    label: {
                        show: false
                    },
                    color: 'rgba(0, 0, 0, 0)',
                    borderColor: 'rgba(0, 0, 0, 0)',
                    borderWidth: 0
                }
            }
        }
        )
    })
    let option = {
        legend: {
            show: false
        },
        tooltip: {
            show: false
        },
        toolbox: {
            show: false
        },
        series: [
            {
                type: 'pie',
                clockWise: false,
                radius: [120, 135],
                hoverAnimation: false,
                avoidLabelOverlap: false,
                itemStyle: {
                    borderRadius: 0,
                    borderColor: '#fff',
                    borderWidth: 2
                },
                label: {
                    show: false,
                    position: 'center'
                },
                emphasis: {
                    label: {
                        show: false,
                    }
                },
                data: peiData,
            }
        ]
    }
    return option;
}

onMounted(() => {
    initChart();
});

onBeforeUnmount(() => {
    if (timer) {
        clearInterval(timer);
        timer = null;
    }
    if (chartObj) {
        chartObj.clear();
        chartObj.dispose();
        chartObj = null;
    }
});
</script>

<style scoped lang="scss">
.chart {
    width: 345px;
    height: 345px;
}
</style>


### 秋云圆环图中间空余部分的含义 秋云圆环图中的中间空余部分通常用于增强视觉效果并使图表更加美观。这种设计不仅能够突出显示数据的比例关系,还能让读者更直观地理解各个扇区所占比例[^2]。 具体来说,在实际应用中,这个空白区域并不表示任何特定的数据值;相反,它是一个艺术性的处理方式,使得整个图形看起来更为简洁明了。对于某些场景而言,开发者还可以在这个区域内放置额外的信息或者图标来辅助说明主要数据之外的内容[^1]。 ### 制作方法 为了实现带有中间空隙的圆环图,可以通过调整配置项 `opts` 下的相关参数完成: #### 配置选项设置 - **radius**: 控制内外半径大小,默认情况下会形成完整的饼状图; - **paddingAngle**: 设置每个扇区之间的间隔角度,适当增大此数值即可得到理想的间隙宽度; - **centerOffsetX/centerOffsetY**: 如果希望进一步自定义中心位置偏移量,则可利用这两个属性微调布局。 下面是一段简单的 Vue 组件代码片段展示如何创建一个具有中央空间的圆环图实例: ```html <template> <div class="echarts-container"> <!-- 圆环--> <qiun-data-charts type="ring" :options="chartOptions" :data="chartInstanceData"/> </div> </template> <script setup lang="ts"> import { ref } from &#39;vue&#39;; const chartInstanceData = { series: [ { name: &#39;&#39;, data: [30, 70], color: [&#39;#FF6F61&#39;, &#39;#ECEFF1&#39;] } ] }; const chartOptions = { padding: [15, 15, 0, 15], extra: { ring: { radius: [&#39;45%&#39;, &#39;65%&#39;], // 内外圈占比 labelWidth: 15, offsetAngle: 0, paddingAngle: 8 // 扇区间隔度数 } }, }; </script> ``` 通过上述代码可以看出,`radius` 参数决定了内外两个圆周的具体尺寸范围,而 `paddingAngle` 属性则用来控制相邻两片扇形间的缝隙程度。当这些值被合理设定之后,便可以在页面上呈现出预期的效果——即拥有明显内部留白区域的漂亮圆环统计图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值