Pythonで2軸グラフ表示 Matplotlib 〜Y軸を2本にしてみる:twinx その 2〜

スポンサーリンク

Y軸が2本のグラフ

前回は2軸グラフとしてY軸が2本のグラフを表示する基本を解説しました。

Pythonで2軸グラフ表示 Matplotlib 〜Y軸を2本にしてみる:twinx その 1〜
2軸グラフの表示前にpythonのグラフ操作ライブラリmatplotlibを使って、色々なグラフの表示を解説しました。今になって思ったのが2軸グラフというのをまだ紹介していなかったこと。2軸グラフがどんなグ...

前回の最後のプログラムとしてはこんな感じ。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

今回はもう少しこちらのグラフを見やすくする方法を解説していきます。

スポンサーリンク

タイトルの表示

タイトルを表示するのは、普通のグラフと同じで「plt.title(“タイトル”)」です。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

ということで詳細はこちらの記事を参考にしてください。

Pythonでグラフ表示 matplotlib 〜タイトル、軸名、凡例の表示〜
タイトルを表示する前回、matplotlibを使って、グラフを表示する方法を解説しました。グラフは表示できたのですが、何とも味気ないグラフになっていましたよね。やはりグラフを表示したら、タイトルやX軸、Y軸...
スポンサーリンク

X軸名の表示

次にX軸名を表示してみましょう。

普通のグラフでは「plt.xlabel(“X軸名”)」なので、まずはこれを試してみましょう。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

plt.xlabel("X-axis")

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

ん?X軸名が表示されません。

実は2軸グラフの場合は「グラフ名.set_xlabel(“X軸名”)」を用います。

今回はax1、ax2というグラフがありますので、「ax1.set_xlabel(“X軸名”)」となります。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis")

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

確かに表示されました。

ではax1でないといけないのでしょうか?ax2ではダメなのでしょうか?

ということで試してみましょう。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax2.set_xlabel("X-axis")

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

X軸名は表示されませんでした。

ax1、つまり「ax1 = fig.subplots()」のように作成したグラフでないとダメなようです。

もしX軸名が表示されなかったら、ここら辺のコマンドを見直すと良さそうです。

ちなみに文字の大きさを変えるのは、{“fontsize”: フォントサイズ}を追加することで変えることができます。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis", {"fontsize": 20})

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

ちなみに「fontsize=フォントサイズ」でもいいようです。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis", fontsize=20)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果
スポンサーリンク

Y軸の表示

次にY軸を表示してみましょう。

X軸の時は、set_xlabel(“X軸名”)だったので、set_ylabel(“Y軸名”)なのかというとその通りです。

しかし問題はY軸は2本あるということです。それぞれax1とax2で試してみましょう。

まずはax1に追加ということで「ax1.set_ylabel(“Y1-axis”, fontsize=10)」を追加してみます。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis", fontsize=10)
ax1.set_ylabel("Y1-axis", fontsize=10)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

左側のY軸に名前が追加されました。

次に「ax2.set_ylabel(“Y2-axis”, fontsize=10)」に変えてみます。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis", fontsize=10)
ax2.set_ylabel("Y2-axis", fontsize=10)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

今度は右側のY軸に名前が追加されました。

もちろん両方のコードを追加したら、左右のY軸に追加されます。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis", fontsize=10)
ax1.set_ylabel("Y1-axis", fontsize=10)
ax2.set_ylabel("Y2-axis", fontsize=10)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

しれっと書いていますが、Y軸でも文字のサイズを変えるのは「fontsize = 文字のサイズ」で変更できます。

スポンサーリンク

軸のフォントサイズの変更

タイトルや軸名のフォントサイズが変更できるのは分かりました。

では軸の数値のフォントサイズを変えるにはどうしたらいいでしょうか。

コードとしては「tick_params(labelsize=フォントサイズ)」です。

こちらもax1、ax2というそれぞれのグラフに対して行うことができます。

ということでまずは「ax1.tick_params(labelsize=20)」を追加してみましょう。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis", fontsize=10)
ax1.set_ylabel("Y1-axis", fontsize=10)
ax2.set_ylabel("Y2-axis", fontsize=10)

ax1.tick_params(labelsize=20)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

X軸と左側のY軸の数値のサイズが大きくなりました。

次に「ax2.tick_params(labelsize=20)」にしてみましょう。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis", fontsize=10)
ax1.set_ylabel("Y1-axis", fontsize=10)
ax2.set_ylabel("Y2-axis", fontsize=10)

ax2.tick_params(labelsize=20)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

今度は右側のY軸のみフォントの大きさが変わりました。

もちろん両方追加すれば、全ての軸の数値のフォントサイズが変わります。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, color="blue", label="a")
ax2.plot(x, y2, c="r", label="b")

plt.title("Title")

ax1.set_xlabel("X-axis", fontsize=10)
ax1.set_ylabel("Y1-axis", fontsize=10)
ax2.set_ylabel("Y2-axis", fontsize=10)

ax1.tick_params(labelsize=20)
ax2.tick_params(labelsize=20)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

plt.show()

実行結果

ということでこれで2軸グラフのことを大体はできる様になったかと思います。

これまでY軸が2本のグラフを解説してきたのですが、2軸グラフというとX軸が2本だって良いわけです。

ということで次回はX軸が2本の2軸グラフを作成してみましょう。

Pythonで2軸グラフ表示 Matplotlib 〜X軸を2本してみた:twiny、そしてX軸もY軸も2本にしたけど失敗した話〜
X軸を2本にする意味前回、前々回とY軸が2本のグラフの作成方法を解説しました。今回はX軸が2本のグラフの作成方法を解説していきます。Y軸が2本のグラフは2つのデータ間で値が大幅に違う際に分かりやすく表示する...

ではでは今回はこんな感じで。

コメント

タイトルとURLをコピーしました