有人知道这个用啥做的吗,hecharts,还是antv之类的
hecharts只有这样的图
提供代码或者图片,可以加酬金
有人知道这个用啥做的吗,hecharts,还是antv之类的
提供代码或者图片,可以加酬金
收起
当前问题酬金
¥ 15 (您已提供 ¥ 20, 还可追加 ¥ 485)
支付方式
扫码支付
用hecharts吧,我做了一个类似的,你加个圆圈,倾斜一下角度应该就可以了。
用百度的echarts啊
就是个饼图呀,很多方法
有前端代码吗?可以看一下前端代码就能看出来用什么框架写的。
echarts
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [
{
name: '访问来源',
type: 'pie',
radius: '50%',
data: [
{value: 1048, name: '搜索引擎'},
{value: 735, name: '直接访问'},
{value: 580, name: '邮件营销'},
{value: 484, name: '联盟广告'},
{value: 300, name: '视频广告'}
],
label: {
show: true,
formatter: function(params) {
if (params.value !== 0) {
return params.name + ': ' + params.value;
}
}
},
labelLine: {
show: false
},
padding: [20, 30, 20, 30] // 设置标签与扇区的距离
}
]
};
myChart.setOption(option);
使用 Three.js 创建简单的3D饼图
<!DOCTYPE html>
<html>
<head>
<title>3D Pie Chart with Three.js</title>
<style>
body { margin: 0; }
</style>
</head>
<body>
<!-- 引入 Three.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
<script>
// 创建场景
var scene = new THREE.Scene();
// 创建相机
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
// 创建渲染器
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// 创建3D饼图的几何体
var geometry = new THREE.PieGeometry(1, 1, 0, Math.PI * 2, 0, Math.PI * 2);
var material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
var pieChart = new THREE.Mesh(geometry, material);
scene.add(pieChart);
// 渲染循环
var animate = function () {
requestAnimationFrame(animate);
// 旋转3D饼图
pieChart.rotation.x += 0.005;
pieChart.rotation.y += 0.005;
renderer.render(scene, camera);
};
animate();
</script>
</body>
</html>
highcharts可以实现
getChart(echartData) {
let _width = parseInt($('#jclxChart').width());
let _pieWidth = (_width * 40) / 100;
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);
let highOption = {
lang: {
noData: '暂无数据' // 这是会显示在页面上的问题。默认样式是垂直居中
},
noData: {
// 下面写的是有默认值的数据,详情见官网
attr: {}, //Object,没有数据标签的 SVG 属性集合
position: {
x: 0,
y: 0,
align: 'center',
verticalAlign: 'middle'
},
style: {
fontSize: '14px',
fontWeight: 'bold',
color: '#fff'
},
useHTML: false
},
chart: {
animation: false,
backgroundColor: 'none',
type: 'pie', //饼图
// plotBackgroundImage: highchartBg,
options3d: {
enabled: true, //使用3d功能
alpha: 65, //延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,
useHTML: true,
labelFormatter: function () {
return '<div style="width: 60px;display: inline-block;font-size: 12px">' + this.name + '</div><div style="width: 35px;font-size: 12px">' + this.bfb + '%</div>';
},
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
itemMarginTop: 5,
itemStyle: {
color: '#fff',
fontSize: 12
},
itemHoverStyle: {
color: '#fff'
}
},
title: {
text: ''
},
colors: ['#00d7e9', '#00a8ff', 'rgb(19,220,182)'],
plotOptions: {
pie: {
size: _pieWidth,
innerSize: 0,
depth: 5,
startAngle: 90,
dataLabels: {
useHTML: true,
enabled: true, //是否显示饼图的线形tip
distance: 3,
padding: 0,
borderColor: '#007acc',
align: 'center',
// verticalAlign: 'top',
position: 'right',
color: '#ffffff',
style: {
textOutline: 'none',
fontSize: 12
},
formatter: function () {
return '<div style="width: auto;">' + '<div style="width: auto;font-size: 12px;color:#7dedff">' + this.key + "<div style='margin-left:10px'>" + this.y + '亩</div>' + "<div style='margin-left:10px'>" + this.percentage.toFixed(2) + '%</div>' + '</div></div>';
}
},
showInLegend: true,
// 关闭鼠标跟踪,对应的提示框、点击事件会失效
enableMouseTracking: false,
opacity: 1,
point: {
events: {
legendItemClick: function (e) {
return false; // 直接 return false 即可禁用图例点击事件(实现点击图例后,不能再默认地显示隐藏当前图例在图表里的对应数据)
}
}
}
}
},
credits: {
enabled: false // 禁用版权信息
},
series: [
{
type: 'pie',
name: '申报状态',
borderWidth: 0,
data: echartData
}
]
};
Highcharts.chart('jclxChart', highOption);
}
看下百度的ECharts。
可以用ECharts生成啊,ECharts 是一个使用 JavaScript 开发的,开源的可视化库,它可以生成多种图形,包括 3D 饼图。
结合GPT给出回答如下请题主参考
针对您的需求,我给出以下建议:
以下是一个简单的Three.js 3D饼图案例:
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Three.js Pie Chart</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
</head>
<body>
<script>
// Set up the scene, camera, and renderer
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
const renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
// Create the pie chart data
const pieData = [
{ value: 30, color: 0xff0000 },
{ value: 20, color: 0x00ff00 },
{ value: 50, color: 0x0000ff },
];
// Create the pie chart
let startAngle = 0;
const center = new THREE.Vector3(0, 0, 0);
const radius = 5;
for (let i = 0; i < pieData.length; i++) {
const segment = createPieSegment(center, radius, startAngle, startAngle + pieData[i].value * Math.PI / 50, pieData[i].color);
scene.add(segment);
startAngle += pieData[i].value * Math.PI / 50;
}
// Create a single pie chart segment
function createPieSegment(center, radius, startAngle, endAngle, color) {
const geometry = new THREE.ShapeGeometry(createPieShape(radius, startAngle, endAngle));
const material = new THREE.MeshBasicMaterial( { color: color } );
const mesh = new THREE.Mesh( geometry, material );
mesh.position.copy(center);
mesh.rotation.x = Math.PI / 2;
return mesh;
}
// Create a single pie chart segment shape
function createPieShape(radius, startAngle, endAngle) {
const shape = new THREE.Shape();
shape.moveTo(0, 0);
shape.arc(0, 0, radius, startAngle, endAngle);
shape.lineTo(0, 0);
return shape;
}
// Set up the camera position
camera.position.z = 10;
// Render the scene
function animate() {
requestAnimationFrame( animate );
renderer.render( scene, camera );
}
animate();
</script>
</body>
</html>
以下是一个ECharts 3D饼图案例:
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ECharts 3D Pie Chart</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.1.0/dist/echarts.min.js"></script>
</head>
<body>
<div id="chart" style="width: 600px; height: 400px;"></div>
<script>
// Initialize the chart
const chart = echarts.init(document.getElementById('chart'));
// Set the chart options
const options = {
tooltip: {
trigger: 'item',
formatter: '{b} : {c} ({d}%)'
},
series: [
{
type: 'pie',
data: [
{ value: 30, name: 'Red' },
{ value: 20, name: 'Green' },
{ value: 50, name: 'Blue' },
],
label: {
show: true,
position: 'outside',
formatter: '{b}: {d}%'
},
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
},
normal: {
opacity: 0.7,
width: 10,
height: 10,
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
},
},
animationType: 'scale',
animationEasing: 'elasticOut',
animationDelay: function(idx) {
return Math.random() * 200;
},
}
]
};
// Render the chart
chart.setOption(options);
</script>
</body>
</html>
以上两个案例都可以满足您的需求,具体选择哪种方式取决于您的具体需求和技能水平。
【分享个轮播的3D饼图,分别用Echarts和HighCharts实现 - CSDN App】http://t.csdn.cn/ZUeZU
引用 皆我百晓生 小程序回应内容作答:
有许多技术可以实现前端的3D饼图。以下是国内常用的一些技术和框架:
Three.js:Three.js作为一个流行的JavaScript 3D图形库,在国内也非常常见。它具有强大的渲染能力和丰富的图形效果选项。
echarts-gl:echarts-gl是国内著名的数据可视化库 echarts 的扩展,专注于3D图形和地理信息可视化。它可以用来创建各种类型的3D图表,包括饼图。
LayaAir:LayaAir是国内知名的HTML5游戏引擎,也用于其他图形应用程序。它提供了完整的2D和3D渲染能力,适用于创建各种类型的3D图形,包括饼图。
AntV:AntV是蚂蚁金服推出的数据可视化解决方案之一,提供了一整套可视化组件和工具。G2Plot 是 AntV 的一个图表库,支持诸多图表类型,包括3D饼图。
以上这些技术和框架,能够帮助您实现前端的3D饼图。根据您的具体需求和技术偏好,选择适合的技术,并查阅其官方文档和示例代码来学习如何创建3D饼图。
报告相同问题?