Избежать ggplot сортировки оси X, в то время как построение Геом бар()
у меня есть следующие данные, которые я хочу построить с помощью ggplot:
SC_LTSL_BM 16.8275
SC_STSL_BM 17.3914
proB_FrBC_FL 122.1580
preB_FrD_FL 18.5051
B_Fo_Sp 14.4693
B_GC_Sp 15.4986
то, что я хочу сделать, это сделать гистограмму и поддерживать порядок бара,
(т. е. начиная с SC_LTSL_BM ...B_GC_Sp
). Но поведение по умолчанию
ggplot geom_bar-это их сортировка. Как я могу этого избежать?
library(ggplot2)
dat <- read.table("http://dpaste.com/1469904/plain/")
pdf("~/Desktop/test.pdf")
ggplot(dat,aes(x=V1,y=V2))+geom_bar()
dev.off()
текущая цифра выглядит так:
3 ответа:
вам нужно сказать ggplot, что у вас уже есть заказанный фактор, поэтому он автоматически не заказывает его для вас.
dat <- read.table(text= "SC_LTSL_BM 16.8275 SC_STSL_BM 17.3914 proB_FrBC_FL 122.1580 preB_FrD_FL 18.5051 B_Fo_Sp 14.4693 B_GC_Sp 15.4986", header = FALSE, stringsAsFactors = FALSE) # make V1 an ordered factor dat$V1 <- factor(dat$V1, levels = dat$V1) # plot library(ggplot2) ggplot(dat,aes(x=V1,y=V2))+geom_bar(stat="identity")
вот подход, который не изменяет исходные данные, но использует scale_x_discrete. От кого ?scale_x_discrete "используйте ограничения, чтобы настроить, какие уровни (и в каком порядке) отображаются" например:
dat <- read.table(text= "SC_LTSL_BM 16.8275 SC_STSL_BM 17.3914 proB_FrBC_FL 122.1580 preB_FrD_FL 18.5051 B_Fo_Sp 14.4693 B_GC_Sp 15.4986", header = FALSE, stringsAsFactors = FALSE) # plot library(ggplot2) ggplot(dat,aes(x=V1,y=V2))+ geom_bar(stat="identity")+ scale_x_discrete(limits=dat$V1)
вы также можете просто переупорядочить соответствующий фактор, как описано здесь
x$name <- factor(x$name, levels = x$name[order(x$val)])