我有一个数据框架,它看起来像
Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6 Q1_7 Q1_8 Q1_9 Q1_10
0 0 0 1 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1 0
2 0 0 0 0 0 1 0 0 1 0
3 1 0 1 0 1 0 0 0 0 0
4 0 0 1 0 0 0 0 0 0 0
列描述了一个问题的选项,例如,教授(Q1_1)、面包师(Q1_2)、屠夫(Q1_3)、水管工(Q1_4)等。
我希望用饼图和条形图来显示绝对和相对频率,说明所有列的绝对值和百分比,所以在这种情况下,将有10块饼和10个条形图;例如col= Q1_5,数值将是20%(2个项目)。
你需要将各列相加得到绝对频率。假设你使用pandas,你可以使用 df.sum()
的。然后你可以用matplotlib绘制结果。
对于一个快速的条形图,你可以使用
df.sum().plot(kind=bar)
我想明白了。
首先,你需要 "将所有的列平移为一列"。
df['Q1_all'] = (df.iloc[:, 0:] == 1).idxmax(1)
然后应用任何函数
cross_tab_Q1_group = pd.crosstab([df.Q1_all], [df.group])
cross_tab_Q1_group.plot(kind="barh", stacked=True, color=[sns.xkcd_rgb['medium green'], sns.xkcd_rgb["pale red"], sns.xkcd_rgb["denim blue"]])