Ich versuche einfach, eine Oberfläche und ihre Kontur in 3D, genau wie in this Beispiel zu plotten.3D-Plot mit Matplotlib
Dies ist der Code verwende ich es zu tun:
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')
Aber ich bin immer ein seltsames Verhalten, bei dem die eine Kontur (zdir=y
) über die Oberfläche zu sein. Außerdem bin ich eine seltsame Kontur in z_dir=z
bekommen (mit einem Abschnitt fehlt):
Ich frage mich, was mir fehlt. Das Skalarfeld kann here gefunden werden.
Haben Sie beim Plotten versucht, 'zorder' zu ändern? – nicoguaro
Ja, das war mein erster Versuch, @nicoguaro. – pceccon
Ich kann dies in Matplotlib 1.4.0 reproduzieren. Einer der Devs mag kommentieren, aber ich denke, das hängt mit allgemeinen 3D-Plotproblemen zusammen - wenn Sie diese Figur interaktiv machen, können Sie sehen, dass das Ändern des Ansichtswinkels ändert, welche Elemente "im Vordergrund" gezeichnet werden. Was den witzigen Streifen von "Nicht-Daten" in der xy-Ebenen-Kontur betrifft, kann es etwas Lustiges sein, das mit dem "Schließen" einer der Konturen passiert. Ich glaube nicht, dass mit deinem Code etwas nicht stimmt. – Ajean