我只是試圖在3D中繪製曲面及其輪廓,與this示例中一樣。使用Matplotlib進行3D繪圖
這是我用做它的代碼:其中一個輪廓(zdir=y
)正在表面上
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm
import numpy
def plot_3d_contour(x_dim, y_dim, x_steps, y_steps, scalar_field, file_path):
fig = plt.figure()
x, y = numpy.mgrid[-x_dim/2:x_dim/2:x_steps*1j, -y_dim/2:y_dim/2:y_steps*1j]
v_min = numpy.min(scalar_field)
v_max = nupmy.max(scalar_field)
ax = fig.gca(projection='3d')
cset = ax.contourf(x, y, scalar_field, zdir='z', offset=v_min, cmap=cm.coolwarm)
cset = ax.contourf(x, y, scalar_field, zdir='x', offset=-x_dim/2-1, cmap=cm.coolwarm)
cset = ax.contourf(x, y, scalar_field, zdir='y', offset=y_dim/2+1, cmap=cm.coolwarm)
ax.plot_surface(x, y, scalar_field, rstride=10, cstride=10, alpha=0.3)
ax.set_xlabel('X')
ax.set_xlim(-x_dim/2-1, x_dim/2+1)
ax.set_ylabel('Y')
ax.set_ylim(-y_dim/2-1, y_dim/2+1)
ax.set_zlabel('Z')
ax.set_zlim(v_min, v_max)
plt.savefig(file_path + '.jpg')
plt.close()
scalar_field = numpy.loadtxt('../scalar_field', delimiter=",")
plot_3d_contour(12, 12, 100, 100, scalar_field, 'scalar_field3D')
不過,我得到一個怪異的行爲。此外,我得到的z_dir=z
一個奇怪的輪廓(有部分缺失):
我不知道我錯過了什麼。標量字段可以找到here。
你試圖在繪圖時更改'zorder'嗎? – nicoguaro
是的,那是我第一次嘗試@nicoguaro。 – pceccon
我可以在matplotlib 1.4.0中重現這一點。其中一位開發人員可能會發表評論,但我認爲這與一般的3D繪圖問題有關 - 如果您將該圖形交互式顯示,則可以看到,更改視角會更改哪些元素在「前景」中繪製。至於xy平面輪廓中的「非數據」的有趣連勝,可能是某個輪廓的「關閉」發生了一些有趣的事情。我不認爲你的代碼有什麼問題。 – Ajean