pengaturan batas sumbu y di matplotlib

416

Saya butuh bantuan dengan mengatur batas sumbu y pada matplotlib. Berikut adalah kode yang saya coba, tidak berhasil.

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

Dengan data yang saya miliki untuk plot ini, saya mendapatkan batas sumbu y 20 dan 200. Namun, saya ingin batas 20 dan 250.

Curious2learn
sumber
1
Bekerja untuk saya dengan Matplotlib 1.0.0 jika saya menambahkan plt.show()di akhir untuk menunjukkan plot. Versi mana dan backend mana yang Anda gunakan?
Tamás
14
Bekerja untuk saya dengan Matplotlib 0.98.5.2, Python 2.6.2. Saya mencoba keduanya plt.ylim((25,250))dan plt.ylim(ymax = 250, ymin = 25). Saya menggunakan Aggbackend.
Manoj Govindan
1
Terima kasih untuk kalian berdua. Apakah ini berfungsi dengan backend PDF untuk Anda.
Curious2learn
1
note: axisbgsekarang sudah tidak digunakan lagi
SherylHohman

Jawaban:

616

Coba ini . Bekerja untuk subplot juga.

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])
Hima
sumber
201
BTW, ini adalah konyol singkatan berarti " g et yang c urrent sebuah XES".
Lenar Hoyt
33
Anda juga dapat menetapkan satu nilai Noneyang membuat perhitungan menjadi matplotlib, mis.axes.set_ylim([ymin,None])
linqu
129

Kode Anda juga berfungsi untuk saya. Namun, solusi lain adalah dengan mendapatkan sumbu plot dan kemudian hanya mengubah nilai-y:

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

thetarro
sumber
1
Anda bisa mengatur x1 dan x2 Tidak Ada.
Hielke Walinga
78

Satu hal yang dapat Anda lakukan adalah mengatur sendiri rentang sumbu Anda dengan menggunakan matplotlib.pyplot.axis.

matplotlib.pyplot.axis

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

0,10 untuk rentang sumbu x. 0,20 untuk rentang sumbu y.

atau Anda juga dapat menggunakan matplotlib.pyplot.xlim atau matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

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

Anda dapat instantiate objek dari matplotlib.pyplot.axesdan memanggilnya set_ylim(). Itu akan menjadi seperti ini:

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

Ini berfungsi setidaknya di matplotlib versi 2.2.2:

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

Mungkin ini adalah cara yang bagus untuk mengatur misalnya xmin dan ymax saja, dll.

Antti A
sumber
14

Untuk menambahkan jawaban @ Hima, jika Anda ingin mengubah batas x atau y saat ini, Anda dapat menggunakan yang berikut ini.

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)

Saya menemukan ini sangat berguna ketika saya ingin memperkecil atau memperbesar sedikit dari pengaturan plot default.

Steven C. Howell
sumber
7

Ini seharusnya bekerja. Kode Anda berfungsi untuk saya, seperti untuk Tamas dan Manoj Govindan. Sepertinya Anda dapat mencoba memperbarui Matplotlib. Jika Anda tidak dapat memperbarui Matplotlib (misalnya jika Anda tidak memiliki hak administratif yang memadai), mungkin menggunakan backend yang berbeda dengan matplotlib.use()dapat membantu.

Eric O Lebigot
sumber
Terima kasih telah memeriksa! Saya menggunakan backend pdf ( matplotlib.use('PDF')). Saya menggunakan versi yang datang dengan versi terbaru dari Distribusi Python Enthought. Bisakah Anda melihat apakah itu bekerja dengan backend PDF. Terima kasih!
Curious2learn
Ini berfungsi dengan backend PDF, di Mac OS X. Apakah Anda yakin file output memang diperbarui dengan plt.savefig()?
Eric O Lebigot
Saya menyadari masalahnya, saya pikir. Jika saya mengambil aPlot =di plt.subplotjalur itu bekerja untuk saya juga. Tampaknya jika seseorang memberikan subplot ke variabel seperti itu, beberapa metode lain untuk menetapkan batas sumbu harus digunakan. Benarkah?
Curious2learn
1
Sejauh yang saya tahu, plt.ylim()menerapkan batas ke sumbu saat ini, yang ditetapkan saat Anda melakukannya plt.subplot(). Saya juga tidak percaya bahwa plt.subplot()peduli tentang bagaimana sumbu itu kembali digunakan (dimasukkan ke dalam variabel atau tidak, dll.). Jadi saya katakan itu akan berhasil; ini bekerja pada mesin saya.
Eric O Lebigot
6

Hanya untuk penyetelan yang bagus. Jika Anda ingin menetapkan hanya satu dari batas sumbu dan membiarkan batas lainnya tidak berubah, Anda dapat memilih satu atau lebih dari pernyataan berikut

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

Lihatlah dokumentasi untuk xlim dan untuk ylim

dicintai.Yesus
sumber
0

Jika sumbu (dihasilkan oleh kode di bawah kode yang ditunjukkan dalam pertanyaan) berbagi rentang dengan sumbu pertama, pastikan bahwa Anda menetapkan rentang setelah plot terakhir sumbu itu.

Rainald62
sumber