Menambahkan label sumbu y ke sumbu y sekunder di matplotlib

119

Saya bisa menambahkan label ay ke sumbu y kiri plt.ylabel, tapi bagaimana cara menambahkannya ke sumbu y sekunder?

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('$')
Osmond Bishop
sumber

Jawaban:

234

Cara terbaik adalah berinteraksi dengan axesobjek secara langsung

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

contoh grafik

Paul H.
sumber
Cara mendapatkan sumbu y kanan seperti yang kiri, maksud saya, dari bawah ke atas, dari 0 sampai 5, sejajar.
Sigur
Bagaimana cara memutar teks biru tanpa tumpang tindih dengan kutu?
Sigur
@Sigur Anda harus mengacaukan melewatkan horizontalalignment dan / atau parameter verticalalignment ke ax2.set_ylabel
Paul H
@PaulH, saya menemukan bahwa kita bisa mendapatkan batas y dari ax1 dan mengaturnya ke ax2, sehingga posisi label akan sejajar.
Sigur
@Sigur Saya tidak mengikuti bagaimana sumbu batas dan kutu berinteraksi dengan rotasi label, tetapi jika Anda senang, kecepatan dewa
Paul H
22

Ada solusi langsung tanpa mengotak-atik matplotlib: hanya panda.

Mengutak-atik contoh aslinya:

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

Pada dasarnya, ketika secondary_y=Trueopsi diberikan (meskipun ax=axdilewatkan juga)pandas.plot mengembalikan sumbu berbeda yang kita gunakan untuk mengatur label.

Saya tahu ini telah dijawab sejak lama, tetapi saya pikir pendekatan ini sepadan.

Kiril
sumber
Terima kasih - pendekatan yang bagus! Namun, perlu dicatat bahwa ini hanya berfungsi jika Anda memplot pada sumbu y primer terlebih dahulu, kemudian sumbu y sekunder, persis seperti yang telah Anda lakukan. Jika Anda mengganti urutannya, itu akan berperilaku tidak semestinya.
pengguna667489
7

Saya tidak memiliki akses ke Python sekarang, tetapi di luar kepala saya:

fig = plt.figure()

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

axes2 = axes1.twinx()   # mirror them
axes2.set_ylabel(...)
Micke
sumber