如何按Type列分组绘制q值统计的横向barplot柱状图
按Type分组绘制横向柱状图的实现方法
核心逻辑
你需要先按q和Type两个维度统计分组计数,再基于统计结果绘图,以下是两种可行实现方案:
方案1:基于pandas内置绘图工具(无需额外安装库)
直接用pd.crosstab统计分组频数后绘图,代码如下:
import pandas as pd import matplotlib.pyplot as plt # 构造原始DataFrame studentData = { 0: {'stylevel': 'bachelor', 'q': 'agree', 'Type': 'Nascent'}, 1: {'stylevel': 'bachelor', 'q': 'very', 'Type': 'Nascent'}, 2: {'stylevel': 'master', 'q': 'very', 'Type': 'Active'}, 3: {'stylevel': 'master', 'q': 'agree', 'Type': 'Active'}, 4: {'stylevel': 'master', 'q': 'agree', 'Type': 'Student'}, } dfObj = pd.DataFrame(studentData).T # 统计每个q取值下不同Type的数量 group_count = pd.crosstab(index=dfObj['q'], columns=dfObj['Type']) # 绘制分组横向柱状图 group_count.plot(kind='barh', figsize=(7, 3)) # 可选:补充图表标注 plt.xlabel('样本数量') plt.ylabel('q字段取值') plt.legend(title='Type分组') plt.show()
运行后会自动生成每个q类别下对应Student、Active、Nascent三个分组的横向柱状图。
方案2:基于seaborn库绘制(样式更丰富)
如果需要更灵活的样式调整,可以使用seaborn的countplot接口,无需提前手动统计分组计数,seaborn会自动完成计算,代码如下:
import seaborn as sns import matplotlib.pyplot as plt # 此处沿用上面构造的dfObj sns.countplot( data=dfObj, y='q', hue='Type' ) plt.xlabel('样本数量') plt.ylabel('q字段取值') plt.legend(title='Type分组') plt.show()
参数说明:
y='q':指定纵轴为q字段取值,生成横向柱状图hue='Type':指定按Type字段的不同取值拆分柱子,生成分组效果
内容的提问来源于stack exchange,提问作者fredooms
相关产品推荐
相关产品推荐

