matplotlib'de y ekseni sınırını ayarlama


416

Matplotlib'de y ekseni sınırlarını ayarlama konusunda yardıma ihtiyacım var. İşte başarısız denedim kodu.

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))

Bu grafik için sahip olduğum verilerle, 20 ve 200 y ekseni sınırlarını alıyorum. Ancak, 20 ve 250 sınırlarını istiyorum.


1
Eğer plt.show()arsa göstermek için sonunda eklerseniz benim için Matplotlib 1.0.0 ile çalışır . Hangi sürümü ve hangi arka ucu kullanıyorsunuz?
Tamás

14
Matplotlib 0.98.5.2, Python 2.6.2 ile çalışıyorum. İkisini de denedim plt.ylim((25,250))ve plt.ylim(ymax = 250, ymin = 25). AggArka ucu kullanıyorum .
Manoj Govindan

1
İkinize de teşekkürler. Sizin için PDF arka ucu ile çalışır mı?
Curious2learn

1
not: axisbgartık kullanımdan kaldırıldı
SherylHohman

Yanıtlar:


616

Bunu dene . Alt grafikler için de çalışır.

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])

201
Btw bu saçma kısaltma aracı "bir g ve c u andaki bir xes".
Lenar Hoyt

32
Ayrıca Nonehesaplamayı matplotlib'e bırakan bir değer de ayarlayabilirsiniz , örneğinaxes.set_ylim([ymin,None])
linqu

129

Kodun benim için de geçerli. Ancak, başka bir geçici çözüm çizimin eksenini almak ve daha sonra sadece y değerlerini değiştirmek olabilir:

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


1
Sadece x1 ve x2 Yok'u ayarlayabilirsiniz.
Hielke Walinga

78

Yapabileceğiniz bir şey matplotlib.pyplot.axis kullanarak eksen aralığınızı kendiniz ayarlamaktır.

matplotlib.pyplot.axis

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

0,10 x eksen aralığı içindir. 0,20 y ekseni aralığı içindir.

veya matplotlib.pyplot.xlim veya matplotlib.pyplot.ylim kullanabilirsiniz

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)

24

Bir nesneyi başlatabilir ve nesneyi matplotlib.pyplot.axesçağırabilirsiniz set_ylim(). Böyle bir şey olurdu:

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

16

Bu en azından matplotlib 2.2.2 sürümünde çalıştı:

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

Muhtemelen bu, örneğin yalnızca xmin ve ymax vb.


14

@ Hima'ın cevabına eklemek için, mevcut bir x veya y sınırını değiştirmek isterseniz aşağıdakileri kullanabilirsiniz.

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)

Bunu, varsayılan çizim ayarlarından biraz uzaklaştırmak veya uzaklaştırmak istediğimde özellikle yararlı buluyorum.


7

Bu çalışmalı. Kodunuz Tamás ve Manoj Govindan gibi benim için çalışıyor. Matplotlib'i güncellemeye çalışabileceğiniz anlaşılıyor. Matplotlib'i güncelleyemiyorsanız (örneğin, yetersiz yönetici haklarına sahipseniz), belki farklı bir arka uç kullanmak matplotlib.use()yardımcı olabilir.


Kontrol ettiğin için teşekkürler! Ben pdf backend ( matplotlib.use('PDF')) kullanıyorum. Enthought Python dağıtımının en son sürümüyle gelen sürümü kullanıyorum. PDF arka ucuyla çalışıp çalışmadığını görebilir misiniz? Teşekkürler!
Curious2learn

Mac OS X'te PDF arka ucuyla çalışır. Çıktı dosyasının gerçekten de güncellendiğinden emin misiniz plt.savefig()?
Eric O Lebigot

Sorunu fark ettim, sanırım. Ben dışarı alırsak aPlot =içinde plt.subplothat çok benim için çalışıyor. Alt grafiği böyle bir değişkene atarsa, eksen sınırlarını ayarlamak için başka bir yöntem kullanılmalıdır. Bu doğru mu?
Curious2learn

1
Bildiğim kadarıyla plt.ylim(), sınırları, yaptığınız zaman ayarlanan mevcut eksenlere uygular plt.subplot(). Ayrıca, plt.subplot()döndürdüğü eksenlerin nasıl kullanıldığına (bir değişkene konulup konulmadığına vb.) Dikkat edemiyorum. Bu yüzden çalışması gerektiğini söyleyebilirim; benim makinemde çalışıyor.
Eric O Lebigot

6

Sadece ince ayar için. Eksenin sınırlarından yalnızca birini ayarlamak ve diğer sınırın değişmesine izin vermek istiyorsanız, aşağıdaki ifadelerden birini veya daha fazlasını seçebilirsiniz

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

Belgelerine bir göz atın xlim ve için İlim


0

Bir eksen (soruda gösterilen kodun altındaki kod tarafından oluşturulan) aralığı ilk eksenlerle paylaşıyorsa , aralığı bu eksenlerin son grafiğinden sonra ayarladığınızdan emin olun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.