【问题标题】:Seaborn FacetGrid 'hue' changed number of barsSeaborn FacetGrid 'hue' 改变了条数
【发布时间】:2021-02-26 06:53:21
【问题描述】:

我想用 seaborn 绘制 facetgrid 并使用“hue”来识别数字的大小。但是,当我包含“色调”时,条数会发生变化。

生成数据

import pandas as pd
import numpy as np
import seaborn as sns

np.random.seed(0)

groups = ('Group 1', 'Group 2')
means = ('Low', 'High', 'Mid')
index =  pd.MultiIndex.from_product(
    [groups, means], 
   names=['Group', 'Mean']
)
values = np.random.randint(low=20, high=100, size=len(index))
data = pd.DataFrame(data={'val': values}, index=index).reset_index()
data['is_positive'] = data['val'] > 75
    Group   Mean    val is_positive
0   Group 1 Low     64  False
1   Group 1 High    67  False
2   Group 1 Mid     84  True
3   Group 2 Low     87  True
4   Group 2 High    87  True
5   Group 2 Mid     29  False

如果我不使用“hue”,它会显示所有条形。但是,color_palette 未应用。

colors = ["red", "green"]
customPalette = sns.set_palette(sns.color_palette(colors))
g = sns.FacetGrid(data, col="Group", hue='is_positive', height=3, col_wrap=6, palette=customPalette)
g.map(sns.barplot, 'val', 'Mean')

如果我使用“色调”,颜色是正确的,但它只显示两个条。

理想的图表将显示所有条形并应用颜色调色板。请帮忙解释一下。谢谢!

【问题讨论】:

    标签: pandas seaborn


    【解决方案1】:

    我认为您需要将order 选项传递给barplot

    g = sns.FacetGrid(df, col="Group", height=3, hue='is_positive', 
                      col_wrap=6, palette=customPalette)
    g.map(sns.barplot, 'val', 'Mean', order=['Low','Mid','High'])
    

    输出:

    【讨论】:

    • 我不知道为什么,但是从删除 order 时 seaborn 泵出的警告来看,我的猜测是 seaborn 不会自动对齐 hue 的顺序,导致跨轴错位。
    • 您需要注意第二段 here 中的建议,以及橙色大框中的警告。
    【解决方案2】:

    seaborn.FacetGrid 警告建议使用 relplot() 或 catplot()

    警告

    当使用 seaborn 函数推断语义映射时 数据集,必须注意同步这些映射 方面(例如,通过使用调色板字典或设置定义色调映射 变量的数据类型分类)。在大多数情况下,它将是 最好使用图形级函数(例如 relplot() 或 catplot()) 而不是直接使用 FacetGrid。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2020-02-04
      • 2016-05-15
      • 2018-12-28
      • 2019-01-23
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多