效果图如下:

实现程序主代码如下:

      initOption() {
let quantity = 0; // 总数
dataList.forEach((item) => {
quantity += item.y;
});
if (dataList.length<=2) {
dataList.forEach((item) => {
item.bfb = parseInt((item.y / quantity) * 100);
item.h = item.bfb * 1.5 >= 70 ? 50 : 30
});
}else{
dataList.forEach((item) => {
item.bfb = parseInt((item.y / quantity) * 100);
// item.h = item.bfb * 1.5 >= 70 ? 70 : item.bfb * 1.5
item.h = item.bfb * 1.5 >= 50 ? 50 : item.bfb * 1.5
// item.h = parseInt(0.86 * item.bfb); // 最高高度60,根据比例渲染高度
// console.log(this.dataList, "dataList----->>>");
});
}
// 修改3d饼图绘制过程
var each = highcharts.each,
round = Math.round,
cos = Math.cos,
sin = Math.sin,
deg2rad = Math.deg2rad;
highcharts.wrap(
highcharts.seriesTypes.pie.prototype,
"translate",
function (proceed) {
proceed.apply(this, [].slice.call(arguments, 1));
// Do not do this if the chart is not 3D
if (!this.chart.is3d()) {
return;
}
var series = this,
chart = series.chart,
options = chart.options,
seriesOptions = series.options,
depth = seriesOptions.depth || 0,
options3d = options.chart.options3d,
alpha = options3d.alpha,
beta = options3d.beta,
z = seriesOptions.stacking
? (seriesOptions.stack || 0) * depth
: series._i * depth;
z += depth / 2;
if (seriesOptions.grouping !== false) {
z = 0;
}
each(series.data, function (point) { var shapeArgs = point.shapeArgs,
angle;
point.shapeType = "arc3d";
var ran = point.options.h;
shapeArgs.z = z;
shapeArgs.depth = depth * 0.75 + ran;
shapeArgs.alpha = alpha;
shapeArgs.beta = beta;
shapeArgs.center = series.center;
shapeArgs.ran = ran;
angle = (shapeArgs.end + shapeArgs.start) / 2;
point.slicedTranslation = {
translateX: round(
cos(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)
),
translateY: round(
sin(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)
),
};
});
}
);
(function (H) {
H.wrap(
highcharts.SVGRenderer.prototype,
"arc3dPath",
function (proceed) {
// Run original proceed method
var ret = proceed.apply(this, [].slice.call(arguments, 1));
ret.zTop = (ret.zOut + 0.5) / 100;
return ret;
}
);
})(highcharts); highcharts.chart(chart, {
chart: {
animation: false,
backgroundColor: "none",
type: "pie", //饼图
margin: [0, 0, 0, 0],
options3d: {
enabled: true, //使用3d功能
alpha: 58, //延y轴向内的倾斜角度
// beta: 0,
},
events: {
load: function () {
var each = highcharts.each,
points = this.series[0].points;
each(points, function (p, i) {
p.graphic.attr({
translateY: -p.shapeArgs.ran,
});
p.graphic.side1.attr({
translateY: -p.shapeArgs.ran,
});
p.graphic.side2.attr({
translateY: -p.shapeArgs.ran,
});
});
},
},
},
legend: {
enabled: false, // 关闭图例
align: "right", //水平方向位置
verticalAlign: "bottom", //垂直方向位置
layout: "vertical",
x: fontChart(-20),
y: fontChart(30),
symbolWidth: fontChart(10),
symbolHeight: fontChart(10),
symbolRadius: "50%", // 修改成圆
itemMarginBottom: fontChart(8),
useHTML: true,
//labelFormat: '{name}    {y}',
labelFormatter: function () {
return (
// '<div style="width: .3125rem;display: inline-block">' +
this.name +
// ':  </div><div style="color: #00d7da;display: inline-block">' +
this.y
// +"</div>"
);
},
itemStyle: {
color: "#f4f4f6",
fontSize: fontChart(12),
},
},
title: { //主标题
text: ''
},
// subtitle: {//二级标题
// text: "",
// },
plotOptions: {
pie: {
allowPointSelect: false, // 禁用点击
cursor: "pointer",
// depth: fontChart(50), //圆环的高度
showInLegend: true,
size: "50%", // 外圈直径大小
innerSize: 50, // 内圈直径大小
center: ["50%", "50%"],
colors: color,
dataLabels: {
useHTML: true,
enabled: true, //是否显示饼图的线形tip
inside:true,
crookDistance: '100%',
zIndex:999,
distance: 20,
borderColor: '#007acc',
align: "center",
position: "right",
padding: 0,
// format: "{point.name} : {point.y}",
formatter: function() {
if (this.percentage > 0)
return '<b>' + this.point.name + '</b>: ' + this.point.y; // 这里进行判断
},
color: "#ffffff",
x: 2,
style: {
fontSize: '8px',
},
},
},
},
credits: {
enabled: false, // 禁用版权信息
},
series: [
{
type: "pie",
name: "数量",
startAngle:170,
data: dataList,
center:["50%", "50%"]
},
],
});
}

  

vue 实现3D圆环图的更多相关文章

  1. Highcharts 3D柱形图;Highcharts 堆叠3D柱形图;Highcharts 3D饼图;Highcharts 3D圆环图

    Highcharts 3D柱形图 配置 chart.options3d 配置 以下列出了 3D 图的基本配置,设置 chart 的 type 属性为 column,options3d 选项可设置三维效 ...

  2. HighCharts之2D圆环图

    HighCharts之2D圆环图 1.实例源码 Donut.html: <!DOCTYPE html> <html> <head> <meta charset ...

  3. Excel 2010高级应用-圆环图(七)

    Excel 2010高级应用-圆环图(七) 基本操作如下: 1.新建空白Excel文档,并命名为圆环图 2.单击"插入",并找到圆环图图样 3.单击圆环图图样,并在空白文档上生成图 ...

  4. HTML 5 +CSS3 + 原生js 做(雪花全屏飘落 + 3d旋转图)

    原文:HTML 5 +CSS3 + 原生js 做(雪花全屏飘落 + 3d旋转图) 3d旋转图:主要用css3中transform属性中的rotate,translate;以及用来做舞台效果的 pers ...

  5. Echarts4+EchartsGL 3D迁徙图(附源码)

    最近遇到些Echarts迁徙图问题,在实现二维地图的迁徙图后开始开发3D迁徙图,在网上一查,发现3D版本迁徙图资料较少,自己研究并借鉴一些资料后写了一个小demo,希望能帮大家少走些弯路,共同学习. ...

  6. 神奇的AI:将静态图片转为3D动图

    近日我们从外媒获得消息,位于莫斯科的三星AI中心和Skolkovo科学技术研究所的研究人员发表了一篇新论文,详细介绍了从单个静止人像照片生成3D动画人像的创建.与此前能够生成照片般逼真肖像的人工智能A ...

  7. Python培训:绘制饼图或圆环图

    使用pyplot的pie()函数可以快速地绘制饼图或圆环图,pie()函数的语法格式如下所示: 该函数常用参数的含义如下. ·x:表示扇形或楔形的数据. ·explode:表示扇形或楔形离开圆心的距离 ...

  8. Tableau绘制K线图、布林线、圆环图、雷达图

    Tableau绘制K线图.布林线.圆环图.雷达图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. K线图 1.1 导入数据源 1.2 拖拽字段 将[日期]托到列 ...

  9. [python] 基于matplotlib实现圆环图的绘制

    圆环图本质上是一个中间切出一块区域的饼状图.可以使用python和matplotlib库来实现.本文主要介绍基于matplotlib实现圆环图.本文所有代码见:Python-Study-Notes # ...

  10. 基于HTML5实现3D热图Heatmap应用

    Heatmap热图通过众多数据点信息,汇聚成直观可视化颜色效果,热图已广泛被应用于气象预报.医疗成像.机房温度监控等行业,甚至应用于竞技体育领域的数据分析. http://www.hightopo.c ...

随机推荐

  1. GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo

    前言   本篇开始gstreamer的编程学习,先搭建基础的环境,跑通一个基础的Demo对GStreamer编程有个初步的了解.   Demo         GStreamer   GStreame ...

  2. CAD如何使用 “库” 和 “打开文件菜单栏” 和 “项目管理器”

    这个是一个简单的问题,就是库工具栏丢了怎么办? 点击 默认-块-插入-库中的块,这个菜单栏就会恢复了 打开文件菜单栏,有些同学的菜单栏默认是不存在的,需要特殊功能时可以使用命令行MANUBAR使其显现 ...

  3. #ifndef 、 #define 、#endif使用解释

    在C语言程序代码里,看到了这么一段代码: #ifndef __WIFI_CONNECT_H_ #define __WIFI_CONNECT_H_ int WifiConnect(const char ...

  4. 转|java反射方法和使用详解

    概述   反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意个对象,都能够调用它的任意一个方法.在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息.反射是 ...

  5. git 初始化项目、创建本地分支、本地分支与远程分支关联

    在远程没有项目的场景下,可以通过如下步骤创建和关联远程分支: 在Git官网上点击New repository新建项目: 在本地新建一个同名文件(以demo为例),并初始化项目: 在demo目录打开gi ...

  6. Jenkins自动化部署-----持续交付

    前言: 感谢之前带领过我的leader,让我能够知道什么是好的开发方法. 在很早之前就接触过敏捷开发.什么是敏捷开发,简单来说就是让软件可靠地,快速地发布出来的一种开发方法和技巧. 而敏捷开发中有许多 ...

  7. 密码哈希:Bcrypt的魔法与盐值的秘密

    title: 密码哈希:Bcrypt的魔法与盐值的秘密 date: 2025/06/01 16:41:37 updated: 2025/06/01 16:41:37 author: cmdragon ...

  8. Biology 题解

    Biology 题解 题意简述 初始有\(n\)个字符串,有\(m\)个操作,操作分为两种: 插入一个新的字符串,下标递增(\(n+1,n+2,n+3\dots\)). 查询\(k\)个字符串\(x_ ...

  9. Spring扩展接口-FactoryBean

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  10. prometheus 日常配置记录

    通用模糊匹配 irate(node_network_transmit_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m] ...