Ajuste de la relación de aspecto de la trama 3D

Estoy tratando de trazar una imagen 3D del fondo marino a partir de los datos de un sonar ejecutado en una porción de 500 m por 40 m del fondo marino. Estoy usando matplotlib / mplot3d con Axes3D y quiero poder cambiar la relación de aspecto de los ejes para que los ejes x e y estén a escala. Un ejemplo de script con datos generados en lugar de los datos reales es:

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

Y la imagen de salida de este script:

Ahora me gustaría cambiarlo para que 1 metro en el eje a lo largo de la trayectoria (x) sea igual a 1 metro en el eje de rango (y) (o tal vez una relación diferente según los tamaños relativos involucrados). También me gustaría establecer la relación del eje z, de nuevo no necesariamente a 1: 1 debido a los tamaños relativos en los datos, pero así el eje es más pequeño que el gráfico actual.

He intentado construir y usaresta rama de matplotlib, siguiendo el script de ejemplo eneste mensaje de la lista de correo, pero añadiendo elax.pbaspect = [1.0, 1.0, 0.25] La línea a mi script (después de haber desinstalado la versión 'estándar' de matplotlib para garantizar que se usara la versión personalizada) no hizo ninguna diferencia en la imagen generada.

Editar: Así que la salida deseada sería algo como la siguiente imagen (editada crudamente con Inkscape). En este caso, no he establecido una proporción de 1: 1 en los ejes x / y porque se ve ridículamente delgada, pero la he extendido para que no quede cuadrada como en la salida original.

Respuestas a la pregunta(3)

Su respuesta a la pregunta