RuntaScience diary

気象系データを扱う学生 旅が好きです

Welcome to my blog

About

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)

 f:id:RuntaScience:20200620211604p:plain

 

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)

 

f:id:RuntaScience:20200620211549p:plain

 Keys

1) ax2は、ax1に.twinx()で結合します

2)凡例(legend)の表示です。

通常に

ax1.legend()
ax2.legend()

としても良いのですが、それぞれが独立してしまうため表示が不自然になります。

したがって、.get_legend_handles_labels()から得られたhとlを足し算することによって統一の凡例が表示できます。

参考

matplotlib.org

 

ちなみにbarで違うデータを表示させると以下のようになります。

このようにすると、2つのデータの対比がしやすくなりますね!

 

f:id:RuntaScience:20200620211518p:plain

 

 

それでは 🌏