手頃なオプションがないので、全部手動でプロットしてやります。
python
1import numpy as np
2import pandas as pd
3import matplotlib.pyplot as plt
4
5df = pd.DataFrame({'Sample No.':[1,2,3,4,5,6],
6 'Black':[30,45,10,15,40,30],
7 'Green': [20,30,60,40,45,45],
8 'Red': [50,25,30,45,15,25]})
9df = df.set_index('Sample No.')
10ax = plt.subplot()
11df.plot.bar(stacked=True, color=['black', 'green', 'red'], ax=ax)
12ax.set_ylabel('Rate')
13
14
15# この方法で書いてから気づきましたが、axにできたpatches属性から座標を取った方がスマートかも。
16# でも逆に値を拾うのが面倒になると思って、とりあえずそのままです。
17# 座標の引き算という手はあるが、汚い……
18# 参考:
19# https://stackoverflow.com/questions/25447700/annotate-bars-with-values-on-pandas-bar-plots
20
21for i, row in df.iterrows():
22 cs = np.cumsum(row)
23 cs_ = np.hstack([[0], cs[:-1]])
24 positions = (cs + cs_) / 2
25 for v, p in zip(row, positions):
26 ax.text(i - 1, p, str(v), color="white",
27 horizontalalignment="center",
28 verticalalignment="center")
29
30plt.show()
31
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。