近期项目中大屏展示需要3D饼图(PS:别问为什么不使用2D的,问就是产品觉得3D的好看),所以度娘找了一波。
直接找到了用echarts-gl做3D饼图的示例,Echarts 3D饼图开发_长剑浣花咻咻咻的博客-CSDN博客Echarts 3D饼图指示线开发https://blog.csdn.net/sinat_28071063/article/details/125393621
看完我直接好家伙,大哥洋洋洒洒写了一堆,看起来就很厉害。于是乎当起了C-V战士,搬过来以后,不对,是我开发完以后呢,按照自己想要的效果修修改改了一下,看着确实不错。其中他的引导线的方案是在3D的饼图上面盖一个等数据的2D饼图,然后再把2D饼图隐藏掉。我直接惊为天人,不得不感叹前辈们的创造力。然后我就美滋滋的使用了此方案。
结果是啥呢,结果就是测试不通过,会有展示问题,引导线没指到地方,数据量偏差稍大的时候,乱指、引导线标题重合。就像这样:
没办法,只能更换方案了,就在我想着使用平面图形向内倾斜60度,重新计算投影占比大小的时候,我看到了另外一个插件 - Highcharts:3D 饼图 | HighchartsHighcharts中文官网,一站式Highcharts学习资源。提供Highcharts中文论坛、Highcharts在线示例、Highcharts中文APi、Highcharts 中文教程、Highcharts资源下载等https://www.hcharts.cn/demo/highcharts/3d-pie
1、 使用方式和echarts差不多,通过API看实现也不难(不像antv,费劲)。
2、我看report报告,ecahrts-gl和Highcahrts资源占比也差不多。
直接上代码吧:
引入插件:npm install highcharts --save
1、定义容器(和ecahrts一样)
<div class="chart-container">
<div class="chart" :id="getId" ref="minchart" v-show="optionData.length > 0"></div>
<div class="empty-text flex-rcc" v-show="optionData.length <= 0">暂无数据</div>
</div>
2、资源引入
import Highcharts from "highcharts/highcharts";
import highcharts3d from 'highcharts/highcharts-3d';
highcharts3d(Highcharts);
3、初始化饼图
// 图表初始化
initChart () {
//取色盘
const color = ['#D6D5C4', '#EFEFEF', '#4366F3', '#E76C68', '#89F7FE', '#0BA360'];
let chart = Highcharts.chart(this.containerId, {
chart: {
type: 'pie',
options3d: {
enabled: true, // 否使用 3D 功能呈现图表
alpha: 60, // 内旋转角度
beta: 0 // 外旋转角度
},
backgroundColor: 'none',
spacing: [20, 20, 30, 20] // 图表的内边距
},
credits: { enabled: false }, // 版权信息 false为不显示
tooltip: {
// 提示框数据点格式化字符串
pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
},
plotOptions: {
pie: {
size: '100%',
allowPointSelect: true,
cursor: 'pointer',
depth: 10, // 饼图厚度
colors: color, // 取色盘,可以使用rgba方式
dataLabels: {
enabled: true, // 启用或禁用数据标签
connectorPadding: 0, //从数据标签到连接器的距离。
distance: 20, //数据标签与饼图边缘的距离。
format: '<span style="color:#FFD753;font-size: 12px;">{point.y}</span>(万方)<br/>{point.name}',
color: '#BAC3C4',
style: {
"fontWeight": "normal",
"textOutline": "0"
}
}
}
},
series: [{
type: 'pie',
name: '产量',
data: this.optionData //数据集
}]
});
},
效果展示:
总的来说,highcharts来做3D饼图的效果还是不错的,写法上比echarts-gl要简单多了,实现上比较丝滑。
但是,这玩意儿商用收费!!!
我的愿望是世界和平!