如何用Pandas选取列对并绘制带分组标签的柱状图
解决方案:绘制分组对比柱状图
我来帮你搞定这个需求!咱们用Pandas和Matplotlib就能轻松实现这个分组柱状图,下面是具体的步骤和代码:
步骤1:整理目标数据
首先得把DataFrame里的列对整理成适合绘图的格式,把每组(Reading/Writing)的两个群体数据对应到各自的类别上:
import pandas as pd import matplotlib.pyplot as plt # 假设你的DataFrame变量名为df,替换成你实际的变量名即可 # 定义列对与对应的X轴标签 column_groups = [ (['non_read_avg', 'rel_read_avg'], 'Reading'), (['non_write_avg', 'rel_write_avg'], 'Writing') ] # 提取绘图所需的数值 category_labels = [] non_religious_data = [] religious_data = [] for cols, label in column_groups: category_labels.append(label) # 这里默认取第一行数据,如果你需要取均值/中位数,换成df[cols[0]].mean()即可 non_religious_data.append(df[cols[0]].iloc[0]) religious_data.append(df[cols[1]].iloc[0])
步骤2:绘制分组柱状图
接下来用Matplotlib绘制并列柱状图,用颜色区分群体,调整布局让图表更清晰:
# 设置柱子宽度,避免重叠 bar_width = 0.35 # 设置两组柱子的X轴位置 x_pos1 = range(len(category_labels)) x_pos2 = [x + bar_width for x in x_pos1] # 绘制非宗教群体柱子(绿色) plt.bar(x_pos1, non_religious_data, width=bar_width, color='green', label='non-religious') # 绘制宗教群体柱子(蓝色) plt.bar(x_pos2, religious_data, width=bar_width, color='blue', label='religious') # 设置X轴标签,让标签居中在两组柱子中间 plt.xticks([x + bar_width/2 for x in x_pos1], category_labels) # 设置Y轴标签(根据你的数据含义调整,比如"平均表现得分") plt.ylabel('Average Performance') # 添加图表标题 plt.title('Religious vs Non-Religious Group Comparison') # 显示图例 plt.legend() # 自动调整布局,避免标签被截断 plt.tight_layout() # 展示图表 plt.show()
额外说明
- 如果你的DataFrame有多行数据(比如不同样本/维度),可以循环处理每行,或者把
iloc[0]改成mean()/median()来展示整体统计值。 - 要是有更多类似的列对(比如('non_speak_avg','rel_speak_avg')对应"Speaking"),只需要在
column_groups列表里添加新的元组,代码会自动适配。 - 颜色可以自定义,比如用
#2ecc71(清新绿)代替green,#3498db(天蓝)代替blue,让图表更好看。
这样就能得到你想要的分组对比柱状图啦,每组对应X轴的一个类别,不同颜色清晰区分两个群体~
内容的提问来源于stack exchange,提问作者user7740495
相关产品推荐
相关产品推荐

