Excelなら一発なのでmatplotlibにも帯グラフの関数あるのかなと調べてみたけどない模様。
積み上げグラフ (stacked bar chart) の合計値が1になるように正規化して表示する。
import numpy as np
import matplotlib.pyplot as plt
N, K = 4, 3
data = np.random.rand(N, K)
tick_labels = ["a", "b", "c", "d"]
labels = ["x", "y", "z"]
normalized = data / data.sum(axis=1, keepdims=True)
cumulative = np.zeros(N)
tick = np.arange(N)
for k in range(K):
color = plt.cm.viridis(float(k) / K, 1)
plt.barh(tick, normalized[:, k], left=cumulative, color=color, label=labels[k])
# plt.bar(tick, normalized[:, k], bottom=cumulative, color=color, label=labels[k])
cumulative += normalized[:, k]
plt.xlim((0, 1))
# plt.ylim((0, 1))
plt.yticks(tick, tick_labels)
# plt.xticks(tick, tick_labels)
plt.legend()
plt.show()
![Bar chart](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F139809%2F41b1d35f-06e3-1c62-07c4-0f8713e80b6f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=99d6a14824bdf571d0847710d6717796)
参考:https://de.dariah.eu/tatom/topic_model_visualization.html