2017-12-21 29 views
1

하나의 종속 변수와 여러 독립 변수로 구성된 데이터 프레임이 있습니다. 관계 그룹은 다른 테스트에서 가져 왔습니다 (그러나 이것은 내가 만난 문제를 해결하는 데 중요하지 않습니다).GGRidges : 단일 밀도 플롯이 너무 높음

각 관계에 대한 밀도 플롯이있는 그래프 하나를 나타 내기 위해 ggridges 패키지를 사용하고 있습니다. 하나의 관계에 대해 하나의 값만있는 경우 ggridges는 밀도 플롯 대신 점을 생성합니다. 내 문제는이 경우 아래의 밀도 그림이 위의 공간과 겹치는 것입니다. ggridges가 다른 밀도 플롯을 보지 못하고 아래의 밀도 플롯에서 차지할 수있는 공간을 확장하기 때문일 수 있습니다. "scale"옵션은 두 개의 밀도 플롯의 겹침을 피할 수 있지만 밀도 플롯과 점 사이의 겹침을 피하기 위해 사용할 수 있습니다 (적어도 그렇게 생각합니다).

스케일을 0.5로 설정하면 문제를 해결할 수 있지만 각 밀도 플롯이 작아지기 때문에 이것이 최선의 방법은 아닙니다. 또한 다른 사람들과 겹치지 않는 것들.

다음은 내가 만난 문제가있는 그래프를 생성하는 재현 가능한 예제를 첨부했습니다. 누구든지 도와 주셔서 감사합니다. 무슨 일이 일어나고 무엇

library(magrittr) 
library(dplyr) 
#> 
#> Attaching package: 'dplyr' 
#> The following objects are masked from 'package:stats': 
#> 
#>  filter, lag 
#> The following objects are masked from 'package:base': 
#> 
#>  intersect, setdiff, setequal, union 
library(forcats) 
library(ggplot2) 
library(ggridges) 
library(RCurl) 
#> Carico il pacchetto richiesto: bitops 

y_ex <- c("y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1","y1") 
x_ex <- c("x1","x1","x2","x3","x3","x3","x3","x3","x3","x4","x4","x4","x5","x5","x5","x5","x5","x5","x5","x5","x5","x5","x5") 
value_ex <- c(0.26,0.40,0.47,0.72,0.71,0.69,0.74,0.73,0.24,0.39,0.43,0.46,0.21,0.18,0.14,0.10,0.16,-0.10,-0.11,0.56,0.50,0.49,0.43) 

data_ex <- data.frame(y_ex,x_ex,value_ex) 

r_ex <- data_ex %>% 
    dplyr::mutate(x_ex = forcats::fct_reorder(x_ex, desc(value_ex), fun = mean)) 

r_ex %>% 
    ggplot(aes(x = value_ex, y = x_ex)) + 
    ggtitle(paste0("Predictors of ",y_ex)) + 
    geom_density_ridges(fill = "royalblue", 
         scale = 0.9, 
         color = NA, 
         alpha = 0.7, 
         rel_min_height = 0.01) + 
    geom_point(size = 0.5, alpha = 0.5, pch = 16) + 
    geom_point(data = r_ex %>% group_by(x_ex) %>% dplyr::summarise(value_ex = mean(value_ex)), 
      color = "firebrick", 
      pch = 16, 
      alpha = 0.5) + 
    scale_y_discrete("") + 
    scale_x_continuous("", limits = c(0, 1)) + 
    theme_grey(base_size = 16, base_family = "serif") + 
    theme(plot.title = element_text(hjust = 0.5, 
            lineheight = .8, 
            face = "bold", 
            margin = margin(10, 0, 20, 0), 
            color = "gray15"), 
     legend.position = "none") 
#> Picking joint bandwidth of 0.0453 
#> Warning: Removed 2 rows containing non-finite values (stat_density_ridges). 
#> Warning: Removed 2 rows containing missing values (geom_point).` 

enter image description here

답변

1

스케일링 휴리스틱이 누락 된 데이터에 의해 혼란스러워지고 있다는 점이다. 스케일링 경험적 방법은 전체 범위의 기준 y 값을 그룹 수 -1로 나눕니다 (here 참조).

스케일링 휴리스틱 스는 기준 스케일이 정확히 2 배가되기 때문에 누락 레벨이없는 경우 scale = 0.9과 동일한 효과를 얻으려면 scale = 0.45을 사용해야합니다.

배포판 아래의 영역이 동일한 크기 (일부 유닛에서는 1 개)이어야하므로 모든 영역을 함께 조정해야합니다. 당신의 x5 배포판은 bimodal이고 따라서 훨씬 더 넓기 때문에 키가 크지 않습니다.