実現したいこと
現在,様々なサイトを参考に,1つの要素(教科)を積み上げ棒グラフで図示することはできているのですが(ただ凡例は表示されず),これを指定した要素全てで横軸積み上げ棒グラフにまとめたいです。
修正点
ご指摘をいただき,横軸積み上げ棒グラフにして,2つまでの要素を図示できました。英語を同様に追加するとエラーが出てしまうため,3つ以上で図示する方法をご教示いただきますと嬉しい限りです。
データの詳細
使用するデータは,下記のような授業アンケートで,各教科に対して「満足」「やや満足」「どちらとも言えない」「やや不満」「不満」という回答が格納されております。
生徒ID | 性別 | 国語 | 数学 | 英語 | 社会 | 理科 |
---|---|---|---|---|---|---|
1 | 男性 | 満足 | やや満足 | 満足 | どちらとも言えない | やや不満 |
2 | 男性 | 不満 | 満足 | 満足 | 不満 | 満足 |
3 | 女性 | やや満足 | 満足 | 満足 | 不満 | やや不満 |
… | … | … | … | … | … | … |
100 | 女性 | 満足 | どちらとも言えない | やや不満 | 満足 | やや満足 |
該当のソースコード
python
1import matplotlib.pyplot as plt 2import japanize_matplotlib 3 4# カテゴリの順番を定義 5category_order = ["満足","やや満足","どちらとも言えない","やや不満","不満"] 6 7# カテゴリの順番に基づいてデータをソート 8tmp = df[["国語", "数学", "英語", "社会", "理科"]].apply(lambda x: x.value_counts(normalize=True)).reindex(category_order).reset_index() 9 10width = 0.4 # 棒の幅 11y = [1, 2] # y軸の位置 12 13left1 = 0 14left2 = 0 15colors = ["skyblue", "steelblue", "deepskyblue", "royalblue", "lightsteelblue"] # 各カテゴリに対する色のリスト 16 17for i in range(tmp.shape[0]): 18 plt.barh(y[0], tmp["国語"][i], left=left1, height=width, label="国語", color=colors[i % len(colors)]) 19 plt.barh(y[1], tmp["数学"][i], left=left2, height=width, label="数学", color=colors[i % len(colors)]) 20 left1 += tmp["国語"][i] 21 left2 += tmp["数学"][i] 22 23plt.plot([0, 0], [0, 3], color='#00000000') 24plt.yticks(y, ["国語", "数学"]) 25 26# 凡例を表示 27#plt.legend() 28 29plt.show()
試したこと
python
1left1 = 0 2left2 = 0 3left3 = 0 4colors = ["skyblue", "steelblue", "deepskyblue", "royalblue", "lightsteelblue"] # 各カテゴリに対する色のリスト 5 6for i in range(tmp.shape[0]): 7 plt.barh(y[0], tmp["国語"][i], left=left1, height=width, label="国語", color=colors[i % len(colors)]) 8 plt.barh(y[1], tmp["数学"][i], left=left2, height=width, label="数学", color=colors[i % len(colors)]) 9 plt.barh(y[2], tmp["英語"][i], left2=left3, height=width, label="英語", color=colors[i % len(colors)]) 10 left1 += tmp["国語"][i] 11 left2 += tmp["数学"][i] 12 left3 += tmp["英語"][i] 13 14plt.plot([0, 0], [0, 3], color='#00000000') 15plt.yticks(y, ["国語", "数学","英語"])
IndexError: list index out of range
補足

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/15 14:58