2013-02-05 4 views
15

GGally 기능 ggpairs의 색상 표를 변경하고 싶습니다. getPlot을 사용하여 반환 된 ggplot에 ggplot 명령을 추가하려고하면 색상이 변경되지 않습니다. 에러의 ggpairs 함수 결과에 직접 명령 ggplot 넣어하려고거기에 ggplot : ggpairs를 사용하여 GGally :: ggpairs의 색상 표를 바꿀 수있는 방법이 있습니까?

my_pair_plot = ggpairs(dataset, color="var1") 
getPlot(my_pair_plot,2,1) + scale_fill_brewer(palette = "Set2") 

.

ggpairs(dataset, color="var1") + scale_fill_brewer(palette = "Set2") 

답변

5

밝혀졌습니다. 소스 코드를 찾아야하지만 솔루션이 꽤 쉽게 제공됩니다. 우리는 ggpairs 기능에 관심이있는, 그래서 첫 번째 단계는

ggpairs 

우리가 채우거나 색상 어떤 AES 매핑을 찾을 수 있는지 보자입니다. 실제로,

combo_aes <- addAndOverwriteAes(aes_string(x = xColName, 
      y = yColName, ...), section_aes) 

우리는 그것이 무엇을 말하면 좋겠습니까. 두 가지 중요한 사항 :

  • 색상 및 AES를 채우기는

을 사용

  • aes_string()ggpairs 통화 줄임표에 포함되어야의이 밖으로 시도하자

    ggpairs(diamonds[, 1:2], colour='cut') 
    

    enter image description here

    훌륭함, 거의 다 왔어! 색상 표를 재정의하면됩니다. 당신이 + 표기는 어떤 방식으로 직접 적용되지 않도록 ggpairs가하는 ggplot 아닌 객체 때문에 작동하지 않습니다

    ggpairs(diamonds[, 1:2], colour='cut') + scale_fill_brewer(palette = "Set2") 
    

    을 제안처럼 뭔가를합니다. 그러나 간단한 해결 방법은 here입니다.

    ggplot <- function(...) ggplot2::ggplot(...) + scale_fill_brewer(palette="Set2") 
    ggpairs(diamonds[, 1:2], colour='cut') 
    
    ... 당신의 손가락을 건너와

    enter image description here

  • +1

    좋은 해킹! 바라기를 이것은 좋은 동안 안정되어 있 체재한다. –

    5

    갱신 :

    GGAlly 다시 업데이트 된이 대답에 해킹 또한 더 이상 작동하지 않습니다,하지만 마지막이 아닌있다 -hack 솔루션 (가 희망 미래 지향적 방법으로)

    scales <- scale_colour_brewer(type = 'qual') %+% scale_fill_brewer(type = 'qual') 
    

    은 당신이 할 수 주어진

    for (row in seq_len(ps$nrow)) 
        for (col in seq_len(ps$ncol)) 
         ps[row, col] <- ps[row, col] + scales 
    

    다른 대답에 해킹이 더 이상 작동, 그래서 새로운 하나를 해킹하지 않습니다

    옛날 방식!플롯 객체의 각각의 문자열을 수정해야 플롯을 수정하기 위해

    > dta <- data.frame(a=1:6, b=7:12, c=c('f', 'g')) 
    > ps <- ggpairs(dta, 1:2, colour = 'c') 
    > str(ps) 
    List of 10 
    $ data  :'data.frame': 2 obs. of 3 variables: 
        ..$ a: int [1:2] 1 2 
        ..$ b: int [1:2] 3 4 
        ..$ c: int [1:2] 5 6 
    $ columns  : int [1:3] 1 2 3 
    $ plots  :List of 9 
        ..$ : chr "ggally_densityDiag(ggally_data, ggplot2::aes(x = a, colour = c))" 
        ..$ : chr "ggally_cor(ggally_data, ggplot2::aes(x = b, y = a, colour = c))" 
    
    [...] 
    
    $ gg   : NULL 
    - attr(*, "class")= chr [1:2] "gg" "ggpairs" 
    
    > ps 
    

    plot before

    :

    ggpairs 오브젝트의 내부 구조는 데이터 세트 및 문자열의 목록 추가 명령을 포함합니다. 이를 위해, 우리는 deparse(substitute(argument))를 사용하는 사용자가 전달 된 코드를 포함하는 문자열을 얻기 위해, 모든 플롯 호출에 추가 :

    add_to_plots <- function(pairs, modification) { 
        str <- deparse(substitute(modification)) 
        pairs$plots <- lapply(pairs$plots, function(s) paste(s, '+', str)) 
        pairs 
    } 
    
    > add_to_plots(ps, scale_colour_brewer(type = 'qual')) 
    

    plot after

    +0

    이것은 더 이상 작동하지 않습니다. 대각선의 밀도 플롯을 채워지지 않고 여기 보이는 선으로하고 싶습니다. 어떻게해야합니까? http://stackoverflow.com/questions/34727408/how-do-i-have-the-density-plot-not-filled-in-ggallyggpairs – Make42

    +0

    이렇게하면 색이 바뀌지 만 내 플롯이 여전히 채워지지는 않습니다. – Make42

    +0

    꽤 사소한 일이지만 채우기를 덮어 씁니다. –