Tôi chỉ đang cố vẽ một bề mặt và đường bao của nó ở dạng 3D, chính xác như trong ví dụ this.Cốt truyện 3D với Matplotlib
Đây là mã tôi đang sử dụng để làm điều đó:
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')
Tuy nhiên, tôi nhận được một hành vi kỳ lạ trong đó một đường viền (zdir=y
) đang được trên bề mặt. Bên cạnh đó, tôi nhận được một đường viền lạ trong z_dir=z
(với một phần còn thiếu):
Tôi đang tự hỏi những gì tôi đang mất tích. Trường vô hướng có thể được tìm thấy here.
Bạn đã thử thay đổi 'zorder' khi vẽ đồ thị? – nicoguaro
Vâng, đó là nỗ lực đầu tiên của tôi, @nicoguaro. – pceccon
Tôi có thể tạo lại điều này trong matplotlib 1.4.0. Một trong những nhà phát triển có thể nhận xét, nhưng tôi nghĩ điều này có liên quan đến vấn đề vẽ đồ họa 3D chung - nếu bạn làm cho con số đó tương tác, bạn có thể thấy rằng thay đổi góc nhìn thay đổi mà các yếu tố được vẽ "trong nền trước". Đối với các vệt hài hước của "phi dữ liệu" trong đường viền xy-plane, nó có thể là một cái gì đó buồn cười xảy ra với "đóng cửa" của một trong những đường nét. Tôi không nghĩ có gì sai với mã của bạn. – Ajean