簡體   English   中英

matplotlib:在2d圖上投影3d曲面

[英]matplotlib : project 3d surface on 2d plot

在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)

在更通用的情況下,您將需要正確的色階功能以及對色階和色彩圖的一些調整,但這似乎是可行的。

另一個解決方案是使用matplotlib.patches.Polygon繪制每個投影面。

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

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

盡管這似乎並不是您真正需要的,但這是朝着正確方向邁出的一步。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM