thiết lập giới hạn trục y trong matplotlib


416

Tôi cần trợ giúp với việc đặt giới hạn của trục y trên matplotlib. Đây là mã mà tôi đã thử, không thành công.

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

Với dữ liệu tôi có cho âm mưu này, tôi có giới hạn trục y là 20 và 200. Tuy nhiên, tôi muốn giới hạn 20 và 250.


1
Hoạt động với tôi với Matplotlib 1.0.0 nếu tôi thêm plt.show()vào cuối để hiển thị cốt truyện. Phiên bản nào và phụ trợ nào bạn đang sử dụng?
Tamás

14
Làm việc với tôi với Matplotlib 0.98.5.2, Python 2.6.2. Tôi đã thử cả hai plt.ylim((25,250))plt.ylim(ymax = 250, ymin = 25). Tôi đang sử dụng Aggphụ trợ.
Manoj Govindan

1
Cám ơn hai bạn. Nó có hoạt động với phụ trợ PDF cho bạn không.
Curious2learn

1
lưu ý: axisbghiện không được chấp nhận
SherylHohman

Câu trả lời:


616

Thử cái này . Hoạt động cho các ô con quá.

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

201
BTW, đây là một phương tiện viết tắt ngớ ngẩn " g et các c urrent một XES".
Lenar Hoyt

32
bạn cũng có thể thiết lập một giá trị Nonemà rời khỏi tính toán để matplotlib, ví dụ:axes.set_ylim([ymin,None])
Linqu

129

Mã của bạn hoạt động cũng cho tôi. Tuy nhiên, một cách giải quyết khác có thể là lấy trục của cốt truyện và sau đó chỉ thay đổi các giá trị y:

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


1
Bạn chỉ có thể đặt x1 và x2 Không có.
Hielke Walinga

78

Một điều bạn có thể làm là tự mình thiết lập phạm vi trục của mình bằng cách sử dụng matplotlib.pyplot.axis.

matplotlib.pyplot.axis

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

0,10 là cho phạm vi trục x. 0,20 là cho phạm vi trục y.

hoặc bạn cũng có thể sử dụng matplotlib.pyplot.xlim hoặc matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

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

24

Bạn có thể khởi tạo một đối tượng từ matplotlib.pyplot.axesvà gọi set_ylim()nó trên đó. Nó sẽ là một cái gì đó như thế này:

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

16

Điều này hoạt động ít nhất trong phiên bản matplotlib 2.2.2:

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

Có lẽ đây là một cách hay để thiết lập ví dụ chỉ xmin và ymax, v.v.


14

Để thêm vào câu trả lời của @ Hima, nếu bạn muốn sửa đổi giới hạn x hoặc y hiện tại, bạn có thể sử dụng cách sau.

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)

Tôi thấy điều này đặc biệt hữu ích khi tôi muốn thu nhỏ hoặc phóng to chỉ một chút từ cài đặt cốt truyện mặc định.


7

Điều này nên làm việc. Mã của bạn hoạt động với tôi, như đối với Tamás và Manoj Govindan. Có vẻ như bạn có thể thử cập nhật Matplotlib. Nếu bạn không thể cập nhật Matplotlib (ví dụ nếu bạn không có đủ quyền quản trị), có thể sử dụng một phụ trợ khác với matplotlib.use()có thể giúp ích.


Cảm ơn vì đã kiểm tra! Tôi đang sử dụng phụ trợ pdf ( matplotlib.use('PDF')). Tôi đang sử dụng phiên bản đi kèm với phiên bản mới nhất của Phân phối Python Enth think. Bạn có thể vui lòng xem nếu nó hoạt động với phụ trợ PDF. Cảm ơn!
Curious2learn

Nó hoạt động với phụ trợ PDF, trên Mac OS X. Bạn có chắc chắn rằng tệp đầu ra thực sự được cập nhật plt.savefig()không?
Eric O Lebigot

Tôi nhận ra vấn đề, tôi nghĩ. Nếu tôi đưa ra aPlot =trong plt.subplotdòng nó cũng làm việc cho tôi. Có vẻ như nếu người ta gán subplot cho một biến như thế, một số phương pháp khác để thiết lập giới hạn trục phải được sử dụng. Điều đó có đúng không?
Curious2learn

1
Theo tôi biết, plt.ylim()áp dụng các giới hạn cho các trục hiện tại, được đặt khi bạn thực hiện plt.subplot(). Tôi cũng không thể tin rằng plt.subplot()quan tâm đến cách sử dụng các trục mà nó trả về (đưa vào một biến hay không, v.v.). Vì vậy, tôi muốn nói rằng nó nên hoạt động; Nó không hoạt động trên máy của tôi.
Eric O Lebigot

6

Chỉ để điều chỉnh tốt. Nếu bạn muốn chỉ đặt một trong các ranh giới của trục và để cho ranh giới khác không thay đổi, bạn có thể chọn một hoặc nhiều câu lệnh sau

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

Hãy xem tài liệu cho xlim và cho ylim


0

Nếu một trục (được tạo bởi mã bên dưới mã được hiển thị trong câu hỏi) đang chia sẻ phạm vi với các trục đầu tiên, hãy đảm bảo rằng bạn đặt phạm vi sau âm mưu cuối cùng của trục đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.