Y軸ラベルをmatplotlibのセカンダリY軸に追加する


118

を使用して左のy軸にyラベルplt.ylabelを追加できますが、2番目の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('$')

回答:


232

最善の方法は、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 2018年

@Sigurは、horizo​​ntalalignmentおよび/またはverticalalignmentパラメータをax2.set_ylabelに渡すことを混乱させる必要があります
Paul H

@ PaulH、ax1からyの制限を取得してax2に設定できるため、ラベルの位置が揃うことがわかりました。
Sigur 2018年

@Sigur私は軸の制限と目盛りがラベルの回転とどのように相互作用するかは従いませんが、もしあなたが幸せなら、godspeed
Paul H

21

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.