การตั้งค่าขีด จำกัด แกน y ใน matplotlib


416

ฉันต้องการความช่วยเหลือในการตั้งค่าขีด จำกัด ของแกน y บน matplotlib นี่คือรหัสที่ฉันพยายามไม่สำเร็จ

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

ด้วยข้อมูลที่ฉันมีสำหรับพล็อตนี้ฉันได้รับขีด จำกัด แกน y ที่ 20 และ 200 อย่างไรก็ตามฉันต้องการขีด จำกัด 20 และ 250


1
ใช้งานได้สำหรับฉันกับ Matplotlib 1.0.0 ถ้าฉันเพิ่มplt.show()ในตอนท้ายเพื่อแสดงพล็อต คุณใช้เวอร์ชันไหนและแบ็คเอนด์ใด
Tamás

14
ทำงานกับฉันด้วย Matplotlib 0.98.5.2, Python 2.6.2 ฉันพยายามทั้งสองและplt.ylim((25,250)) plt.ylim(ymax = 250, ymin = 25)ฉันใช้Aggแบ็กเอนด์
Manoj Govindan

1
ขอบคุณทั้งคู่ ทำงานกับแบ็กเอนด์ PDF สำหรับคุณหรือไม่
Curious2learn

1
หมายเหตุ: axisbgเลิกใช้แล้ว
SherylHohman

คำตอบ:


616

ลองสิ่งนี้ ใช้งานได้กับแผนย่อยด้วย

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

201
BTW นี่คือตัวย่อโง่หมายถึง " gและc urrent a xes"
Lenar Hoyt

32
นอกจากนี้คุณยังสามารถตั้งค่าหนึ่งค่าNoneซึ่งปล่อยให้การคำนวณเป็น matplotlib เช่นaxes.set_ylim([ymin,None])
linqu

129

รหัสของคุณใช้ได้สำหรับฉันด้วย อย่างไรก็ตามวิธีแก้ปัญหาอื่นสามารถใช้เพื่อรับแกนของพล็อตแล้วเปลี่ยนเฉพาะค่า y:

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


1
คุณสามารถตั้งค่า x1 และ x2 None
Hielke Walinga

78

สิ่งหนึ่งที่คุณสามารถทำได้คือการกำหนดช่วงแกนของคุณเองโดยใช้ matplotlib.pyplot.axis

matplotlib.pyplot.axis

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

0,10 สำหรับช่วงแกน x 0,20 สำหรับช่วงแกน y

หรือคุณสามารถใช้ matplotlib.pyplot.xlim หรือ matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

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

24

คุณสามารถยกตัวอย่างวัตถุจากmatplotlib.pyplot.axesและเรียกset_ylim()มัน มันจะเป็นอะไรเช่นนี้:

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

16

สิ่งนี้ทำงานได้อย่างน้อยใน matplotlib เวอร์ชั่น 2.2.2:

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

อาจเป็นวิธีที่ดีในการตั้งค่าเช่น xmin และ ymax เท่านั้นเป็นต้น


14

หากต้องการเพิ่มคำตอบของ @ Hima หากคุณต้องการแก้ไขขีด จำกัด x หรือ y ปัจจุบันคุณสามารถใช้สิ่งต่อไปนี้

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)

ฉันพบว่ามีประโยชน์อย่างยิ่งเมื่อฉันต้องการย่อหรือขยายเพียงเล็กน้อยจากการตั้งค่าพล็อตเริ่มต้น


7

สิ่งนี้น่าจะใช้ได้ รหัสของคุณใช้ได้กับฉันเช่นTamásและ Manoj Govindan ดูเหมือนว่าคุณสามารถลองอัปเดต Matplotlib ได้ หากคุณไม่สามารถอัปเดต Matplotlib (เช่นหากคุณมีสิทธิ์ระดับผู้ดูแลระบบไม่เพียงพอ) บางทีการใช้แบ็กเอนด์อื่นmatplotlib.use()อาจช่วยได้


ขอบคุณสำหรับการตรวจสอบ! ฉันกำลังใช้แบ็กเอนด์ pdf ( matplotlib.use('PDF')) ฉันกำลังใช้รุ่นที่มาพร้อมกับรุ่นล่าสุดของการแจกแจงเอน ธ อร์ท ธ คุณช่วยดูว่ามันใช้กับแบ็กเอนด์ PDF ได้ไหม ขอบคุณ!
Curious2learn

มันใช้งานได้กับแบ็กเอนด์ PDF บน Mac OS X คุณแน่ใจหรือไม่ว่าไฟล์เอาต์พุตนั้นได้รับการอัพเดตแน่นอนด้วยplt.savefig()?
Eric O Lebigot

ฉันตระหนักถึงปัญหาฉันคิดว่า ถ้าฉันนำออกมาaPlot =ในplt.subplotแนวมันก็เหมาะกับฉันเช่นกัน ดูเหมือนว่าหากมีใครกำหนดแผนย่อยให้กับตัวแปรเช่นนั้นต้องใช้วิธีอื่นในการตั้งค่าขีด จำกัด ของแกน มันเป็นเรื่องจริงเหรอ?
Curious2learn

1
เท่าที่ผมรู้ว่าplt.ylim()ใช้ข้อ จำกัด plt.subplot()ในการแกนในปัจจุบันซึ่งมีการตั้งค่าเมื่อคุณทำ ฉันไม่อยากจะเชื่อเลยว่าplt.subplot()สนใจว่าจะใช้แกนคืนอย่างไร (ใส่ในตัวแปรหรือไม่ ฯลฯ ) ดังนั้นฉันจะบอกว่ามันควรจะใช้ได้ มันทำงานบนเครื่องของฉัน
Eric O Lebigot

6

เพียงแค่ปรับจูน หากคุณต้องการตั้งค่าเพียงหนึ่งในขอบเขตของแกนและปล่อยให้ขอบเขตอื่นไม่เปลี่ยนแปลงคุณสามารถเลือกคำสั่งต่อไปนี้หนึ่งรายการขึ้นไป

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

ดูเอกสารประกอบสำหรับxlimและylim


0

หากแกน (สร้างขึ้นโดยรหัสด้านล่างรหัสที่แสดงในคำถาม) กำลังแบ่งปันช่วงกับแกนแรกตรวจสอบให้แน่ใจว่าคุณตั้งค่าช่วงหลังจากพล็อตสุดท้ายของแกนนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.