Matplotlib v0.99 轮廓图:zdir 不起作用

1 投票
3 回答
1789 浏览
提问于 2025-04-16 10:44

我正在尝试绘制一个函数 f(x,y)=(x+2)*y^2,并在 x-y 平面上显示一些等高线。为此,我使用了以下代码:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import axes3d, Axes3D
import pylab as p


fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(0, 2.5, 0.1)
Y = np.arange(0, 2.5, 0.1)
X, Y = np.meshgrid(X, Y)

Z = ((X+2))*(Y**2)
surf = ax.plot_surface(X, Y, Z,rstride=1, cstride=1, alpha=0.3, cmap=cm.jet)
cset=plt.contour(X,Y,Z,zdir='z',offset=0)


ax.clabel(cset, fontsize=9, inline=1)
ax.set_zlim3d(0, 30)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

我的问题是,zdir 这个参数没有起作用,也就是说,等高线显示在了表面上,而不是在 x-y 平面上。

有没有什么建议?谢谢!

3 个回答

0

-> xs 和 ys:这些是 x 轴和 y 轴的坐标。
-> zs:这是 z 轴的值。可以是所有点的一个值,也可以是每个点各自的值。
--> zdir:这个选项用来选择 z 轴的维度(通常是 zs,但也可以是 xs 或 ys)。

2

zdir 是用来定义投影方向的。比如说,zdir='x' 就是沿着 x 轴进行投影。offset 则是用来定义要投影到的平面的位置,这个位置是沿着 zdir 所定义的轴来的。

示例

我猜你想要的是:

cset=plt.contour(X,Y,Z,zdir='z',offset=30)
3

你的代码在我这边运行得很好(使用的是matplotlib 1.0.1)。

在这里输入图片描述

顺便说一下:看起来这个例子是在matplotlib 1.0版本中加入的画廊。也许之前的版本有问题?

撰写回答