Definir o formato do gráfico 3D

Eu estou tentando traçar uma imagem 3D do fundo do mar a partir dos dados de um sonar executado em uma porção de 500m por 40m do fundo do mar. Estou usando o matplotlib / mplot3d com o Axes3D e quero poder alterar a relação de aspecto dos eixos para que o eixo x & y seja dimensionado. Um script de exemplo com dados gerados, em vez dos dados reais, é:

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

E a imagem de saída deste script:

Agora gostaria de alterá-lo para que 1 metro no eixo longitudinal (x) seja o mesmo que 1 metro no eixo (y) (ou talvez uma relação diferente dependendo dos tamanhos relativos envolvidos). Eu também gostaria de definir a proporção do eixo z, novamente não necessariamente para 1: 1 devido aos tamanhos relativos nos dados, mas o eixo é menor que o gráfico atual.

Eu tentei construir e usareste ramo de matplotlib, seguindo o script de exemplo emesta mensagem da lista de discussão, mas adicionando oax.pbaspect = [1.0, 1.0, 0.25] linha para o meu script (tendo desinstalado a versão 'padrão' do matplotlib para garantir que a versão personalizada estava sendo usada) não fez nenhuma diferença na imagem gerada.

Editar: Assim, a saída desejada seria algo como a seguinte imagem (grosseiramente editada com o Inkscape). Neste caso, não defini uma proporção de 1: 1 nos eixos x / y porque isso parece ridiculamente fino, mas eu o espalhei de modo que não seja quadrado como na saída original.

questionAnswers(3)

yourAnswerToTheQuestion