Como equalizar as escalas do eixo xey no matplotlib Python?


128

Desejo desenhar linhas em um gráfico quadrado.

As escalas de x-axise y-axisdevem ser as mesmas.

por exemplo, x varia de 0 a 10 e está 10 cm na tela. y também deve variar de 0 a 10 e também deve ter 10 cm.

A forma quadrada tem que ser mantida, mesmo se eu mexer com o tamanho da janela.

Atualmente, meu gráfico é dimensionado junto com o tamanho da janela.

Como posso conseguir isso?

ATUALIZAR:

Tentei o seguinte, mas não funcionou.

plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.axis('equal')

Está funcionando para mim. Você pode postar um exemplo de código inteiro que não funciona? E você pode explicar o que não está funcionando? Você quer apenas a escala de Samen? Ou também o mesmo intervalo?
— joris 01 de

1
@joris basicamente eu quero um gráfico SQUARE fixo. Mesmo que eu maximize a janela, espero que o SQUARE esteja reservado. Minha tela fica larga, depois de maximizar a janela, o gráfico também fica retangular. Quero que ainda seja QUADRADO
— Sibbs Gambling

Novamente, você pode postar um exemplo de código completo. Como a resposta dada deve fazer isso, preserve-a como um quadrado. Não preserve sua largura ou altura, mas preserve sua forma.
— joris 01 de

2
Tente ser um pouco menos abrasivo ao interagir com outras pessoas no SO. Você está recebendo ajuda pela bondade das pessoas, então aja com um pouco menos de direito.
— tacaswell 01 de

para 3d, você precisa fazer um pouco mais de trabalho: stackoverflow.com/questions/13685386/…
— Trevor Boyd Smith

Respostas:


179

Você precisa se aprofundar um pouco mais na API para fazer isso:

from matplotlib import pyplot as plt
plt.plot(range(5))
plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.gca().set_aspect('equal', adjustable='box')
plt.draw()

doc para set_aspect


4
Impressionante! Na verdade, funciona como um encanto. Você poderia me dizer o que plt.plot(range(5))e plt.gca().set_aspect('equal', adjustable='box')fazer, se não se importa? Além disso, percebo que mesmo que não o tenha feito plt.draw(), o enredo ainda aparecerá. Então qual é a utilidade disso?
— Sibbs Gambling

o ploté apenas ter algo para mostrar. Para set_aspectler o link da documentação. O drawobjetivo é garantir que ele seja renderizado.
— tacaswell

1
ter alguns dados falsos para traçar (deveria ter traçado uma linha reta).
— tacaswell

1
@ perfectionm1ng não se preocupe, demorei um pouco para entender o que você estava perguntando.
— tacaswell

1
Existe uma maneira de fazer isso sem precisar especificar exatamente os limites? Eu esperava que houvesse um comando simples para obter um gráfico quadrado com a mesma escala e pontos para ambos os eixos. Obrigado
— Confundido em

70
plt.axis('scaled')

funciona bem para mim.


Também funcionou para mim. Apenas certifique-se de usar isso antes de definir limites / marcações, pois ele será redimensionado automaticamente.
— Andrew

3
Desculpe, plt.axis ('scaled') não funcionou para mim no Python 3.7 e matplotlib - matplotlib == 3.1.0 No entanto, plt.axis ('square') funcionou!
— rishi jain

19

Experimente algo como:

import pylab as p
p.plot(x,y)
p.axis('equal')
p.show()

Isso funciona no meu sistema, talvez você pudesse mostrar uma parte do código em que está trabalhando? Pode ajudar a resolver o problema mais rápido.
— Dman2 01 de

Isso NÃO funciona em geral. Os eixos são iguais, mas o gráfico não é quadrado, a menos que a janela de gráfico também seja quadrada. Testado com Matplotlib 2.0
— divenex

P.axis('equal')parece ser assim P.gca().set_aspect('equal', adjustable='datalim'). Enquanto se adjustable='box', então a trama se torna quadrada.
— Evgeni Sergeev

Eu definitivamente não consigo tirar uma caixa quadrada disso.
— Peter Drake de

pylab está obsoleto
— eric

19

Veja a documentação em plt.axis(). Este:

plt.axis('equal')

não funciona porque altera os limites do eixo para fazer os círculos parecerem circulares. O que você quer é:

plt.axis('square')

Isso cria um gráfico quadrado com eixos iguais.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.