Matplotlib'de ikincil y eksenine bir y ekseni etiketi ekleme


119

Kullanarak sol y eksenine bir etiket ekleyebilirim plt.ylabel, ancak bunu ikincil y eksenine nasıl ekleyebilirim?

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

Yanıtlar:


234

En iyi yol, axesnesneyle doğrudan etkileşim kurmaktır.

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

örnek grafik


Soldaki gibi sağ y ekseni nasıl elde edilir, yani aşağıdan yukarıya, 0'dan 5'e hizalı.
Sigur

Mavi metin keneler üst üste gelmeden nasıl döndürülür?
Sigur

@ Yatay hizalama ve / veya dikey hizalama parametresini ax2.set_ylabel'e geçirmekle uğraşmak zorunda olduğunuzu yapılandırın
Paul H

@PaulH, y limitlerini ax1'den alabileceğimizi ve ax2'ye ayarlayabileceğimizi, böylece etiketlerin konumlarının hizalanacağını buldum.
Sigur

@Sigur Eksenlerin sınırlarının ve tiklerin etiket rotasyonuyla nasıl etkileşime girdiğini takip etmiyorum, ama mutluysanız, godspeed
Paul H

22

Matplotlib ile uğraşmadan basit bir çözüm var: sadece pandalar.

Orijinal örnekte ince ayar yapmak:

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

Temel olarak, secondary_y=Trueseçenek verildiğinde ( ax=axgeçse bile)pandas.plot biz etiketleri ayarlamak için kullanabileceğiniz farklı eksenlerini döndürür.

Bunun uzun zaman önce yanıtlandığını biliyorum ama bence bu yaklaşım buna değer.


Teşekkürler - harika bir yaklaşım! Bununla birlikte, bunun yalnızca yaptığınız gibi, önce birincil y eksenini, ardından ikincil y eksenini çizerseniz işe yarayacağını belirtmek gerekir. Sırayı değiştirirseniz, yanlış davranır.
user667489

7

Şu anda Python'a erişimim yok, ancak aklımın ucunda:

fig = plt.figure()

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

axes2 = axes1.twinx()   # mirror them
axes2.set_ylabel(...)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.