如何将多组数据放入单个条形图中?

时间:2019-08-21 18:58:13

标签: pandas dataframe bar-chart seaborn

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

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);

2 个答案:

答案 0 :(得分:1)

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

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)

enter image description here

答案 1 :(得分:1)

设置索引后可以用transpose完成

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

enter image description here