Ustawianie proporcji wykresu 3D

Próbuję wykreślić trójwymiarowy obraz dna morskiego z danych przebiegu sonaru na 500 m przez 40 m części dna morskiego. Używam matplotlib / mplot3d z Axes3D i chcę mieć możliwość zmiany proporcji osi, tak aby oś x i y były skalowane. Przykładowy skrypt z wygenerowanymi danymi zamiast rzeczywistych danych to:

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

I obraz wyjściowy z tego skryptu:

Teraz chciałbym to zmienić, aby 1 metr w osi wzdłużnej (x) był taki sam jak 1 metr w osi zakresu (y) (a może inny stosunek w zależności od względnych rozmiarów). Chciałbym również ustawić stosunek osi Z, ponownie niekoniecznie do 1: 1 ze względu na względne rozmiary danych, ale tak, że oś jest mniejsza niż bieżący wykres.

Próbowałem budować i używaćta gałąź matplotlib, postępując według przykładowego skryptu wta wiadomość z listy mailingowej, ale dodającax.pbaspect = [1.0, 1.0, 0.25] line do mojego skryptu (po odinstalowaniu „standardowej” wersji matplotlib, aby zapewnić użycie niestandardowej wersji), nie miało to wpływu na generowany obraz.

Edytować: Tak więc pożądanym wyjściem będzie coś podobnego do poniższego (z grubsza edytowanego za pomocą obrazu Inkscape). W tym przypadku nie ustawiłem stosunku 1: 1 na osiach x / y, ponieważ wygląda to śmiesznie cienko, ale rozłożyłem go tak, aby nie był kwadratowy jak na oryginalnym wyjściu.

questionAnswers(3)

yourAnswerToTheQuestion