微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

色调和共享 x 轴不起作用 Seaborn 小平面网格

如何解决色调和共享 x 轴不起作用 Seaborn 小平面网格

我的目标是绘制一个堆叠图,显示来自熊猫 df 的归一化值。使用下面,Item 中的每个唯一值都有自己的行。然后我打算绘制一个堆叠图,其中包含来自 Label 的归一化值,Num 沿 x 轴。

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

我还希望共享 Num 的 x 轴对于每个 Item 都是一致的。这些值未与相应的 x 轴对齐。

import pandas as pd
import numpy as np

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

g = sns.FacetGrid(df,row = 'Item',row_order = ['Up',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,我认为这正是您想要的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。