Einstellen des Seitenverhältnisses der 3D-Darstellung

Ich versuche, ein 3D-Bild des Meeresbodens aus den Daten eines Sonars zu zeichnen, das über einen 500 x 40 m großen Teil des Meeresbodens verläuft. Ich verwende matplotlib / mplot3d mit Axes3D und möchte das Seitenverhältnis der Achsen so ändern können, dass die X- und Y-Achse skaliert. Ein Beispielskript mit generierten Daten anstelle der realen Daten ist:

<code>import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# Create figure.
fig = plt.figure()
ax = fig.gca(projection = '3d')

# Generate example data.
R, Y = np.meshgrid(np.arange(0, 500, 0.5), np.arange(0, 40, 0.5))
z = 0.1 * np.abs(np.sin(R/40) * np.sin(Y/6))

# Plot the data.
surf = ax.plot_surface(R, Y, z, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

# Set viewpoint.
ax.azim = -160
ax.elev = 30

# Label axes.
ax.set_xlabel('Along track (m)')
ax.set_ylabel('Range (m)')
ax.set_zlabel('Height (m)')

# Save image.
fig.savefig('data.png')
</code>

Und das Ausgabebild aus diesem Skript:

Jetzt möchte ich es so ändern, dass 1 Meter in der Längsachse (x) gleich 1 Meter in der Bereichsachse (y) ist (oder möglicherweise ein anderes Verhältnis, abhängig von den jeweiligen Größen). Ich würde auch gerne das Verhältnis der z-Achse einstellen, wieder nicht unbedingt auf 1: 1 aufgrund der relativen Größen in den Daten, aber so ist die Achse kleiner als das aktuelle Diagramm.

Ich habe versucht zu bauen und zu benutzendieser Zweig der MatplotlibFolgen Sie dem Beispielskript inDiese Nachricht aus der Mailingliste, aber das Hinzufügenax.pbaspect = [1.0, 1.0, 0.25] Die Zeile zu meinem Skript (nachdem die 'Standard'-Version von matplotlib deinstalliert wurde, um sicherzustellen, dass die benutzerdefinierte Version verwendet wurde) machte keinen Unterschied im generierten Image.

Bearbeiten: Die gewünschte Ausgabe wäre also etwa das folgende (grob mit Inkscape bearbeitete) Bild. In diesem Fall habe ich kein 1: 1-Verhältnis auf den x / y-Achsen festgelegt, weil das lächerlich dünn aussieht, aber ich habe es so verteilt, dass es nicht quadratisch ist wie bei der ursprünglichen Ausgabe.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage