การเพิ่มป้ายชื่อแกน y ให้กับแกน y ทุติยภูมิใน matplotlib


119

ฉันสามารถเพิ่มป้ายกำกับ ay ให้กับแกน y ด้านซ้ายโดยใช้plt.ylabelแต่จะเพิ่มลงในแกน y รองได้อย่างไร

table = sql.read_frame(query,connection)

table[0].plot(color=colors[0],ylim=(0,100))
table[1].plot(secondary_y=True,color=colors[1])
plt.ylabel('$')

คำตอบ:


235

วิธีที่ดีที่สุดคือโต้ตอบกับaxesวัตถุโดยตรง

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 *y1

fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b-')

ax1.set_xlabel('X data')
ax1.set_ylabel('Y1 data', color='g')
ax2.set_ylabel('Y2 data', color='b')

plt.show()

กราฟตัวอย่าง


วิธีรับแกน y ที่ถูกต้องเหมือนทางซ้ายฉันหมายถึงจากล่างขึ้นบนจาก 0 ถึง 5 จัดแนว
Sigur

จะหมุนข้อความสีน้ำเงินโดยไม่ทับเห็บได้อย่างไร?
Sigur

@Sigur คุณต้องยุ่งกับการส่งพารามิเตอร์แนวนอนและ / หรือแนวตั้งไปยัง ax2.set_ylabel
Paul H

@PaulH ฉันพบว่าเราสามารถรับขีด จำกัด y จาก ax1 และตั้งค่าเป็น ax2 ได้ดังนั้นตำแหน่งของป้ายกำกับจะถูกจัดแนว
Sigur

@Sigur ฉันไม่ปฏิบัติตามว่าแกน จำกัด และเห็บโต้ตอบกับการหมุนฉลากอย่างไร แต่ถ้าคุณมีความสุขความเร็วระดับเทพ
Paul H

22

มีวิธีแก้ปัญหาที่ตรงไปตรงมาโดยไม่ต้องยุ่งกับ matplotlib: แค่แพนด้า

ปรับแต่งตัวอย่างเดิม:

table = sql.read_frame(query,connection)

ax = table[0].plot(color=colors[0],ylim=(0,100))
ax2 = table[1].plot(secondary_y=True,color=colors[1], ax=ax)

ax.set_ylabel('Left axes label')
ax2.set_ylabel('Right axes label')

โดยทั่วไปเมื่อมีการกำหนดsecondary_y=Trueตัวเลือก (แม้ว่าจะax=axถูกส่งผ่านไปด้วย) pandas.plotจะส่งกลับแกนอื่นที่เราใช้ในการตั้งค่าป้ายกำกับ

ฉันรู้ว่าคำตอบนี้นานมาแล้ว แต่ฉันคิดว่าแนวทางนี้คุ้มค่า


ขอบคุณ - แนวทางที่ยอดเยี่ยม! อย่างไรก็ตามเป็นที่น่าสังเกตว่าจะใช้งานได้ก็ต่อเมื่อคุณพล็อตบนแกน y หลักก่อนจากนั้นแกน y ทุติยภูมิตามที่คุณได้ทำ หากคุณเปลี่ยนคำสั่งจะทำงานผิดปกติ
user667489

7

ฉันไม่สามารถเข้าถึง Python ได้ในตอนนี้ แต่จากด้านบนของหัว:

fig = plt.figure()

axes1 = fig.add_subplot(111)
# set props for left y-axis here

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