【Echarts】使用象形柱状图实现圆柱形柱状图

圆柱形柱状图包括五部分组成,圆柱的顶部、底部、侧面、Y 轴的背景、Y 轴背景顶部。示例图如下:

象形柱状图

象形柱图是可以设置各种具象图形元素(如图片、SVG PathData 等)的柱状图。往往用在信息图中。用于有至少一个类目轴或时间轴的直角坐标系上。 象形柱图可以被想象为:它首先是个柱状图,但是柱状图的柱子并不显示。这些柱子我们称为『基准柱(reference bar)』,根据基准柱来定位和显示各种象形图形(包括图片)。每个象形图形根据基准柱的定位,是通过 symbolPosition、symbolOffset 来调整其于基准柱的相对位置。

圆柱底部

圆柱的底部是一个椭圆,类型为 pictorialBar,通过 symbolSize 设置椭圆长轴和短轴,通过 symbolOffset 设置椭圆的偏移量。代码如下:

js 复制代码
series: [
	{
		data: [150, 230, 224, 218, 135, 147, 260],
		type: "pictorialBar",
		symbolSize: [45, 25],
		symbolOffset: [0, 10],
		z: 12,
	},
];

圆柱 Y 轴高度背景

这里是正常的绘制柱状图,需要添加一个属性 barGap。

barGap

不同系列的柱间距离,为百分比(如 '30%',表示柱子宽度的 30%)。

如果想要两个系列的柱子重叠,可以设置 barGap 为 '-100%'。这在用柱子做背景的时候有用。

在同一坐标系上,此属性会被多个 'bar' 系列共享。此属性应设置于此坐标系中最后一个 'bar' 系列上才会生效,并且是对此坐标系中所有 'bar' 系列生效

这里不需要设置 symbolOffset 和 symbolSize,代码如下:

js 复制代码
series: [
	{
		data: [150, 230, 224, 218, 135, 147, 260],
		type: "bar",
		barWidth: 45,
		barGap: "-100%",
		z: 12,
	},
];

圆柱顶部

圆柱的顶部是一个椭圆,类型为 pictorialBar,通过 symbolSize 设置椭圆长轴和短轴,通过 symbolOffset 设置椭圆的偏移量,与设置圆柱底面不同的是这里需要单独设置 symbolPosition。代码如下:

js 复制代码
series: [
	{
		type: "pictorialBar",
		symbolSize: [45, 25],
		symbolOffset: [0, -10],
		z: 12,
		symbolPosition: "end",
		data: [150, 230, 224, 218, 135, 147, 260],
	},
];

Y 轴背景

Y 轴的背景类型是 bar,这里需要特别注意,这里的 data 和类型为 pictorialBar 的 data 值不同,这里的值要比类型为 bar 的值中的都大,且长度保持一致,代码如下:

js 复制代码
series: [
	{
		type: "bar",
		barWidth: 45,
		barGap: "-100%",
		z: 0,
		itemStyle: {
			color: "#163F7A",
			opacity: 0.7,
		},
		data: [300, 300, 300, 300, 300, 300, 300],
	},
];

Y 轴顶部

Y 轴的顶部同样是一个椭圆,通过 symbolSize 设置椭圆的长轴和短轴、symbolOffset 设置椭圆的偏移量,z 设置不同的层级,这里同样需要设置 symbolPosition,代码如下:

js 复制代码
series: [
	{
		type: "pictorialBar",
		symbolSize: [45, 25],
		symbolOffset: [0, -10],
		z: 12,
		symbolPosition: "end",
		itemStyle: {
			color: "#163F7A",
			opacity: 1,
		},
		data: [300, 300, 300, 300, 300, 300, 300],
	},
];

至此,圆柱形柱状图就完成了,横向的圆柱形柱状图可以通过调整 symbolSize,symbolOffset 来完成。

圆柱形柱状图的本质是基础柱状图和象形柱状图拼接起来的,可以通过调整两者的颜色及透明度来使得圆柱更加立体。

代码地址

stackblitz.com/edit/vitejs...

相关推荐
hemoo11 分钟前
如何让echart的lengend在指定位置换行
javascript·echarts
老前端的功夫11 分钟前
# HTTP缓存:从懵懵懂懂到了如指掌
前端
安卓开发者12 分钟前
Docker与Nginx:现代Web部署的完美二重奏
前端·nginx·docker
Dorian_Ov013 分钟前
GeoPandas+DataFrame实现shapefile文件导入PostGIS数据库
前端·gis
葡萄城技术团队14 分钟前
Vue 生态下前端 Excel 导入导出终极方案:SpreadJS 实战指南
vue.js
哟哟耶耶15 分钟前
Starting again company 03
前端·javascript·vue.js
葡萄城技术团队15 分钟前
SpreadJS 赋能在线 Excel:协同编辑与精细化权限管控的技术实现
前端
Chloe_lll22 分钟前
threejs(七)PBR材质
开发语言·javascript·材质
转转技术团队34 分钟前
转转商品中心微前端升级之路
前端
love530love40 分钟前
【笔记】解决 ComfyUI 安装节点 ComfyUI-Addoor (葵花宝典)后启动报错:No module named ‘ComfyUI-Addoor’
linux·运维·前端·人工智能·windows·笔记·python