2016-10-02 8 views
1

5 개의 그룹이 서로 겹치지 않는다 (즉, 겹치지 않는다). 각 클래스에 대해 Var1 대 Var2의 산점도를 만들고 싶습니다.R ggplot non-disjoint class가있는 패싯

보다 구체적으로, 두 개의 열 Var1과 Var2가 있고 값이 0과 1 인 5 개의 열과 연결된 5 개의 클래스 각각에 대한 각 행의 구성원을 나타내는 데이터 프레임을 생각해보십시오. 이러한 클래스가 연결이 끊어진 경우 변수 값에 1 ~ 5를 사용하고 문제가 해결되면 간단히 패싯 격자를 사용합니다. 그러나 그것들이 중첩되어 있기 때문에 어떻게 그런 줄거리를 만들지 모르겠다.

도움 주셔서 감사합니다.

+0

왜 샘플 입력 데이터와 (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) A [재현성 예]를 포함하지 정확히 무엇을 가지고 있고 무엇을 원하는지 명확히하십시오. 이것은 일반적인 플로팅 조언을위한 장소가 아닙니다. 특정 프로그래밍 질문을 요청하십시오. – MrFlick

답변

0

tidyr 패키지, 특히 해당 패키지의 gather() 함수를 사용하면 쉽습니다.

먼저 원하는 속성이 있다고 생각되는 데이터 프레임을 만듭니다. 내가 dplyr을 사용하고 있다는 사실을 알아 두십시오. pipe syntax (아래 내용은 %>%입니다).

# packages we need 
require(tidyr) 
require(dplyr) 
require(ggplot2) 

# an example data frame 
df <- 
    data.frame(var1 = rnorm(30), 
       var2 = rnorm(30), 
       A = sample(c(TRUE, FALSE), 30, replace = T), 
       B = sample(c(TRUE, FALSE), 30, replace = T), 
       C = sample(c(TRUE, FALSE), 30, replace = T), 
       D = sample(c(TRUE, FALSE), 30, replace = T), 
       E = sample(c(TRUE, FALSE), 30, replace = T) 
      ) 

주요 단계 gather ED 각 열에 대해 한 번 각 데이터 포인트 (var1, var2)이 5 배 복제되도록 tidyr::gather()를 사용하여 데이터 프레임, 즉 rehape이다. gather이 아닌 열의 데이터를 복제하는 것 외에도 gather() 함수는 두 개의 새로운 열을 작성합니다. 이 중 첫 번째는 class이고 A, B, C, D 또는 E 값을 갖습니다. 두 번째는 is_in이라고하며 해당 데이터 요소가 클래스에 있는지 여부에 따라 TRUE 또는 FALSE 값을가집니다. class 열에 의해 참조됩니다.

# reshape the data frame using dplyr 
df.reshaped <- 
    df %>% 
     mutate(index = row_number()) %>% # number the data points 
     gather(class, is_in, A:E) %>%  # repeat all (var1, var2) points 5x 
     filter(is_in == TRUE) %>%   # keep only points you want 
     select(-is_in)     # the is_in column is now superfluous 

이제 데이터를 플로팅 할 준비가되었습니다. 우리의 플롯이 여러 패싯에 동일한 원본 데이터 포인트를 표시하는지 확인하기 위해 위의 호출에 원래 (즉, 수집 전) 행 번호별로 데이터 포인트 번호를 지정합니다. 나는 geom_text()을 사용하여 음모를 꾸미므로 여러면에서 같은 번호를 보면 목표가 달성됩니다.

# plot the graph 
df.reshaped %>% 
    ggplot(aes(x = var1, y = var2, label = index)) + 
     geom_text() + 
     facet_grid(.~class) + 
     theme_bw() 

ggsave('SO_39820087.png', width = 10, height = 4) 

결과 플롯은 내 컴퓨터에서 이와 유사합니다.

Successful facet plot of non-disjoint classes