首页 > 解决方案 > 如何使用列名作为 x 轴在 seaborn 中生成分组条形图?

问题描述

当我得到答案时,我会踢自己,但我特别坚持如何塑造我的数据框,以便我可以使用 seaborn 的分组条形图功能。具体来说,我希望除标签之外的所有列都成为 x 轴上的特征,并且标签列用于识别每个特征中的分组。设置hue="Label"只允许我选择一列进行分析。我也尝试将标签列设置为索引,但仍然坚持如何在同一个图表上绘制所有列。

import pandas as pd
x={'COL1A1': {0: 0.2833579201349264, 1: 0.2322427823226963, 2: 0.2234481446366325, 3: 0.1713271996532782, 4: 0.1706736234267313, 5: 0.2168315586062242, 6: 0.386938532513836, 7: 0.167685047602447, 8: 0.1977671674206828}, 'COL1A2': {0: 0.222790260323129, 1: 0.1166248272594191, 2: 0.1213743347438685, 3: 0.07539620593306488, 4: 0.08646408377942773, 5: 0.108099072823806, 6: 0.2253577413174345, 7: 0.07159756158725838, 8: 0.1270212586927018}, 'COL2A1': {0: 0.1177084047971632, 1: 0.03015204272416201, 2: 0.004641911872949625, 3: 0.01252004151673348, 4: 0.004759507378467226, 5: 0.003771667678394546, 6: 0.002448538354908414, 7: 0.001632213095114248, 8: 0.002689169456628402}, 'COL3A1': {0: 0.07704183889927835, 1: 0.05669627792749389, 2: 0.06795005563919726, 3: 0.06820333109906228, 4: 0.06203084779960908, 5: 0.07143978702722126, 6: 0.1075883977017228, 7: 0.02325396568594267, 8: 0.04019275033210956}, 'COL4A1': {0: 0.0006352541367984844, 1: 0.0003530402330976581, 2: 0.0002599951224169368, 3: 0.001068552848567594, 4: 0.0004283762535061793, 5: 0.0001828315856020066, 6: 0.0007922674417145188, 7: 0.00121122295479909, 8: 0.001242371369354}, 'ELN': {0: 0.009590516917155572, 1: 0.01128331824126868, 2: 0.001767761425242979, 3: 0.001335871032556882, 4: 0.0006832478350178915, 5: 6.156058814047895e-05, 6: 4.641718558203665e-05, 7: 0.0007894520340958474, 8: 0.0}, 'FN1': {0: 0.2916957262974497, 1: 0.2991922242655564, 2: 0.2604020611939179, 3: 0.3750793271445748, 4: 0.3947768543681868, 5: 0.3544762810478779, 6: 0.2691587576010813, 7: 0.1879022759492052, 8: 0.2388673352144315}, 'Label': {0: 'DAT', 1: 'DAT', 2: 'DAT', 3: 'DCT', 4: 'DCT', 5: 'DCT', 6: 'TCP', 7: 'TCP', 8: 'TCP'}}    
df=pd.DataFrame(x)

任何帮助,将不胜感激。

数据图像:

实际数据框

标签: pythondataframeseaborn

解决方案


ECMxx=pd.read_excel('ECMx.xlsx', sheet_name='Sheet2')
data = ECMxx.melt('Label', var_name='ECM', value_name='Intensity/Total Intensity')
fig = plt.figure(figsize=(10,10))
sns.set(font_scale = 1.2)
sns.set_style("white")
ax=sns.barplot(y='ECM', x='Intensity/Total Intensity', hue='Label', data=data)

产品


推荐阅读