ごはんと飲み物は紙一重

あんまり更新できてないです

matplotlibで複数の棒グラフを並べて出力するのに苦戦したお話

明日はインターンさせていただいているちゅらデータ株式会社での勉強会があり、今週は私が発表担当なので資料を作成することになっていたので資料を作成していたのですが、意外に突っかかって2時間ほどかけてしまったので、備忘録代わりに記事にしようかと。

何が言いたいかというと、

f:id:ST_ha1cyon:20170928225033p:plain

こんな感じで複数の列データを同じx軸上にプロットしたいというわけです。 調べていると幾つかソースは出て来るもどうもうまくいかない・・・うまく行かなかったときのソースが以下・・・

plt.figure(figsize=(20,8))
plt.xlabel("payment")
plt.ylabel("count")

x = np.arange(0,30000,1000)
y1 = np.array(user_num6) # user_numは数値が格納されたリスト
y2 = np.array(user_num7)

plt.bar(x ,y1 , width=400, align="center")
plt.bar(x ,y2 , width=400, align="center")

plt.xticks(np.arange(0,30000,1000), np.arange(0,30000,1000))
plt.legend(loc="best")

その結果がこちら

f:id:ST_ha1cyon:20170928225304p:plain

同じ列上に棒グラフが重なって意味がわからない!!どうしてこうなるんだ!!まだ夜の21時だっていうのに解決策が見つからずイライラ。資料作成は仕事終わりにやるものではない・・・

そしてようやくできた正しいソースがこちら。

plt.figure(figsize=(20,8))
plt.xlabel("payment")
plt.ylabel("count")

x1 = np.arange(0,30000,1000)
x2 = np.arange(400, 30400, 1000)
y1 = np.array(user_num6)
y2 = np.array(user_num7)

plt.bar(x1 ,y1 , width=400, align="center")
plt.bar(x2 ,y2 , width=400, align="center")

plt.xticks(np.arange(200,30200,1000), np.arange(0,30000,1000))
plt.legend(loc="best")

どうやら一つの軸に2種類のグラフをプロットしているわけではなく、自分の手でプロットする軸を変更して2つ目のグラフをプロットして、それにともなってグラフの目盛りも1つ目と2つ目の間になるように変更しているみたいですね。

ずっと前者のほうだと思っていたのですっかり意味がわからなかったわけでした。なんでもモジュールの関数だよりにしていた自分を反省・・・こういう困ったときに色んな考え方ができるようにならないといけないなと思った23時でした。

P.S.グラフはようやく完成しましたが、資料は完成していないのでもう少し作業です(シクシク