ごはんと飲み物は紙一重

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

matplotlibで大きい順にソートしてグラフにする方法【plt.xticks】

わりと悩んでしまったので備忘録代わりに。

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

id_x1 = val_counts[0][0:5].index.astype(str)
id_y1 = val_counts[0][0:5].values
plt.bar(id_x1, id_y1)

f:id:ST_ha1cyon:20171025194302p:plain

このx軸のlabelが意図せずソートされてしまう現象をなんとかしたいわけですよ。
別に無理してやる必要はないのかもしれないけど、可視化の美学を求めてしまうのは、データ分析界隈にいるが故の病。

というわけでこれを改善しようというお話。

上記のソースは出力したいSeriesから単純にindexを取り出してastypeでstringに変換しただけ。それでもソートしてくるので、xticksで上書きしてしまおうという魂胆。

改善後のコードはこちら。

id_x1 = range(0,5)
id_y1 = val_counts[0][0:5].values
plt.xticks(range(0,5), val_counts[0][0:5].index)
plt.bar(id_x1, id_y1)

具体的に何をしたのかというと、x軸についてはrangeで通常出力してしまって、xticksでlabelを書き換えてます。そうすることで大きい順に並んだグラフができるようです(もっときれいな書き方ありそうだから分かる人はコメントしていただけると泣いて喜びます)。

f:id:ST_ha1cyon:20171025194848p:plain

同じようなことが起きないようにブログに残したけど、同じようにやり方忘れてしまってぐぐったら自分のブログがヒットするとかそういうことがないようにしたいなぁ・・・頑張ろ・・・