Python 色调和共享x轴不工作Seaborn镶嵌面网格
我的目标是绘制一个堆叠图表,显示一个数据集的标准化值。使用下面的命令,Python 色调和共享x轴不工作Seaborn镶嵌面网格,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我的目标是绘制一个堆叠图表,显示一个数据集的标准化值。使用下面的命令,项中的每个唯一值都有自己的行。然后,我打算绘制一个包含Label标准化值的堆叠图,并沿x轴绘制Num 然而,色调似乎为每个项目传递了一组不同的颜色。它们不一致,例如,Up中的A为蓝色,而Right中的A为绿色 我还希望共享Num的x轴,每个项目的x轴都是一致的。这些值未与相应的x轴对齐 import pandas as pd import numpy as np df = pd.DataFrame({ '
项
中的每个唯一值都有自己的行。然后,我打算绘制一个包含Label
标准化值的堆叠图,并沿x轴绘制Num
然而,色调似乎为每个项目传递了一组不同的颜色。它们不一致,例如,Up
中的A
为蓝色,而Right
中的A
为绿色
我还希望共享Num
的x轴,每个项目的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()
直接使用FaceGrid可能很棘手;它基本上是在轴上执行GROUPBY和for循环,并且它不跟踪任何特定于功能的状态,这些状态将需要确保“每个色调级别应使用什么顺序”等问题的答案在每个方面都是相同的。因此,您需要以某种方式提供该信息(即,hue\u order
或传递调色板字典)。事实上,有一个警告是关于这一点的
但是您通常不需要直接使用FacetGrid
;您可以使用图形级别的函数之一,该函数为您完成所有簿记工作,以确保信息跨面对齐。在这里,您可以使用显示
:
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
,这是我认为您需要的。如果g.map\u dataframe()
在使用histplot
和相关函数调用时向displaot
发出一些警告提示,可能会有所帮助?(对于multiple='fill'
,可能ylabel会有所不同,类似于“比例”之类的东西。)不太可能推断带有轴级函数的FaceGrid
的特定用法是否会成为问题。。。大多数图形级函数都在内部执行此操作。。。这只是数据格式正确/元数据正确的问题。我所能做的就是在文档中强烈指出,直接使用FaceGrid
是高级的/只有在您知道自己在做什么的情况下才应该这样做。