【问题标题】:Multiple Seaborn Heatmaps from Pandas Dataframe来自 Pandas Dataframe 的多个 Seaborn 热图
【发布时间】:2021-04-18 18:05:12
【问题描述】:

我有一个看起来像这样的 Pandas 数据框:

store_id    days       times                     rating
    100     monday     '1:00pm - 3:00pm'         0
    100     monday     '3:00pm - 6:00pm'         1
    100     monday     '6:00pm - 9:00pm'         2
    ...
    store n      

那里有大约 60 家商店,评分范围从 0 到 2。我想创建一个 6x5 网格的 Seaborn 热图,每个商店一张热图。我希望 x 轴为 days,y 轴为 times

我试过了:

f, axes = plt.subplots(5,6)
i=0
for store in df['store_id']:
    sns.heatmap(data=df[df['store_id']==store]['rating'], ax=axes[i])
    i+=1

这会创建 5x6 网格,但会产生错误(“条件与输入之间的形状不一致...”)。最好的方法是什么?

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

    对于热图,您需要转置/旋转数据,以便 days 变为列(x 轴),times 变为索引:

    f, axes = plt.subplots(5,6)
    
    # flatten axes for looping
    axes = axes.ravel()
    
    # use groupby to extract data faster
    for ax, (store, data) in zip(axes, df.groupby('store_id')):
        pivot = data.pivot_table(index='times', columns='days', values='rating')
        sns.heatmap(data=pivot, ax=ax)
    

    【讨论】:

    • 谢谢。这似乎有效。我试图通过在sns.heatmap(data=pivot, ax=ax) 之前添加plt.figure(figsize=(10,10)) 来调整热图的大小,但这似乎不起作用。有没有更好的方法来调整大小?
    • figsize 传递给plt.subplots,这是您定义图形实例fig 的地方。
    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 2019-05-16
    • 2016-11-21
    • 2021-11-01
    • 2016-07-08
    • 1970-01-01
    • 2021-07-24
    • 2016-11-03
    相关资源
    最近更新 更多