definindo o limite do eixo y no matplotlib

416

Preciso de ajuda para definir os limites do eixo y no matplotlib. Aqui está o código que eu tentei, sem êxito.

import matplotlib.pyplot as plt

plt.figure(1, figsize = (8.5,11))
plt.suptitle('plot title')
ax = []
aPlot = plt.subplot(321, axisbg = 'w', title = "Year 1")
ax.append(aPlot)
plt.plot(paramValues,plotDataPrice[0], color = '#340B8C', 
     marker = 'o', ms = 5, mfc = '#EB1717')
plt.xticks(paramValues)
plt.ylabel('Average Price')
plt.xlabel('Mark-up')
plt.grid(True)
plt.ylim((25,250))

Com os dados que tenho para esse gráfico, obtenho limites no eixo y de 20 e 200. No entanto, quero os limites 20 e 250.

Curious2learn
fonte
1
Funciona para mim com o Matplotlib 1.0.0 se eu adicionar plt.show()no final para mostrar o gráfico. Qual versão e qual back-end você está usando?
Tamás
14
Trabalhando para mim com o Matplotlib 0.98.5.2, Python 2.6.2. Eu tentei os dois plt.ylim((25,250))e plt.ylim(ymax = 250, ymin = 25). Eu estou usando o Aggback - end.
Manoj Govindan
1
Graças a vocês dois. Funciona com o back-end em PDF para você.
Curious2learn
1
Nota: axisbgagora está obsoleto #
SherylHohman 26/03

Respostas:

616

Tente isso. Também funciona para subtramas.

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])
Hima
fonte
201
Aliás, este é um parvo meios abreviatura " g et a C urrent um xes".
Lenar Hoyt
32
você também pode definir um valor Noneque deixe o cálculo como matplotlib, por exemplo:axes.set_ylim([ymin,None])
linqu 13/0918
129

Seu código também funciona para mim. No entanto, outra solução alternativa pode ser obter o eixo do gráfico e alterar apenas os valores y:

x1,x2,y1,y2 = plt.axis()
plt.axis((x1,x2,25,250))

thetarro
fonte
1
Você pode apenas definir x1 e x2 Nenhum.
Hielke Walinga
78

Uma coisa que você pode fazer é definir seu intervalo de eixos sozinho, usando matplotlib.pyplot.axis.

matplotlib.pyplot.axis

from matplotlib import pyplot as plt
plt.axis([0, 10, 0, 20])

0,10 é para a faixa do eixo x. 0,20 é para a faixa do eixo y.

ou você também pode usar matplotlib.pyplot.xlim ou matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)
Birat Bose
fonte
24

Você pode instanciar um objeto matplotlib.pyplot.axese chamá set_ylim()-lo. Seria algo como isto:

import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])
Reza Keshavarz
fonte
16

Isso funcionou pelo menos na versão 2.2.2 do matplotlib:

plt.axis([None, None, 0, 100])

Provavelmente, esta é uma boa maneira de configurar, por exemplo, apenas xmin e ymax, etc.

Antti A
fonte
14

Para adicionar à resposta do @ Hima, se você quiser modificar um limite x ou y atual, use o seguinte.

import numpy as np # you probably alredy do this so no extra overhead
fig, axes = plt.subplot()
axes.plot(data[:,0], data[:,1])
xlim = axes.get_xlim()
# example of how to zoomout by a factor of 0.1
factor = 0.1 
new_xlim = (xlim[0] + xlim[1])/2 + np.array((-0.5, 0.5)) * (xlim[1] - xlim[0]) * (1 + factor) 
axes.set_xlim(new_xlim)

Acho isso particularmente útil quando quero diminuir o zoom ou aumentar um pouco as configurações de plotagem padrão.

Steven C. Howell
fonte
7

Isso deve funcionar. Seu código funciona para mim, como para Tamás e Manoj Govindan. Parece que você pode tentar atualizar o Matplotlib. Se você não conseguir atualizar o Matplotlib (por exemplo, se você tiver direitos administrativos insuficientes), talvez seja possível usar um back-end diferente matplotlib.use().

Eric O Lebigot
fonte
Obrigado por verificar! Estou usando o backend pdf ( matplotlib.use('PDF')). Estou usando a versão que acompanha a versão mais recente da distribuição do Enthought Python. Você pode ver se funciona com o back-end em PDF. Obrigado!
Curious2learn
Ele funciona com o back-end do PDF, no Mac OS X. Você tem certeza de que o arquivo de saída é realmente atualizado plt.savefig()?
Eric O Lebigot
Eu percebi o problema, eu acho. Se eu sair aPlot =na plt.subplotfila, também funciona para mim. Parece que, se alguém atribuir o subtrama a uma variável como essa, algum outro método para definir os limites dos eixos deve ser usado. Isso é verdade?
Curious2learn
1
Até onde eu sei, plt.ylim()aplica os limites aos eixos atuais, que são definidos quando você o faz plt.subplot(). Também não acredito que se plt.subplot()preocupe com a maneira como os eixos que ele retorna são usados ​​(inseridos em uma variável ou não, etc.). Então, eu diria que deveria funcionar; funciona na minha máquina.
Eric O Lebigot
6

Apenas para ajuste fino. Se você quiser definir apenas um dos limites do eixo e deixar o outro inalterado, poderá escolher uma ou mais das seguintes instruções

plt.xlim(right=xmax) #xmax is your value
plt.xlim(left=xmin) #xmin is your value
plt.ylim(top=ymax) #ymax is your value
plt.ylim(bottom=ymin) #ymin is your value

Dê uma olhada na documentação do xlim e do ylim

Jesus amado
fonte
0

Se um eixo (gerado pelo código abaixo do código mostrado na pergunta) estiver compartilhando o intervalo com os primeiros eixos, certifique-se de definir o intervalo após o último gráfico desses eixos.

Rainald62
fonte