echarts实现3D效果柱状图

echarts3D效果柱状图的实现

这个太难了,我花了两天终于调成我想要的效果啦~,开心,要是官网上有例子就好了,太难调了。不过功夫不负有心人,话不多说,看代码吧

效果图:

在这里插入图片描述

html代码

<div id="jczy_bar" :canvas="3D" style="height: 240px;width:600px;margin: 0 auto;"></div>

JS代码

// 调用
var serveTBar = echarts.init(document.getElementById('jczy_bar'));
serveTBar.setOption(getEcharts3DBar();

 const data = [1360,1320, 732, 701];
 const data2 = [500,800, 900, 360];
 const sideData = data.map(item => item + 90);
 const sideData2 = data.map(item => item + 90);
function getEcharts3DBar () {
			 var colorArr = ["#0C628C", "#3887D5", "#2570BB"];
			 var color = {
				 type: "linear",
				 x: 0,
				 x2: 1,
				 y: 0,
				 y2: 0,
				 colorStops:  [
					 {
						 offset: 0,
						 color: colorArr[0],
					 },
					 {
						 offset: 0.5,
						 color: colorArr[0],
					 },
					 {
						 offset: 0.5,
						 color: colorArr[1],
					 },
					 {
						 offset: 1,
						 color: colorArr[1],
					 },
				 ],
			 };
			 var barWidth = 30;
			 var option = {
				 tooltip: {
					 trigger: 'axis',
					 formatter: function (params) {
						 var str = params[0].name + ":";
						 params.filter(function (item) {
							 if (item.componentSubType == "bar") {
								 str += "<br/>" + item.seriesName + ":" + item.value;
							 }
						 });
						 return str;
					 },
				 },
				 grid:{
					 x:'7%',
					 x2:'0%',
					 y:'15%',
					 y2:'15%',
				 },
				 legend: {
					 show:false,
					 data:['本期','同期'],
					 textStyle:{
						 color:'#fff',
						 fontSize:'20'
					 }
				 },
				 xAxis: {
					 data: ['毕节市','七星关区','大方县','黔西县'],
					 //坐标轴
					 axisLine :{
						 show:true,
						 lineStyle: {
							 width: 1,
							 color: '#214776'
						 },
						 textStyle:{
							 color:'#fff',
							 fontSize:'10'
						 }
					 },
					 type : 'category',
					 axisLabel :{
						 textStyle:{
							 color: '#C5DFFB',
							 fontWeight: 500,
							 fontSize:'14'
						 }
					 },
					 axisTick  :{
						 textStyle:{
							 color:'#fff',
							 fontSize:'16'
						 },
						 show: false,
					 },
					 splitLine: {show:false}
				 },
				 yAxis: {
					 type : 'value',
					 //坐标轴
					 axisLine :{
						 show:true,
						 lineStyle: {
							 width: 1,
							 color: '#214776'
						 },
						 textStyle:{
							 color:'#fff',
							 fontSize:'10'
						 }
					 },
					 axisTick  :{
						 show:false
					 },
					 //坐标值标注
					 axisLabel: {
						 show: true,
						 textStyle: {
							 color: '#C5DFFB',
						 }
					 },
					 //分格线
					 splitLine: {
						 lineStyle: {
							 color: '#13365f'
						 }
					 }
				 },
				 series: [
					 {
						 z: 1,
						 name: '本期',
						 type: "bar",
						 barWidth: barWidth,
						 barGap: "0%",
						 data: data,
						 itemStyle: {
							 normal: {
								 color: color
							 },
						 },
					 },
					 {
						 z: 2,
						 name: '本期',
						 type: "pictorialBar",
						 data: sideData,
						 symbol: "diamond",
						 symbolOffset: ["-75%", "50%"],
						 symbolSize: [barWidth, 10],
						 itemStyle: {
							 normal: {
								 color: color
							 },
						 },
						 tooltip: {
							 show: false,
						 },
					 },
					 {
						 z: 3,
						 name: '本期',
						 type: "pictorialBar",
						 symbolPosition: "end",
						 data: data,
						 symbol: "diamond",
						 symbolOffset: ["-75%", "-50%"],
						 symbolSize: [barWidth - 4, (10 * (barWidth - 4)) / barWidth],
						 itemStyle: {
							 normal: {
								 borderWidth: 2,
								 color: colorArr[2]
							 },
						 },
						 tooltip: {
							 show: false,
						 },
					 },
					 {
						 z: 1,
						 name: '同期',
						 type: "bar",
						 barWidth: barWidth,
						 barGap: "50%",
						 data: data2,
						 itemStyle: {
							 normal: {
								 color: color
							 },
						 },
					 },
					 {
						 z: 2,
						 name: '同期',
						 type: "pictorialBar",
						 data: sideData2,
						 symbol: "diamond",
						 symbolOffset: ["75%", "50%"],
						 symbolSize: [barWidth, 10],
						 itemStyle: {
							 normal: {
								 color: color
							 },
						 },
						 tooltip: {
							 show: false,
						 },
					 },
					 {
						 z: 3,
						 name: '同期',
						 type: "pictorialBar",
						 symbolPosition: "end",
						 data: data2,
						 symbol: "diamond",
						 symbolOffset: ["75%", "-50%"],
						 symbolSize: [barWidth - 4, (10 * (barWidth - 4)) / barWidth],
						 itemStyle: {
							 normal: {
								 borderWidth: 2,
								 color: colorArr[2]
							 },
						 },
						 tooltip: {
							 show: false,
						 },
					 },
				 ],
			 };
			 return option;
		 }

提示:
1、柱状图的柱的宽barWidth给了一个固定的值30,如果改动这个值时柱子形状变形了,只需要调整series每一个对象中的symbolOffset的值;
2、这个是双柱状图,series数组中前3个元素为 “本期” 柱状图,后面三个为 “同期” 柱状图。
3、每个柱子都由上中下三部分组成,因此series需要定义的元素较多。对于 “本期” 柱状图来说series[0]为柱子的主体部分,series[1]为柱子的底部,series[2]为柱子的顶部,以此类推。
4、为了达到整体性的效果,每个柱状图的三部分颜色需要达到统一。

您学废了吗?

Echarts 是一个非常流行的数据可视化库,支持多种图表类型。在 Echarts 中,3D 圆柱柱状图可以使用柱状图(bar)系列,同时设置 3D 属性即可实现。 以下是一个简单的示例代码: ```javascript // 初始化echarts实例 var myChart = echarts.init(document.getElementById('myChart')); // 指定图表的配置项和数据 var option = { tooltip: {}, visualMap: { show: false, dimension: 2, min: 0, max: 100, inRange: { color: ['#d94e5d','#eac736','#50a3ba'].reverse() } }, xAxis3D: { type: 'category', data: ['Apple', 'Samsung', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo'] }, yAxis3D: { type: 'value' }, zAxis3D: { type: 'category', data: ['Q1', 'Q2', 'Q3', 'Q4'] }, grid3D: { boxWidth: 200, boxDepth: 80, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.3 } } }, series: [{ type: 'bar3D', data: [ [0, 0, 78], [1, 0, 60], [2, 0, 85], [3, 0, 93], [4, 0, 82], [5, 0, 86], [0, 1, 58], [1, 1, 75], [2, 1, 86], [3, 1, 69], [4, 1, 91], [5, 1, 92], [0, 2, 88], [1, 2, 76], [2, 2, 67], [3, 2, 78], [4, 2, 93], [5, 2, 92], [0, 3, 92], [1, 3, 79], [2, 3, 88], [3, 3, 93], [4, 3, 81], [5, 3, 76] ], shading: 'lambert', label: { show: true, textStyle: { fontSize: 16, borderWidth: 1 } }, itemStyle: { opacity: 0.8 } }] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); ``` 在这段代码中,我们使用了 Echarts 的 bar3D 系列,通过设置 x、y、z 轴数据来创建 3D 圆柱柱状图。同时,我们还设置了 grid3D 属性,来控制图表的 3D 效果。 以上是一个简单的实现,你可以根据自己的需求来设置不同的参数和属性,来达到更好的可视化效果
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值