Gráficos 2D não estão alinhados com as paredes do eixo 3D no python mplot3D
Estou tentando plotar dados 2D em um eixo 3D. Eu tenho a forma 3D trabalhando usandoax.plot_surface
mas não consigo fazer com que os dados 2D fiquem nivelados contra as paredes do eixo usandoax.plot
.
Aqui está um código de exemplo simplificado mostrando o problema que estou tendo com os dados 2D:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Generate Example Data
x = [0.04,0,-0.04]
y = [0.04,0,-0.04]
z = [0.04,0,-0.04]
# Start plotting environment
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Plot 3 lines positioned against the axes "walls"
ax.plot(x,y,-0.08,zdir='z',c='r')
ax.plot(x,z, 0.08,zdir='y',c='g')
ax.plot(y,z,-0.08,zdir='x',c='b')
# Label each axis
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# Set each axis limits
ax.set_xlim([-0.08,0.08])
ax.set_ylim([-0.08,0.08])
ax.set_zlim([-0.08,0.08])
# Equally stretch all axes
ax.set_aspect("equal")
# Set plot size for saving to disk
plt.gcf().set_size_inches(11.7,8.3)
# Save figure in .eps and .png format
plt.savefig('test.eps', format='eps')
plt.savefig('test.png', format='png', dpi=300)
# Display figure
plt.show()
Isso fornece o seguinte resultado, do qual você poderá ver que as extremidades das linhas de dados não ficam nas linhas do eixo (ou seja, não se alinham com 0,04 e -0,04):
Ao explorar interativamente o enredo, determinei que alterar os 0,08 noax.plot
chamadas, com uma magnitude de 0,083 (mantendo os sinais relevantes), permite que as parcelas se ajustem muito mais horizontalmente à parede.
Minha interpretação disso é que a plotagem não está forçando meus limites de eixo, o que parece evidente na plotagem, observando os espaçamentos em que os eixos se encontram, mas usandoax.get_xlim()
etc, mostra os valores que defini, então estou perdendo alguma coisa.
Alguma idéia de como posso fazer com que essas parcelas fiquem encostadas nas paredes?
Muito Obrigado,
Tim
Editar:
Eu também tentei definir os limites do eixo usando
ax.set_xlim3d(-0.08,0.08)
ax.set_ylim3d(-0.08,0.08)
ax.set_zlim3d(-0.08,0.08)
e
ax.set_xlim3d([-0.08,0.08])
ax.set_ylim3d([-0.08,0.08])
ax.set_zlim3d([-0.08,0.08])
sem sorte.
Definitivamente, estou inclinado a atribuir isso a um problema de preenchimento em que os eixos se encontram, mas não consigo encontrar nenhuma documentação sobre isso. ie Estou definindo a posição da plotagem para -0,08 e o limite do eixo para -0,08, mas a plotagem está adicionando um pouco de preenchimento no final para estabelecer limites entre -0,082 e -0,083.
Desejo remover o preenchimento ou obter o valor do preenchimento para que eu possa inseri-lo noax.plot
comando.
Edit2:
Outra pessoa que encontrou esse problema, mas não teve o problema resolvidoAlterando a posição das paredes da grade em uma figura do mplot3d