PythonTech Blog 

Matplotlib-y軸が反転したグラフの描き方

 
こんにちは、インターンの菅野です。最近、お腹のへりが早いです。

ところで、吊り下げグラフ・上から下がってるグラフ・X軸が上にあるグラフ・逆さまグラフ・up side down グラフ、…呼び方がわからないのですが、上のグラフのようにy軸を反転させて棒グラフを描く機会がありました。

描く方法はシンプルなのですが、一切の情報がなかったため、自分は多くの時間を使ってしまいました。

このようなグラフをこの記事では「吊り下げグラフ」と呼ぶことにします。
吊り下げグラフの描き方をまとめておきたいと思います。

使用するデータ

このようなアクセス数と新規登録者のデータを用いて描画していきます。

 pageviewregister
2018-03-011015612734
2018-03-02986513130
2018-03-031185972927
2018-03-041200733103
2018-03-051013033240
2018-03-06984373156
2018-03-071016573616
2018-03-08975863218
2018-03-09976013154
2018-03-101190952982

 

吊り下げグラフの描き方

吊り下げグラフを描画するのに必要なのは、set̲ylim(min, max)を、set̲ylim(max, min)に変えることです。

import matplotlib.pyplot as plt
from matplotlib import cm

fig, ax1 = plt.subplots()
# 棒グラフを描く
ax1.bar(frame.index.to_pydatetime(), frame["register"],
        color=cm.Accent.colors[4], label="新規登録者数")
# y軸の最小値、最大値を決める。(逆さまにするために、最大値, 最小値という順番で指定する)
ax1.set_ylim([50000, 0])

# 凡例をつける
ax1.legend(loc=6)


これを知るまで、y軸の値をマイナスにして自作関数でラベルを無理やり書き換える、、なんてことをやっていました。。汗

 

活用例

fig, ax1 = plt.subplots()

# 棒グラフを描きはじめる
ax1.bar(frame.index.to_pydatetime(), frame["register"],
        color=cm.Accent.colors[4], label="新規登録者数")
# y軸の最小値、最大値を決める。(逆さまにするために、最大値, 最小値という順番で指定する)
ax1.set_ylim([50000, 0])

# 2軸を関連させ、新たな図を描きはじめる
ax2 = ax1.twinx()
ax2.set_ylim(0, 1000000)
ax2.bar(frame.index.to_pydatetime(), frame["pageview"],
        color=cm.tab20.colors[3], label="PV数")

# 凡例
# グラフの本体設定時に、ラベルを手動で設定する必要があるのは、barplotのみ。plotは自動で設定される>
handler1, label1 = ax1.get_legend_handles_labels()
handler2, label2 = ax2.get_legend_handles_labels()
# 凡例をまとめて出力する
ax1.legend(handler1 + handler2, label1 + label2, loc=6, borderaxespad=0.)

# y軸に着色する
ax1.tick_params(axis='y', colors=cm.Accent.colors[4])
ax2.tick_params(axis='y', colors=cm.tab20.colors[3])

2軸グラフとのコンボ利用で見やすいグラフが描けそうです。

記事では、2軸のplot描画の方法をまとめました。
合わせてご覧ください。

Matplotlib-2軸グラフの書き方

このページをシェアする:



DATUM STUDIOは、クライアントの事業成長と経営課題解決を最適な形でサポートする、データ・ビジネスパートナーです。
データ分析の分野でお客様に最適なソリューションをご提供します。まずはご相談ください。