本記事では、Python / matplotlibでグラフに矢印(→)を入れる方法をご説明します。
Pythonの実行環境
今回は、以下の実行環境でプログラムを実行しています。
・Python 3.7.6
・Jupyterlab 1.2.6
・Pandas:1.1.2
・matplotlib:3.3.2
・NumPy:1.18.1
実例としては、次のような予算管理表を使います。
ファイル名は「テストデータ.xlsx」で、シート名は「予算管理表」です。
■予算管理表
まずは、ライブラリをインポートし、今回扱う予算管理表をdfとして読み込んでおきます。
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
%matplotlib inline
df = pd.read_excel('テストデータ.xlsx', sheet_name = '予算管理表')
Python/matplotlibでグラフに矢印(→)を入れる方法
テストデータのような予算管理表を年度毎に合計額を棒グラフにしたとき、最大値のラインとその差を矢印で表現したいってありますね。
Pythonでは、矢印はax.annotate()を使います。
早速、矢印を入れたグラフのコードは次のように書きます。
年度の合計金額の最大値(2021年度の金額)で横線を入れて、この横線と2022年度の金額の差を表現する矢印を引いています。
(言葉だと分かりづらいので、下のグラフを見てください。。)
#グラフのオブジェクトを定義
fig, ax = plt.subplots(figsize=(8, 4))
year_list = ['2021年度', '2022年度','2023年度']
#横軸の値
x = year_list
#縦軸の値
y = [df[year].sum() for year in year_list]
#グラフの作成
ax.bar(x, y, color='lightsteelblue', width=.5)
#グラフのタイトル、軸ラベルを設定
ax.set_title('予算の推移')
ax.set_xlabel('年度')
ax.set_ylabel('予算額')
#グラフの座標を設定
ax.grid(axis='x', color='blue', lw=0.5, linestyle='--', alpha = 0.2)
ax.grid(axis='y', color='blue', lw=0.5, linestyle='--', alpha = 0.2)
#横線を引く
ax.axhline(y=np.max(y), xmin=0.05, xmax=0.95,
color='red',
lw=2,
ls='--',
alpha=0.6)
#矢印の追加
ax.annotate(text='', xy=[1, y[1]], xytext=[1, np.max(y)],
arrowprops=dict(arrowstyle='<|-|>',
facecolor='red',
edgecolor='red'))
矢印の設定は、コードの最後の部分となります。
その他のコードは、次の記事で解説しています。
ax.annotate()の引数の設定としては、次の通りとなります。
・text:矢印にテキストを入れる時に設定。※今回はなし
・xy:矢印の終点。※今回は2022年度の金額の高さ
・xytext:矢印の始点。※今回は2021年度の金額(最大値)の高さ
・arrowprops:矢印の設定。dict型で設定
-arrowstyle:矢印のスタイル
-facecolor:矢印の内側の色
-arrowstyle:矢印の外側の色
他のスタイルの矢印の設定方法は、Mabplotlib公式ページを確認してみてください。
グラフは、次のようになります。
横線と矢印を使うと、グラフで強調したいところが分かりやすいですね。
これを見ると、2023年度の金額についても、同様に矢印を入れたくなりますよね?
同じようなコードを追加しても、もちろん書けますが、次はforループで矢印を書く方法をみていきます。
Python/matplotlibでグラフに複数の矢印(→)を入れる方法【仕事で使える】
次は、各年度の金額と最大値との差を表現する矢印をシンプルに書く方法を紹介します。
forループを使えば、簡単にこれを実現することができます。
実際のコードは次のようになります。
#複数の矢印の追加
for i in range(len(x)):
ax.annotate('', xy=[i, y[i]], xytext=[i, np.max(y)],
arrowprops=dict(arrowstyle='<|-|>',
facecolor='red',
edgecolor='red'))
x軸の値の数だけforループを回します。
forループ内の処理としては、上の矢印を入れる方法と同様になります。
この結果は、次の通りとなります。
うまく矢印が入ってますね。
これによっては、x軸の値が増えても簡単に複数の矢印を入れることができます。
こんな感じで、Pythonでは簡単にグラフに矢印を入れられるので、ぜひぜひ仕事でも試してみてください。
以上、Python / matplotlibでグラフに矢印を入れる方法を説明してきました。
最後まで読んでいただき、ありがとうございました。