FacetPlot/CatPlot (seaborn) - 如何改变栏的位置?

FacetPlot/CatPlot (seaborn) - how to change the bar positions?

我在秤上的横条位置上遇到了问题。我的理解是一些色调量为 0,所以这会偏离条形图的位置。在图像中,右上角的图显示了 'labour' 的绿色和棕色条,它们之间有一个间隙,大概是因为颜色为 0。有没有办法将这些条放在一起,并与它们在y 轴?

grid = sns.catplot(x='Type', y='count', 
               row='Age', col='Gender', 
               hue='Nationality',
               data=dfNorthumbria2, kind='bar', ci=None,legend=True) 
grid.set(ylim=(0,5), yticks=[0,1,2,3,4,5])
grid.set(xlabel="Type of Exploitation",ylabel="Total Referrals")

for ax in grid.axes.flatten():
ax.tick_params(labelbottom=True, rotation=90)
ax.tick_params(labelleft=True)
grid.fig.tight_layout() 
leg = grid._legend
leg.set_bbox_to_anchor([1.1,0.5])

您可以通过 sns.catplothue_order 参数传递给 sns.barplot(),例如

grid = sns.catplot(..., hue_order=['British', 'Romanian', 'Vietnamese', 
                                   'Albanian', 'Pakistani', 'Slovak'])

这应该会缩小绿色和棕色条之间的间隙,并且它们将以刻度线为中心,因为它们现在位于列表的中间。但是,其他柱组仍然不会以其刻度线为中心。

这可能是此绘图函数的工作方式不可避免的结果,它不是为这种稀疏数据设计的。因此,如果您希望所有不同的条形组都以各自的刻度线为中心,您可能必须使用更灵活的 matplotlib 绘图函数并手动创建颜色子集。