code

geom_bar ()를 플로팅하는 동안 ggplot이 x 축을 정렬하지 않도록합니다.

codestyles 2020. 12. 30. 08:11
반응형

geom_bar ()를 플로팅하는 동안 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()

현재 그림은 다음과 같습니다. 여기에 이미지 설명 입력


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)])

dplyr을 사용하면 ggplot row에서 재정렬 할 수 있는 열을 쉽게 만들 수 있습니다.

library(dplyr)
dat <- read.table("...") %>% mutate(row = row_number())
ggplot(df,aes(x=reorder(V1,row),y=V2))+geom_bar()

참조 URL : https://stackoverflow.com/questions/20041136/avoid-ggplot-sorting-the-x-axis-while-plotting-geom-bar

반응형