我正在尝试创建一个seaborn FacetGrid来显示我拥有的一些数据中集群之间的转换概率。该数据有一堆主题和 4 个集群(因此每个主题有 16 个数据点,每对新旧集群一个)。因为这些是概率,所以具有相同旧集群(对于每个主题)的所有值总和为 1。我想使用 FacetGrid 点图(或堆叠条形图,但这对于 seaborn 来说似乎不可能)显示此数据,例如每个旧簇都是一个单独的列,新簇是一个单独的色调,每个方面都显示主题与概率。
下面是生成具有与我的功能相同的玩具 DataFrame 的代码,以及我想要制作的facetgrid 的代码。然而,当我完成这一切时,传说却是空的。
df,index = [],0
for subj in [1,2]:
for i,j in itertools.product(range(4),range(4)):
df.append(pd.DataFrame(index=[index],data=dict(subject=subj,old=i,new=j,prob=[.23,.24,.26,.27][j])))
index+=1
df = pd.concat(df)
g = sns.FacetGrid(df,col='old',hue='new',margin_titles=False,legend_out=True)
g.map(sns.pointplot,'subject','prob',join=False)
g.add_legend()
看着g._legend_data
显示它是空的并且每个轴get_legend_handles_labels()
函数不返回任何内容。这是怎么回事?
我无法发布我的剧情图片,因为我没有 10 点声誉;传说的名字出现在最右边,但里面什么也没有……
EDIT:此外,我想稍微回避这些值,但是g.map(sns.pointplot,'subject','prob',join=False,dodge=.1)
对于各种不同的闪避值,看起来与上面完全相同......
EDIT 2:所以看来使用sns.factorplot
,而不是 FacetGrid,图例和闪避都起作用。我唯一不能使用 sns.factorplot 做的事情是旋转 xtick 标签,但这不适用于col_wrap
无论如何,在 Facet Grid 中...为什么 FacetGrid 会出现这个问题?