カテゴリーデータを扱う。カテゴリーデータを可視化するときにも棒グラフは使える。
うどん | ラーメン | そうめん | そば |
---|---|---|---|
40% | 30% | 20% | 10% |
を表示したかったが、現状python3に移行できていないのでラベルはa,b,c,dにする。
縦棒グラフの場合
from __future__ import division import numpy as np label = ['a','b','c','d'] data = np.array([40, 30, 20, 10]) def bar_plot(data, label): import matplotlib.pyplot as plt data = data/data.sum()*100 color = map(lambda x: str(x/data.shape[0]), range(data.shape[0])) offset = 0 for i in range(data.shape[0]): #plt.bar(left, height, width=0.8, bottom=None, hold=None, **kwargs) plt.bar(0, data[i], width=0.2, bottom=offset, color=color[i], label=label[i]) offset += data[i] plt.xlim(-0.1,0.3) plt.tick_params(labelbottom="off") plt.ylabel('%') plt.legend() plt.show() bar_plot(data, label)
横棒グラフの場合
def barh_plot(data, label): import matplotlib.pyplot as plt data = data/data.sum()*100 color = map(lambda x: str(x/data.shape[0]), range(data.shape[0])) offset = 0 for i in range(data.shape[0]): #plt.barh(bottom, width, height=0.8, left=None, hold=None, **kwargs) plt.barh(0, data[i], height=0.2, left=offset, color=color[i], label=label[i]) offset += data[i] plt.ylim(-0.1,0.35) plt.tick_params(labelleft="off") plt.xlabel('%') plt.legend() plt.show() barh_plot(data, label)
もうちょっといい可視化をしたい。具体的には、上下左右の余計なスペースを削って凡例をグラフ外に移動するなど。同様の可視化をするときにはlegend_guideを読んで改善する。