как изменить порядок факторного графика в seaborn

Мои данные выглядят так:

m=pd.DataFrame({'model':['1','1','2','2','13','13'],'rate':randn(6)},index=['0', '0','1','1','2','2'])

Я хочу, чтобы ось X факторного графика была упорядочена в [1,2,13], но по умолчанию это [1,13,2].

Кто-нибудь знает как его поменять?

Обновление. Думаю, я понял это следующим образом, но, может быть, есть способ лучше, используя для этого индекс?

sns.factorplot('model','rate',data=m,kind="bar",x_order=['1','2','13'])

person MYjx    schedule 07.07.2014    source источник
comment
Я не могу реплицировать на OS X с Python 2.7.6, я получаю нужный вам порядок.   -  person Ffisegydd    schedule 08.07.2014
comment
Используйте аргумент ключевого слова x_order.   -  person mwaskom    schedule 08.07.2014
comment
@Ffisegydd, скорее всего: import seaborn as sb; sb.factorplot('model', 'rate', data=m). Я также получил предполагаемый OP порядка [1, 2, 13].   -  person CT Zhu    schedule 08.07.2014
comment
Я понял свою проблему. Потому что я изменил тип модели на струнную, поэтому 11 появится раньше, чем 2. Большое спасибо за вашу помощь !!! :) Но на самом деле меня все еще интересует x_order, нужно ли для этого указывать индекс?   -  person MYjx    schedule 08.07.2014
comment
привет, мваском, большое спасибо за помощь! Я понял это таким образом, пожалуйста, посмотрите обновление, но мне все еще любопытно, как использовать индекс для этого. Спасибо!   -  person MYjx    schedule 08.07.2014


Ответы (3)


Ваше обновление сообщения показывает правильный способ сделать это, то есть вы должны передать список x значений в order в том порядке, в котором вы хотите, чтобы они были нанесены на график. По умолчанию числовые данные строятся в отсортированном порядке, поэтому, если у вас есть числовые значения, лучше всего сохранить их как целые числа или числа с плавающей запятой вместо строк, чтобы они были в «естественном» порядке.

person mwaskom    schedule 07.07.2014
comment
параметр x_order был переименован в порядок - person Pablo; 15.06.2016

Как написал @Pablo в своем комментарии, а @Archie правильно упомянула в своем ответе:

x_order следует заменить на order

Для тех, кто пришел сюда в поисках решения sort для kind="count", это можно сделать:

sns.catplot(x="model", data=m, kind="count", order=m.model.value_counts().index)

Это потому, что по умолчанию метод value_counts возвращает отсортированные по убыванию значения по количеству.

person Rafe    schedule 06.06.2020

Из документации видно, что API seaborn снова обновился, аргумент x_order следует заменить на order:

sns.factorplot('model', 'rate', data=m, kind="bar", order=['1','2','13'])

Кроме того, factorplot был переименован и будет удален в будущих выпусках; он заменяется на catplot:

sns.catplot('model', 'rate', data=m, kind="bar", order=['1','2','13'])
person Archie    schedule 01.06.2018
comment
Нет, это order вместо row_order, row_order работает только тогда, когда вы указываете параметр row, и он выводит каждую полосу в свой собственный рисунок - person Cheng; 14.05.2019