使用matplotlib在3D中绘制图像和茎图

0 投票
1 回答
29 浏览
提问于 2025-04-13 12:50

我正在尝试用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()这一部分,想把柱状图放到前面,但结果图看起来是这样的:

h

在这个图中,线条被2D图片遮住了,而我希望它们看起来像是从2D图上冒出来的柱子。

这是我在网上找到的一张随机图片,用来说明我想要实现的效果(用柱子代替柱状图,因为我找不到带有柱状图的例子)。非常感谢。

enter image description here

1 个回答

1

你可以使用 computed_zorder 这个参数来控制这个功能。如果把它设置为 False,那么3D坐标轴就会按照你设置的 zorder 值来显示。默认情况下是 True,这时系统会尝试自动计算应该如何显示。

详细信息可以查看文档 这里

你需要修改的代码示例如下:

fig, ax = plt.subplots(subplot_kw=dict(projection="3d", computed_zorder=False))

这样就会得到:

在这里输入图片描述

撰写回答