Coordenado de Matplotlib. Origem do sistema para o canto superior esquerdo
-
20-09-2019 - |
Pergunta
Como posso virar a origem de um gráfico de matplotlib para estar no canto superior esquerdo-em oposição ao padrão inferior esquerdo? Estou usando matplotlib.pylab.plot para produzir o gráfico (embora se houver outra rotina de plotagem que seja mais flexível, entre em contato).
Estou procurando o equivalente ao comando MATLAB: eixo ij;
Além disso, passei algumas horas surfando em ajuda Matplotlib e Google, mas não encontrei uma resposta. Algumas informações sobre onde eu poderia ter procurado a resposta também seriam úteis.
Solução
Para um gráfico de imagem ou contorno, você pode usar a palavra -chave origin = None | 'lower' | 'upper'
E para um gráfico de linha, você pode definir os Ylimits alto para baixo.
from pylab import *
A = arange(25)/25.
A = A.reshape((5,5))
figure()
imshow(A, interpolation='nearest', origin='lower')
figure()
imshow(A, interpolation='nearest')
d = arange(5)
figure()
plot(d)
ylim(5, 0)
show()
Outras dicas
A maneira mais fácil é usar:
plt.gca().invert_yaxis()
Depois de plotar a imagem. Origin
funciona apenas para imshow
.
axis ij
Apenas faz com que o eixo y aumente para baixo em vez de cima, certo? Se sim, então matplotlib.axes.invert_yaxis()
Pode ser tudo o que você precisa - mas não posso testar isso agora.
Se isso não funcionar, eu encontrei uma postagem de correspondência sugerindo que
setp(gca(), 'ylim', reversed(getp(gca(), 'ylim')))
Pode fazer o que você deseja se parecer axis ij
.
A seguir é uma maneira básica de alcançar isso
ax=pylab.gca()
ax.set_ylim(ax.get_ylim()[::-1])
este
plt.ylim(max(plt.ylim()), min(plt.ylim()))
tem uma vantagem sobre isso
plt.gca().invert_yaxis()
E é que, se você estiver no modo interativo e traçar repetidamente o mesmo gráfico (talvez com dados atualizados e com um ponto de interrupção após o gráfico), o eixo Y não continuará invertendo todas as vezes.