如何解决色调和共享 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,)
请注意,我在此处对您的代码进行了另一处更改,即使用 discrete=True
而不是 binwidth=1
,我认为这正是您想要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。