ProgramingTip

ggplot2 : 정렬 정렬

bestdevel 2021. 1. 9. 16:26
반응형

ggplot2 : 정렬 정렬


가장 높은 순서에서 가장 낮은 순서로 정렬 된 data.frame이 있습니다. 예를 들면 :

x <- structure(list(variable = structure(c(10L, 6L, 3L, 4L, 2L, 8L, 
9L, 5L, 1L, 7L), .Label = c("a", "b", "c", "d", "e", "f", "g", 
"h", "i", "j"), class = c("ordered", "factor")), value = c(0.990683229813665, 
0.975155279503106, 0.928571428571429, 0.807453416149068, 0.717391304347826, 
0.388198757763975, 0.357142857142857, 0.201863354037267, 0.173913043478261, 
0.0496894409937888)), .Names = c("variable", "value"), row.names = c(10L, 
6L, 3L, 4L, 2L, 8L, 9L, 5L, 1L, 7L), class = "data.frame")

ggplot(x, aes(x=variable,y=value)) + geom_bar(stat="identity") + 
 scale_y_continuous("",label=scales::percent) + coord_flip() 

이제 데이터가 멋지고 정렬되어 있고 할 때 요소별로 정렬되어 있습니다. 성가신 데 어떻게 고쳐야하나요?


몇 가지 방법이 있습니다.

첫 번째는 데이터 프레임에 순서에 따라 순서를 지정합니다.

x$variable <- factor(x$variable, levels=unique(as.character(x$variable)) )

두 번째는 다른 변수 (이 경우 값)를 기준으로 수준을 정렬합니다.

x <- transform(x, variable=reorder(variable, -value) ) 

이것은 당신이 찾고있는 것입니다.

g <- ggplot(x, aes(reorder(variable, value), value))
g + geom_bar() + scale_y_continuous(formatter="percent") + coord_flip()

reorder()기능은에 따라 x 축 항목의 순서를 변경한다 valuevariable.


나는 최근에 coord_flip ()을 사용하는 ggplot2 barplots의 범례 항목 순서 에서 자세히 논의한 관련 문제로 고심하고 있습니다.

그럴 때 내 문제를 명확하게 설명하는 데 어려움을 겪고있는 곳은 (순서) 문제와 coord_flip () 관계와 관련이 있습니다.

+ xlim(rev(levels(x$variable)))ggplot 문 에 추가하여 원하는 결과를 얻습니다 .

ggplot(x, aes(x=variable,y=value)) + geom_bar() + 
scale_y_continuous("",formatter="percent") + coord_flip() 
+  xlim(rev(levels(x$variable)))

이렇게 하면 x 축의 원래 데이터 프레임 에서 발견 된 존재 의 순서 가 바뀌며 coord_flip ()을 사용하여 y 축이됩니다. 이 특정 예제에서 변수는 알파벳 순서로도 발생하지만 레벨의 임의 순서를 지정하면 xlim()일반적으로 작동합니다.


ordered원하는 순서대로 x-factor를 요소로 비행합니다 . 예 :

x <- data.frame("variable"=letters[1:5], "value"=rnorm(5)) ## example data
x <- x[with(x,order(-value)), ] ## Sorting
x$variable <- ordered(x$variable, levels=levels(x$variable)[unclass(x$variable)])

ggplot(x, aes(x=variable,y=value)) + geom_bar() +
   scale_y_continuous("",formatter="percent") + coord_flip()

나는 주문 작업을 수행하는 더 좋은 방법을 수행합니다. 내가 가지고있는 것에 대한 설정이없는 경우에만 작동합니다 x$variable.


이 질문이 왜 다시 열렸는지 모르겠지만 여기에 tidyverse옵션이 있습니다.

x %>% 
  arrange(desc(value)) %>%
  mutate(variable=fct_reorder(variable,value)) %>% 
ggplot(aes(variable,value,fill=variable)) + geom_bar(stat="identity") + 
  scale_y_continuous("",label=scales::percent) + coord_flip() 

참조 URL : https://stackoverflow.com/questions/3744178/ggplot2-sorting-a-plot

반응형