機械学習とその他

機械学習したいマン

水平棒グラフの作成をした

アドベントカレンダー16日目です。

adventar.org

今日はmatplotlibで水平棒グラフを作成しました。

水平棒グラフとは

通常イメージする棒グラフは縦方向ですが、水平棒グラフは横に棒グラフが伸びていきます。こんな感じのが水平棒グラフです。 f:id:looseleaf0727:20171217002839p:plain

今回は、水平棒グラフをmatplotlibで作成したのでそれについて書いていきます。

水平棒グラフの作り方

plt.barhを使うことで作成できます。ただし、plt.plotとは少し値の指定が違うので気をつけてください。

いつも通り公式のドキュメントを見ましょう。 matplotlib.axes.Axes.barh — Matplotlib 2.1.1 documentation

必要となる値は、棒グラフの座標と高さです。 今回はサンプルのデータとして、適当にa-zの文字を1,000個選び、その個数を元に水平棒グラフを作成しました。 要素の種類の数だけ座標を作り、counterから個数とラベルをとりました。

import numpy as np
from collections import Counter
import matplotlib.pyplot as plt
import string
%matplotlib inline

chars = string.ascii_uppercase
char = [chars[x] for x in ary]

counter = Counter(char)
counter = counter.most_common()

y = np.arange(len(counter))
width = [counter[x][1] for x in range(len(counter))]
label = [counter[x][0] for x in range(len(counter))]

plt.figure(figsize=(10,8),dpi=100)
plt.barh(y, width, tick_label=label)
plt.tick_params(labelsize = 15)
plt.title("count")
plt.xlabel("number")
plt.grid()
plt.show()

本当はメルカリのデータでやってたんですが、載せていいのかわからないのでダミーデータにしたらゴミっぽいグラフになりました。

今回のコード

参考

Pythonの大文字と数字によるランダムな文字列の生成 - string - random | CODE Q&A [日本語]