python - Hue 和共享 x 轴不起作用 Seaborn 构面网格

标签 python pandas matplotlib seaborn

我的目标是绘制一个堆积图表,显示 pandas df 的标准化值。使用下面的方法,Item 中的每个唯一值都有其自己的行。然后,我的目标是绘制一个堆积图,其中包含来自 Label 的标准化值,其中 Num 沿 x 轴。

但是,色调似乎为每个单独的 Item 传递一组不同的颜色。它们不一致,例如,Up 中的 A 为蓝色,而 Right 中的 A 为绿色。

我还希望分享每个 ItemNum 的 x 轴是一致的。这些值未与相应的 x 轴对齐。

import pandas as pd
import numpy as np

df = pd.DataFrame({      
    'Num' : [1,2,1,2,3,2,1,3,2,2,1,2,3,3,1,3],
    'Label' : ['A','B','C','B','B','C','C','B','B','A','C','A','B','A','C','A'],   
    'Item' : ['Up','Left','Up','Left','Down','Right','Up','Down','Right','Down','Right','Up','Up','Right','Down','Left'],        
   })

g = sns.FacetGrid(df, 
                  row = 'Item', 
                  row_order = ['Up','Right','Down','Left'],                           
                  aspect = 2, 
                  height = 4, 
                  sharex = True,
                  legend_out = True
                  )

g.map_dataframe(sns.histplot, x = 'Num', hue = 'Label', multiple = 'fill', shrink = 0.8, binwidth = 1)
g.add_legend()

最佳答案

直接使用FacetGrid可能会很棘手;它基本上是在轴上进行 groupb-by 和 for 循环,并且它不跟踪任何特定于函数的状态,以确保诸如“每个色调级别应使用什么顺序”之类的问题的答案是每个方面都相同。因此,您需要以某种方式提供该信息(即 hue_order 或传递调色板字典)。事实上,documentation中有一个警告达到这个效果。

但是您通常不需要直接使用FacetGrid;您可以使用图形级函数之一,该函数会为您完成所有簿记工作,以确保信息在各方面保持一致。在这里您将使用 displot:

sns.displot(
    data=df, x="Num", hue="Label",
    row='Item', row_order=['Up','Right','Down','Left'],
    multiple="fill", shrink=.8, discrete=True,
    aspect=4, height=2,
)

enter image description here

请注意,我在这里对您的代码进行了另一项更改,即使用 discrete=True 而不是 binwidth=1,我认为您是这样的想要。

关于python - Hue 和共享 x 轴不起作用 Seaborn 构面网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67015788/

相关文章:

python - 如何用Python/Pandas减去2列未对齐的数据?

python - 查找具有非 na 值的列,并使用非 na 列的名称创建第三列填充值

python - 如何使用正则表达式筛选基于列条目的行?

python - 为什么 AES.decrypt 不返回我的原始文本?

python - NLTK:情态频率条形图

python - 在 BeautifulSoup 和 Python 中使用 SVG 路径

python - Python 中可以存在非对象吗?

python - 如何增加条形图上日期的 xticks/标签的频率?

python - 如何注释/添加箭头到图形而不是轴

python - 根据python matplotlib中的数据集生成带有颜色渐变的网格