Pythonを使った2軸グラフの作成方法
気温と湿度の2軸グラフ
前回までの記事はこちら
Pythonを使った2軸グラフの作成 Matplotlib 入門講座 09_01
Pythonを使った2軸グラフの作成 その2 Matplotlib 入門講座 09_02
今回の講義ではサンプルデータが必要です。
kino-codeさんのホームページにデータがあります。
Matplotlib-Seaborn09-1month_data.csv
Matplotlib-Seaborn09-kion_data.csv
まずはライブラリをインポート。
そしてkino-codeさんで予め用意されていたデータを読み込みます。
今回もGooglecolaboを使用していますので、
同じフォルダーにデータをアップロードしてマウントして使用します。
引数index colで、Dateの列をインデックスに指定します。
import matplotlib.pyplot as plt
%matplotlib inline
import pandas as pd
from google.colab import drive
drive.mount('/content/drive')
data = pd.read_csv('/*****/*****/*****/*****/Matplotlib-Seaborn09-kion_data.csv', index_col='Date', parse_dates=True)
kion_data.head()
まずはそれぞれの項目を変数に代入します。
date = kion_data.index
temp = kion_data['気温(℃)']
humid = kion_data['湿度(%)']
気温、湿度、それぞれでグラフを描いてみます。
気温と湿度を2軸でプロット
subplotsでfigureオブジェクトとaxisオブジェクトを作成します。
ax1には気温のtempをプロット。
区別するためにカラーはコーラルとしておきます。
ax2にはtwinxを記述し、第2軸にする設定をします。
こちらには、湿度のhumidをプロットします。
fig, ax1 = plt.subplots(figsize=(9,6))
ax1.plot(temp, color='coral')
ax2 = ax1.twinx()
ax2.plot(humid)
plt.show()
湿度のy軸を0-100、気温0-20に設定します。
それそれset_ylimの引数に入力します。
fig, ax1 = plt.subplots(figsize=(9,6))
ax1.plot(temp, color='coral')
ax1.set_ylim(0,20)
ax2 = ax1.twinx()
ax2.plot(humid)
ax2.set_ylim(0,100)
plt.show()
軸ラベル、タイトル追加して、よりグラフを見やすいようにグリッドも
表示させます。
fig, ax1 = plt.subplots(figsize=(9,6))
ax1.plot(temp, color='coral')
ax1.set_ylim(0,20)
ax1.set_ylabel('気温[℃]', fontsize=14)
ax1.grid(axis='y')
ax2 = ax1.twinx()
ax2.plot(humid)
ax2.set_ylim(0,100)
ax2.set_ylabel('湿度[%]', fontsize=14)
plt.title('Tokyo Temperature/Humid', fontsize=16)
plt.show()
x軸の時間表記を変更します。
axis setメソッドの、major formatterを使用します。
()の中には、dt.DateFormatter('%H:%M')と記述します。
Hはhour、Mはminuteの頭文字です。
この記述は、ax1とax2のどちらに記述をしても同じように表示されます
fig, ax1 = plt.subplots(figsize=(9,6))
ax1.plot(temp, color='coral')
ax1.set_ylim(0,20)
ax1.set_ylabel('気温[℃]', fontsize=14)
ax2 = ax1.twinx()
ax2.plot(humid)
ax2.set_ylim(0,100)
ax2.set_ylabel('湿度[%]', fontsize=14)
ax2.xaxis.set_major_formatter(dt.DateFormatter('%H:%M'))
plt.title('Tokyo Temperature/Humid', fontsize=16)
plt.grid()
plt.show()
それぞれのグラフに凡例を追加しましょう。
plotメソッドの()の中に引数labelを記述し、
凡例に表示させたい名前をシングルコーテーションでくくります。
次に、ax1とax2のそれぞれでlegendを作成し、()の中で凡例の設定をします。
何も設定しないデフォルトでは、2つの凡例が重なってしまうので、
引数locやbbox to anchorで互いの凡例の位置をずらす設定をします。
x1.legend(bbox_to_anchor=(1, 1), loc='upper right', frameon=False, fontsize=14)
ax2.legend(bbox_to_anchor=(1, 0.9), borderaxespad=0, frameon=False, fontsize=14)
fig, ax1 = plt.subplots(figsize=(9,6))
ax1.plot(temp,color='coral', label='temp')
ax1.set_ylim(0,20)
ax1.set_ylabel('気温[℃]', fontsize=14)
ax2 = ax1.twinx()
ax2.plot(humid, label='humid')
ax2.set_ylim(0,100)
ax2.set_ylabel('湿度[%]', fontsize=14)
ax2.xaxis.set_major_formatter(dt.DateFormatter('%H:%M'))
ax1.legend(bbox_to_anchor=(1, 1), loc='upper right', frameon=False, fontsize=14)
ax2.legend(bbox_to_anchor=(1, 0.9), borderaxespad=0, frameon=False, fontsize=14)
plt.title('Tokyo Temperature/Humid', fontsize=16)
plt.grid()
plt.show()
y軸の目盛りに補助目盛りを追加します。
matplotlibのtickerというライブラリからMultipleLocatorをインポートします。
from matplotlib.ticker import MultipleLocator
axis setメソッドのminor locatorを使って、補助目盛りの設定をします。
ax1.yaxis.set_minor_locator(MultipleLocator(0.5))
ax2.yaxis.set_minor_locator(MultipleLocator(5))
from matplotlib.ticker import MultipleLocator
fig, ax1 = plt.subplots(figsize=(9,6))
ax1.plot(temp,color='coral', label='temp')
ax1.set_ylim(0,20)
ax1.set_ylabel('気温[℃]', fontsize=14)
ax2 = ax1.twinx()
ax2.plot(humid, label='humid')
ax2.set_ylim(0,100)
ax2.set_ylabel('湿度[%]', fontsize=14)
ax2.xaxis.set_major_formatter(dt.DateFormatter('%H:%M'))
ax1.legend(bbox_to_anchor=(1, 1), loc='upper right', frameon=False, fontsize=14)
ax2.legend(bbox_to_anchor=(1, 0.9), borderaxespad=0, frameon=False, fontsize=14)
ax1.yaxis.set_minor_locator(MultipleLocator(0.5))
ax2.yaxis.set_minor_locator(MultipleLocator(5))
plt.title('Tokyo Temperature/Humid', fontsize=16)
plt.grid()
plt.show()
今回もkinocodeさんの動画で勉強させていただきました。
ありがとうございました!
コメント