【问题标题】:How can multiple groups of data be put in a single bar chart?如何将多组数据放在一个条形图中?
【发布时间】:2023-03-10 00:13:02
【问题描述】:

我有一个简单的每餐时间营养值数据框:

import pandas as pd
import seaborn as sns

df = pd.DataFrame(
         [
                 [ 0.0367354,  0.0484153 ,  0.0894831 , -0.131245 , -0.0961374, -0.049433  ,  0.142161      ,  0.0884946, 'breakfast'],
                 [-0.0603371, -0.00281495, -0.00470734,  0.100897 ,  0.0700709,  0.0259078 , -0.147854      , -0.0594319, 'lunch'    ],
                 [-0.0141466,  0.042048  ,  0.0411203 ,  0.0871926,  0.057405 , -0.00814915, -0.00340751    , -0.207868 , 'dinner'   ],
         ],
         columns=['calories', 'carbs'    , 'fat'      , 'fiber'   , 'protein' , 'salt'     , 'saturated-fat', 'sugar'   , 'mealtime' ]
)

如何创建一个条形图,其中包含每个膳食组的营养值条形/分布,有点像下面的条形图(其中性别对应于膳食组)?

我正在想象一个在概念上类似于以下(不正确)命令的命令:

sns.barplot(df.columns.drop('mealtime'), df.drop('mealtime', axis=1).values, hue=df['mealtime'], data=df);

【问题讨论】:

    标签: pandas dataframe bar-chart seaborn


    【解决方案1】:

    设置索引后可以用transpose完成

    df.set_index('mealtime').T.plot(kind='bar')
    

    【讨论】:

    • 非常好,感谢您的解决方案。这是一个漂亮的单线。
    【解决方案2】:

    在您的情况下,您可以融合您的数据框,使其更易于使用:

    temp = pd.melt(df, 'mealtime')
    

    输出:

        mealtime    variable    value
    0   breakfast   calories     0.036735
    1   lunch       calories    -0.060337
    2   dinner      calories    -0.014147
    3   breakfast   carbs        0.048415
    4   lunch       carbs       -0.002815
    

    然后绘制:

    sns.set()
    plt.figure(figsize=(16,4))
    sns.barplot('variable', 'value', hue='mealtime', data=temp)
    

    【讨论】:

    • 太棒了,感谢一百万的解决方案和关于融化的详细信息。
    • 任何时候@BlandCorporation,pd.melt 都是一个非常方便的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多