FacetPlot / CatPlot (seaborn) - как изменить положение бара? - PullRequest
0 голосов
/ 27 апреля 2020

У меня проблемы с расположением баров на шкале. Я понимаю, что некоторые значения оттенка равны 0, так что это отбрасывает позицию баров. На рисунке в правом верхнем углу показаны зеленые и коричневые столбцы для «рабочей силы» с разрывом между ними, предположительно потому, что этот цвет равен 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])

enter image description here

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете передать hue_order аргумент sns.barplot() через sns.catplot, например,

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

Это должно закрыть промежуток между зелеными и коричневыми столбцами, и они будут центрированы на отметке пометить, как они сейчас в середине списка. Тем не менее, группы других баров все еще не будут сосредоточены вокруг своей отметки.

Это может быть неизбежным следствием того, как работает эта функция построения графика, она не предназначена для таких разреженных данных. Поэтому, если вы хотите, чтобы все различные группы столбцов были центрированы по соответствующим отметкам, вам, возможно, придется использовать более гибкую функцию построения графиков matplotlib и создавать цветовые подмножества вручную.

...