matplotlib의 막대 그래프에 누적 비율 추가

matplotlib 그래프에 누적 비율을 추가하는 시리즈. 막대 그래프에 누적 비율을 추가. 완성 플롯은 이쪽


가리키면, matplotlib.bar()bar 라고 이름을 치는 것에 비해 범주형 변수를 그대로 지정할 수 없기 때문에, x축의 어디에 플롯할까 가르쳐 줄 필요가 있다. 구체적으로는, numpy.arange() 등으로 카테고리의 수만큼 연속번호·인덱스를 생성해 x축의 장소를 가르쳐 주고 있다.
"""maptlolibの棒グラフに累積比率を追加する例"""
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

# seabornスタイルでかっこよくプロットする
# % matplotlib inline
sns.set(style="darkgrid", palette="muted", color_codes=True)

# トイデータ生成
df = pd.DataFrame({'group': ['A', 'B', 'C', 'D', 'E'],
                   'value': [20, 30, 10, 50, 40]})

# x軸のプロット位置を指定
# 勝手にやってくれないから生成する必要あり。
x_idx = np.arange(df.shape[0])

# プロット用のfigとaxを取得
fig, ax = plt.subplots()

# 棒グラフを追加(第1軸)
bar = ax.bar(left=x_idx,
             height=df['value'],
             align='center',
             tick_label=df['group'],
             alpha=0.7
             )

# 第2軸用の累積比率を計算
df['accumulative_ratio'] = df['value'].cumsum() / df['value'].sum()

# 第2軸に累積の折れ線グラフを追加
ax2 = ax.twinx()
line = ax2.plot(x_idx,
                df['accumulative_ratio'],
                ls='--',
                marker='o',
                color='r'
                )
ax2.grid(visible=False)
plt.show()

범례 등 추가한 완성판의 코드는 Gist 에 줍니다.

좋은 웹페이지 즐겨찾기