Один совет: будьте осторожны с 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)
Выход: 