2017-10-10 8 views
2

보다 나은 방법으로 facet_wrap 플롯을 재정렬하고 싶습니다.서브 플롯의 점을 기준으로 facet_wrap 플롯을 재정렬하십시오

library(ggplot2) 

set.seed(123) 
freq <- sample(1:10, 20, replace = T) 
labels <- sample(LETTERS, 20) 
value <- paste("i",1:13,sep='') 

lab <- rep(unlist(lapply(1:length(freq), function(x) rep(labels[x],freq[x]))),2) 
ival <- rep(unlist(lapply(1:length(freq), function(x) value[1:freq[x]])),2) 

df <- data.frame(lab, ival, type=c(rep('Type1',119),rep('Type2',119)),val=runif(238,0,1)) 


ggplot(df, aes(x=ival, y=val, col = type, group = type)) + 
    geom_line() + 
    geom_point(aes(x=ival, y=val)) + 
    facet_wrap(~lab, ncol=3) + 
    theme(axis.text.x=element_text(angle=45, vjust=0.3)) + 
    scale_x_discrete(limits=paste('i',1:13,sep='')) 

그것은 아래의 플롯 결과 :

enter image description here

빈도에 따라 플롯을 재 배열 어떤 방법이 있나요? lab 주파수 중 일부 (또는 유형 당 포인트 수)가 매우 낮습니다 (1-3). 나는 레이블 주문 대신 주파수를 facet_wrap wrt 줄거리를 정리하고 싶습니다. 하나의 장점은 플로팅 영역을 줄이고 플롯에서 더 나은 직감을 얻는 것입니다.

즉석에서 계산 된 빈도 값을 사용하고 facet_wrap으로 전달할 수 있습니까? 또는 dplyr 접근법을 사용하여 개별적으로 수행하고 데이터를 저/중/고 빈도의 플롯으로 나눕니 까?

답변

2

여기 하나의 아이디어가 있습니다. dplyr을 사용하여 각 그룹의 수를 lab에 계산하고 fct_reorderforcats부터 사용하여 요인 수준를 재정렬 할 수 있습니다.

library(dplyr) 
library(forcats) 

df2 <- df %>% 
    group_by(lab) %>% 
    mutate(N = n()) %>% 
    ungroup() %>% 
    mutate(lab = fct_reorder(lab, N)) 

ggplot(df2, aes(x=ival, y=val, col = type, group = type)) + 
    geom_line() + 
    geom_point(aes(x=ival, y=val)) + 
    facet_wrap(~lab, ncol=3) + 
    theme(axis.text.x=element_text(angle=45, vjust=0.3)) + 
    scale_x_discrete(limits=paste('i',1:13,sep='')) 
는 요인 수준을 되돌리고 싶은 경우 fct_reorder를 사용하는 경우 .desc = TRUE 설정

enter image description here

.

+0

이것은 'lab' 변수의 레벨을 재정렬합니다. baseR 접근법을 사용하여 수행 할 수도 있습니다. 플롯 영역을 적절하고 최소한의 방법으로 사용하여 줄이는 방법이 있습니까? 사용할 수있는 포인트가없는 경우 'x 축'제한을 무시합니다. – Prradep

+3

아니면'N '을 만들고'facet_wrap (~ reorder (lab, N))'과 같이'facet_wrap' 호출에서 오래된'reorder'를 사용하면됩니다. 그런 다음'facet_wrap (~ reorder (lab, -N))'이 그것을 뒤집습니다. –

+0

필자는이 재주문을 의미하는 수준이 가장 높이 평가 된 접근법입니다. 그러나 필요한 영역 만 사용하여 줄거리 영역을 줄이는 방법이 있는지 묻습니다. 또는 음모를 주파수에 따라 음모의 하위 집합으로 나누십시오. 기본적으로 플롯을 더 쉽게 이해하는 데 도움이되는 접근법을 찾고 있습니다. 나는 특별한 방법을 염두에두고 있지 않습니다. – Prradep