Python使用Matplotlib绘制3D条形图的完整指南
本文详细介绍如何使用Python的Matplotlib库绘制3D条形图。通过对比2D多组条形图,展示引入z轴坐标后的视觉优势。重点解析bar3d函数的参数用法,包括x,y,z坐标及长宽高设置,并演示如何配置透明度、标签及阴影效果,实现更具表现力的三维数据展示。
数据导入
虽然Matplotlib支持在单一坐标系中绘制多组条形图,其效果如图所示。

图中蓝色代表中国,橘色代表美国,绿色代表欧盟。从该图表可以直观地观察到三者在2018年至2022年期间的GDP变化趋势。然而,若引入额外的坐标轴,将多组条形图分布于三维坐标系中,视觉效果将更具表现力。
此处仍以中美欧GDP数据为例,具体数值如下表所示,单位为万亿美元。
| 中国 | 美国 | 欧盟 | |
|---|---|---|---|
| 2018 | 13.89 | 20.53 | 15.98 |
| 2019 | 14.28 | 21.38 | 15.69 |
| 2020 | 14.69 | 21.06 | 15.37 |
| 2021 | 17.82 | 23.32 | 17.19 |
| 2022 | 17.96 | 25.46 | 16.64 |
首先,将这些数值写入Python代码中。
import numpy as np
years = np.arange(2018, 2023)
areas = ("PRC", "EU", "USA")
GDPS = {
'PRC': (13.89, 14.28, 14.69, 17.82, 17.96),
'USA': (20.53, 21.38, 21.06, 23.32, 25.46),
'EU': (15.98, 15.69, 15.37, 17.19, 16.64),
}三维条形图
由于需要在三维坐标轴中绘图,第一步是新建一个子坐标图,并指定projection=3d。在绘图时,需给定一个额外的y坐标,具体代码如下。
import matplotlib.pyplot as plt
import numpy as np
ax = plt.subplot(projection='3d')
colors = ['r', 'b', 'g']
yticks = [2, 1, 0]
for i,key in enumerate(areas):
ax.bar(years, GDPS[key],
zs=i, zdir='y', label=key, color=colors[i], alpha=0.8)
plt.yticks([])
plt.legend()
plt.show()其中,设置透明度为0.8,这样可以让图像在表现时更有层次感。通过设置label,对三个地区的颜色进行了标注,效果为

bar3d
上图虽然有了3D坐标轴,但其实每个数据条仍然是二维的,通过bar3d函数,可以绘制更加结实紧固的三维方块图,其绘图参数如下
bar3d(x, y, z, dx, dy, dz, color=None, zsort='average', shade=True, lightsource=None, *args, data=None, **kwargs)
其中,x,y,z是方块图的锚点坐标,dx, dy, dz是方块的长度、宽度和高度。换言之,其绘图逻辑是,先指定其绘图的起始位置,然后按照给定的长宽高绘制长方体。下面的代码就通过bar3d来绘制中美欧的GDP变化
ax = plt.subplot(projection='3d')
dx = dy = np.zeros(5)+0.5
x = years
z = np.zeros_like(x)
for i,key in enumerate(areas):
y = z + i
dz = GDPS[key]
ax.bar3d(x,y,z,dx,dy,dz,
color=colors[i], alpha=0.8, label=key)
plt.yticks([0.5, 1.5, 2.5], areas)
plt.show()这里对y轴坐标重新进行了映射,从而无需使用label也能清晰地看出每组数据所对应的地区,效果如下

bar3d函数中其他参数含义如下:
- zsort z轴排序方案
- shade 当为
True时,会显示3D图的阴影效果 - lightsource 3D条形图的光源
到此这篇关于Python实现绘制3D条形图的示例详解的文章就介绍到这了,更多相关Python绘制3D条形图内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













