【Matplotlib】2軸のグラフを作成しよう
こんにちは!2軸のグラフ作成をします
データの用意ができていて、図の書き方だけ知りたいという方は、描写 2軸へ!!
モジュール
必要なモジュールをインポートします
import numpy as np
import matplotlib.pyplot as plt
データ
それではまず初めにデータを用意します。
今回はランダムなデータを使用します。
x = np.arange(0,100,1)
y1 = np.random.rand(100)
y2 = np.random.rand(100) * 100
描写
1軸
2軸の描写の前に、それぞれのデータをプロットして確認しておきましょう。
fig = plt.figure(figsize=(10, 5))
plt.rcParams["font.size"] = 18 #fontsize一括設定
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)
ax1.plot(x, y1)
ax2.plot(x, y2)
#軸設定
ax1.set_ylabel("Y1-axis")
ax2.set_ylabel("Y2-axis")
ax1.label_outer()
plt.show()
#保存
fig.savefig("XXX.png" ,format="png", dpi=330)
2軸
それでは本題の2軸グラフです。
今回の目的は2軸グラフの描写なので、細かい設定はしません。
fig = plt.figure(figsize=(10, 3))
plt.rcParams["font.size"] = 18
ax1 = plt.subplot(111)
ax2 = ax1.twinx() #*1
ax1.plot(x, y1, color="b", label = "Y1")
ax2.plot(x, y2, color="r", label = "Y2")
#軸設定
ax1.set_ylabel("Y1-axis")
ax2.set_ylabel("Y2-axis")
#範囲設定
ax1.set_xlim(0,100)
ax1.set_ylim(0,1.2)
ax2.set_ylim(0,120)
#*2
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1+h2, l1+l2, ncol=2, fontsize=12)
plt.show()
fig.savefig("XXX.png" ,format="png", dpi=330)
Keys
1) ax2は、ax1に.twinx()で結合します
2)凡例(legend)の表示です。
通常に
ax1.legend()
ax2.legend()
としても良いのですが、それぞれが独立してしまうため表示が不自然になります。
したがって、.get_legend_handles_labels()から得られたhとlを足し算することによって統一の凡例が表示できます。
参考
ちなみにbarで違うデータを表示させると以下のようになります。
このようにすると、2つのデータの対比がしやすくなりますね!
それでは 🌏