Estou tentando fazer um gráfico quadrado (usando imshow), ou seja, proporção de 1: 1, mas não consigo. Nenhum desses funciona:
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
Parece que as ligações estão sendo simplesmente ignoradas (um problema que freqüentemente pareço ter com matplotlib).
python
matplotlib
jtlz2
fonte
fonte
ax.axis('equal')
, por acaso? Como todos disseram, o que você fez deve funcionar, masax.axis
pode ser outro caminho para tentar uma solução alternativa.Respostas:
Terceira vez o charme. Meu palpite é que isso é um bug e a resposta de Zhenya sugere que ele foi corrigido na versão mais recente. Tenho a versão 0.99.1.1 e criei a seguinte solução:
Este é 'force.png':
Abaixo estão minhas tentativas infrutíferas, mas esperançosamente informativas.
Segunda Resposta:
Minha 'resposta original' abaixo é exagerada, pois faz algo semelhante a
axes.set_aspect()
. Eu acho que você quer usaraxes.set_aspect('auto')
. Não entendo porque é o caso, mas produz um gráfico de imagem quadrada para mim, por exemplo este script:Produz um gráfico de imagem com proporção de aspecto 'igual': e um com proporção de aspecto 'automático':
O código fornecido abaixo na 'resposta original' fornece um ponto de partida para uma proporção de aspecto explicitamente controlada, mas parece ser ignorado quando um imshow é chamado.
Resposta Original:
Aqui está um exemplo de rotina que ajustará os parâmetros do subplot para que você obtenha a proporção de aspecto desejada:
Isso produz uma figura como esta:
Eu posso imaginar se você tiver vários subplots dentro da figura, você gostaria de incluir o número de yex subplots como parâmetros de palavra-chave (padronizando para 1 cada) para a rotina fornecida. Então, usando esses números e as palavras
hspace
-wspace
chave e , você pode fazer com que todos os subtramas tenham a proporção correta.fonte
get_images
é uma lista vazia (como aconteceria comax.plot([0,1],[0,2])
, você pode usarget_xlim
eget_ylim
Qual é a
matplotlib
versão que você está executando? Recentemente, tive que atualizar para1.1.0
, e com ele,add_subplot(111,aspect='equal')
funciona para mim.fonte
matplotlib
versão2.0.2
.jupyter notebook
versão5.0.0
. Obrigado.Depois de muitos anos de sucesso com as respostas acima, descobri que isso não funcionava novamente - mas encontrei uma solução de trabalho para subtramas em
https://jdhao.github.io/2017/06/03/change-aspect-ratio-in-mpl
Com todo o crédito, é claro, do autor acima (que talvez prefira postar aqui), as linhas relevantes são:
O link também tem uma explicação muito clara dos diferentes sistemas de coordenadas usados pelo matplotlib.
Obrigado por todas as ótimas respostas recebidas - especialmente a de @ Yann, que continuará sendo a vencedora.
fonte
você deve tentar com figaspect. Funciona para mim. Dos documentos:
Edit: Não tenho certeza do que você está procurando. O código acima muda a tela (o tamanho do gráfico). Se você quiser alterar o tamanho da janela matplotlib da figura, use:
isso produz uma janela de 5x1 (largura x altura).
fonte
Essa resposta é baseada na resposta de Yann. Ele definirá a proporção de aspecto para gráficos lineares ou log-log. Usei informações adicionais de https://stackoverflow.com/a/16290035/2966723 para testar se os eixos são em escala logarítmica.
Obviamente, você pode usar qualquer versão
log
que quiser, eu useiscipy
, masnumpy
oumath
deveria estar bem.fonte