如何用Seaborn绘制DataFrame多列测量值频次对比柱状图
多列测量值频次分组柱状图实现
问题需求
基于含3列测量值的DataFrame绘制整合式柱状图:
- X轴为固定测量值(0.50、0.75、1.00、1.50)
- 每个X值对应3个柱状条,分别代表DataFrame的3列(不同测量设备)
- Y轴为对应测量值的出现频次
解决方案
核心是将宽格式DataFrame转换为长格式,再用Seaborn绘制分组频次图。
完整代码示例
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 初始化数据 data2 = [[0.5, 0.5, 0.75], [1, 0.75, 0.75], [0.5, 0.75, 0.75], [0.75, 1, 0.75], [0.75, 1, 0.5] , [0.5, 1.5, 0.5]] df2 = pd.DataFrame(data2, columns=['Aw1', 'Aw2', 'Bw1']) # 转换为长格式数据:将列名转为"设备"字段,测量值转为"测量值"字段 df_melted = df2.melt(var_name='设备', value_name='测量值') # 绘制分组频次柱状图 sns.catplot(x='测量值', hue='设备', data=df_melted, aspect=2, kind='count') plt.title('各设备测量值频次分布') plt.ylabel('出现频次') plt.show()
关键步骤说明
- 数据格式转换:使用
pd.melt()将原宽格式数据(每列对应一个设备)转为长格式,生成设备和测量值两个字段,这是Seaborn绘制分组图的标准数据结构。 - 绘制分组图:
sns.catplot()中通过hue='设备'参数,让每个测量值对应的不同设备数据以不同颜色的柱状条展示,自动完成分组统计。 - 图表优化:添加标题、修改Y轴标签,提升图表可读性。
定制化样式(可选)
如果需要更灵活控制图表尺寸和柱状条样式,可使用countplot配合plt.subplots:
plt.figure(figsize=(10, 6)) sns.countplot(x='测量值', hue='设备', data=df_melted, width=0.7) plt.title('各设备测量值频次分布') plt.ylabel('出现频次') plt.show()
内容的提问来源于stack exchange,提问作者Sitar4
相关产品推荐
相关产品推荐

