matplotlib 在二维图上投影三维曲面

fjaof16o  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(129)

在2D中是否有“Axes3DSubplot.plot_surface”的等效物?我试图在matplotlib中绘制XY平面上的网格投影(所以不是在“3d”模式下)。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Data (wireframe sphere)
theta, phi = np.meshgrid( np.linspace(0, np.pi/2, 10), np.linspace(0, np.pi/2, 10) )

x = np.sin(theta) * np.cos(phi)
y = np.sin(theta) * np.sin(phi)
z = np.cos(theta)

fig = plt.figure()

# Subplot 3D
ax1 = fig.add_subplot(1, 2, 1, projection='3d', aspect='equal')

colors = matplotlib.cm.jet(np.hypot(x,y))

surface = ax1.plot_surface(x, y, z, rstride=1, cstride=1, facecolors = colors, alpha=0.5 )
projection = ax1.plot_surface(0, y, z, rstride=1, cstride=1, facecolors = colors )
projection.set_edgecolor('k')

# Subplot 2D
ax2 = fig.add_subplot(1, 2, 2, aspect='equal')

ax2.plot(y, z, 'k')
ax2.plot(y.T, z.T, 'k')

我试图产生一个类似的结果比:

ax1.plot_surface(0, y, z, rstride=1, cstride=1, facecolors = colors )

但是在2D子图中。我在AxesSubplot的文档中找不到plot_surface的等效值。我唯一能做的就是绘制线框(但不是面部颜色):

ax2.plot(y, z, 'k')
ax2.plot(y.T, z.T, 'k')

我不能上传图像,但基本上,我想把“颜色”在第二个子情节.谢谢,
编辑:@Tim是的,我想,在这种情况下,我设法做到了:

ax2.contourf(y, z, np.hypot(x,y), levels=np.hypot(x,y)[0], cmap=matplotlib.cm.jet)

在一个更一般的情况下,你需要正确的水平函数和一点调整的水平和色彩Map表,但它似乎是可行的。
另一种解决方案是使用matplotlib.patches.Polygon来绘制每个投影面。

jk9hmnmh

jk9hmnmh1#

您可以使用contourf生成彩色2D轮廓:

# Subplot 2D
ax2 = fig.add_subplot(1, 2, 2, aspect='equal')
ax2.contourf(x, y, z, facecolors=colors)

虽然这看起来并不完全是你所需要的,但这是朝着正确方向迈出的一步。

相关问题