使用matplotlib在3D中绘制图像和茎图
我正在尝试用Python制作一个3D图,想在某个高度显示一张图片,并在特定的点上用柱状图表示(简单来说,这张图片就像一个2D地图,而柱状图则代表地图上某个参数的值)。
这是我现在的代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 101)
y = np.linspace(-1, 1, 101)
X, Y = np.meshgrid(x, y)
z = np.exp(-(X**2) - Y**2)
x0 = [-0.5, 0, 0.5]
y0 = [-0.5, 0, 0.5]
z0 = [0.5, 1, 2]
fig, ax = plt.subplots(subplot_kw=dict(projection="3d"))
ax.contourf(
x,
y,
z,
zdir="z",
offset=-0.0,
)
ps = ax.stem(x0, y0, z0)
for p in ps:
p.set_zorder(20)
plt.show()
我添加了set_zorder()
这一部分,想把柱状图放到前面,但结果图看起来是这样的:

在这个图中,线条被2D图片遮住了,而我希望它们看起来像是从2D图上冒出来的柱子。
这是我在网上找到的一张随机图片,用来说明我想要实现的效果(用柱子代替柱状图,因为我找不到带有柱状图的例子)。非常感谢。
1 个回答
1
你可以使用 computed_zorder
这个参数来控制这个功能。如果把它设置为 False
,那么3D坐标轴就会按照你设置的 zorder
值来显示。默认情况下是 True
,这时系统会尝试自动计算应该如何显示。
详细信息可以查看文档 这里。
你需要修改的代码示例如下:
fig, ax = plt.subplots(subplot_kw=dict(projection="3d", computed_zorder=False))
这样就会得到: