Сортировать сгруппированный сгруппированный барплот по фактору - PullRequest
0 голосов
/ 21 марта 2020

Я использую R с ggplot, и я борюсь с сортировкой в ​​нужном порядке групповой диаграммы.

Код, используемый до сих пор, следующий:

levels(data.m$variable) <- c("% Worried about emigration", "% Worried both immigration and emigration", 
                             "% Worried about immigration", "% Neither / don't know")

require(forcats)

ggplot(data.m, aes(fill = variable, Countries, value))+
  geom_bar(position = 'stack', stat = 'identity')+
  expand_limits(x=c(0,0))+
  coord_flip()

Это возвращает меня этот график:

![Text](D:\nuovo\universita\tesi\immagini\worriedCountries.png)

Тем не менее, я хотел бы, чтобы ось Y этой диаграммы была отсортирована по странам, которые больше обеспокоены «эмиграцией».

Может ли кто-нибудь помочь мне с этим?

1 Ответ

1 голос
/ 21 марта 2020

Один совет: будьте осторожны с levels(data.m$variable)<-..., факторы хитры, это может изменить значения этого столбца ваших данных. Проверьте это. Посмотрите, поможет ли оно вам, хитрость заключается в использовании scale_x_discrete(limits=...):

library(ggplot2)
library(dplyr)
#Dummy data
data.m = data.frame(Countries = c(rep("A",4),rep("B",4),rep("C",4)),
                    value = c(c(1,2,3,4),c(4,3,2,1),c(2,3,1,4))/10,
                    variable = factor(
                                  rep(c("% Worried about emigration", "% Worried both immigration and emigration", 
                                     "% Worried about immigration", "% Neither / don't know"),
                                   3), levels = c("% Worried about emigration", "% Worried both immigration and emigration", 
                                                  "% Worried about immigration", "% Neither / don't know"))
                    )

yticks = data.m %>% filter(variable=="% Worried about emigration") %>% arrange(value) %>% pull(Countries) %>% as.character()

## If you want it in descendant order use 'arrange(desc(value))'


ggplot(data.m,aes(fill = variable,Countries,value))+
  geom_bar(position = 'stack', stat = 'identity')+
  coord_flip()+
  scale_x_discrete(limits = yticks)

Выход: image

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