【问题标题】:Cannot create a formatted pandas multindex barplot?无法创建格式化的 pandas 多索引条形图?
【发布时间】:2021-12-01 05:30:05
【问题描述】:

我有一个看起来像这样的多索引 pandas 数据框:

            cis-aconitate  cis-aconitate +1  ...  cis-aconitate +5  cis-aconitate +6
     GROUP                                   ...                                    
mean ADE         1.481639          0.696184  ...          0.193380          0.018597
     VEH         1.000000          1.000000  ...          1.000000          1.000000
std  ADE         0.307211          0.209418  ...          0.114939          0.020461
     VEH         0.573162          0.412895  ...          0.384928          0.752999

使用这样的索引:

MultiIndex([('mean', 'ADE'),
            ('mean', 'VEH'),
            ( 'std', 'ADE'),
            ( 'std', 'VEH')],
           names=[None, 'GROUP'])

我正在尝试在 y 轴上创建平均值的条形图。使用df.unstack() 然后df.plot.bar() 我可以得到这个: 但我最终想要的是只有手段,在 x 轴上使用“顺乌头,顺乌头 +1 ...”,分组为 ADE 和 VEH(每种颜色),然后是“std”值用于误差线。事实证明,这非常棘手。任何人都可以帮忙吗?提前致谢!

【问题讨论】:

    标签: python pandas bar-chart multi-index


    【解决方案1】:

    为避免对数据框进行大量转换并基于this example,我找到的解决方案是使用cross section 将均值与错误分开。

    import pandas as pd
    
    # Example data
    index = pd.MultiIndex.from_tuples([('mean', 'ADE'), ('mean', 'VEH'), ( 'std', 'ADE'), ('std', 'VEH')], names=[None, 'GROUP'])
    
    df = pd.DataFrame({'cis-aconitate': [1.5, 1, 0.3, 0.2], 'cis-aconitate +1': [0.7, 1, 0.2, 0.4]}, index=index)
    df
    
    # Split dataframe into means and errors
    means = df.xs('mean').transpose()
    errors = df.xs('std').transpose()
    
    means.plot.bar(yerr=errors)
    
    

    【讨论】:

    • 如果您有权访问源自此数据帧的数据,seaborn 也可能是一个不错的选择,因为您可能只需要融合数据并拥有一个“组”列。默认情况下,它将误差条绘制为置信区间,但您可以指定标准偏差。
    • 这非常成功!谢谢!带有转置的横截面是关键。我也一定会探索将 seaborn 与长格式数据一起使用。可能会导致更优雅的代码。非常感谢您的帮助!
    猜你喜欢
    • 2016-03-18
    • 2023-03-08
    • 2015-11-10
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2019-10-28
    • 2021-05-15
    相关资源
    最近更新 更多