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.


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

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


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)

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

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.


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.


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.


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.