ย้อนกลับแกน Y ใน PyPlot


265

ฉันมีกราฟพล็อตกระจายที่มีพิกัดสุ่ม x, y ปัจจุบันแกน Y เริ่มต้นที่ 0 และขึ้นไปจนถึงค่าสูงสุด ฉันอยากให้แกน Y เริ่มต้นที่ค่าสูงสุดและเพิ่มขึ้นเป็น 0

points = [(10,5), (5,11), (24,13), (7,8)]    
x_arr = []
y_arr = []
for x,y in points:
    x_arr.append(x)
    y_arr.append(y)
plt.scatter(x_arr,y_arr)

คำตอบ:


557

มี API ใหม่ที่ทำให้สิ่งนี้ง่ายยิ่งขึ้น

plt.gca().invert_xaxis()

และ / หรือ

plt.gca().invert_yaxis()

49
ระวังให้ดีว่าคุณจะต้องตั้งค่าขีด จำกัด ของแกนก่อนที่คุณจะกลับด้านของแกนมิฉะนั้นมันจะยกเลิกกลับด้านอีกครั้ง
TheBigH

55

คำตอบของDisplacedAussieนั้นถูกต้อง แต่โดยทั่วไปแล้ววิธีการที่สั้นกว่านั้นก็คือการกลับแกนเดี่ยวที่เป็นปัญหา:

plt.scatter(x_arr, y_arr)
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])

โดยที่gca()ฟังก์ชันส่งคืนอินสแตนซ์ Axes ปัจจุบันและ[::-1]ย้อนกลับรายการ


3
นั่นดูเหมือนจะเป็นคำตอบที่ดีกว่าสำหรับฉัน :)
DisplacedAussie

18

ใช้matplotlib.pyplot.axis ()

axis([xmin, xmax, ymin, ymax])

ดังนั้นคุณสามารถเพิ่มสิ่งนี้ในตอนท้าย:

plt.axis([min(x_arr), max(x_arr), max(y_arr), 0])

แม้ว่าคุณอาจต้องการแพ็ดดิ้งที่ปลายแต่ละด้านเพื่อให้จุดที่สูงที่สุดไม่ได้นั่งที่ชายแดน


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

16

หากคุณอยู่ใน ipython ในpylabโหมด

plt.gca().invert_yaxis()
show()

show()เป็นสิ่งจำเป็นที่จะทำให้มันอัปเดตรูปปัจจุบัน


9

คุณสามารถใช้ฟังก์ชั่นที่ถูกเปิดเผยโดยวัตถุแกนของพล็อตการกระจาย

scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()

8

อีกวิธีที่คล้ายกันกับที่อธิบายไว้ข้างต้นคือการใช้plt.ylimตัวอย่างเช่น:

plt.ylim(max(y_array), min(y_array))

วิธีนี้ใช้ได้กับฉันเมื่อฉันพยายามรวบรวมหลายชุดข้อมูลใน Y1 และ / หรือ Y2


3

การใช้ ylim () อาจเป็นวิธีที่ดีที่สุดสำหรับวัตถุประสงค์ของคุณ:

xValues = list(range(10))
quads = [x** 2 for x in xValues]
plt.ylim(max(quads), 0)
plt.plot(xValues, quads)

จะส่งผลให้:ป้อนคำอธิบายรูปภาพที่นี่


2

หรือคุณสามารถใช้ฟังก์ชั่นmatplotlib.pyplot.axis ()ซึ่งช่วยให้คุณสามารถกลับแกนพล็อตใด ๆ

ax = matplotlib.pyplot.axis()
matplotlib.pyplot.axis((ax[0],ax[1],ax[3],ax[2]))

หรือถ้าคุณต้องการย้อนกลับแกน X เท่านั้น

matplotlib.pyplot.axis((ax[1],ax[0],ax[2],ax[3]))

แน่นอนคุณสามารถสลับทั้งสองแกนได้:

matplotlib.pyplot.axis((ax[1],ax[0],ax[3],ax[2]))

0

หากใช้ matplotlib คุณสามารถลอง: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

เส้นสองเส้นนี้ตั้งค่าขีด จำกัด ของแกน x และ y ตามลำดับ สำหรับแกน x อาร์กิวเมนต์แรก l ตั้งค่าซ้ายสุดและอาร์กิวเมนต์ที่สอง r ตั้งค่าที่เหมาะสมที่สุด สำหรับแกน y อาร์กิวเมนต์แรก b จะตั้งค่าที่ต่ำที่สุดและอาร์กิวเมนต์ที่สอง t ตั้งค่าที่สูงที่สุด

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