Гистограммы о диагональном расщеплении, если в оси g изменяются пределы оси y - PullRequest
0 голосов
/ 20 января 2020

У меня есть набор данных с некоторыми выбросами, и я использовал функцию ggpairs GGally для построения графиков рассеяния, сглаженных гистограмм и коэффициента корреляции на одном графике, например:

https://i.stack.imgur.com/0xsQQ.png]

Если я удаляю выбросы, границы оси изменяются , поэтому я написал функцию, которая зацикливается на «вспомогательных участках» первого графика, получает пределы оси и изменяет пределы второго графика.

Однако при изменении оси Y сглаженные гистограммы как-то разбиваются, и я получаю странный вид графика:

https://i.stack.imgur.com/Ahz8G.png

Этого не произойдет, если только x ось изменена:

https://i.stack.imgur.com/7F04X.png

Может кто-нибудь помочь мне не разбивать графики плотности? (И чтобы понять, что происходит?)

Это мой MWE с набором данных mtcars:

library(tidyverse)
library(GGally)

cars_plot <- mtcars %>% 
  select(c(mpg, disp)) %>% 
  ggpairs(title="Full data set")
cars_plot

cars_plot_l25 <- mtcars %>% 
  filter(mpg < 25) %>% 
  select(c(mpg, disp)) %>% 
  ggpairs(title="mpg < 25 data set")
cars_plot_l25

ggpairs_lim <- function(p1, p2){
  for(i in 1:p2$nrow) {
    for(j in 1:(i)) {
      gg_obj <- ggplot_build(p2[i,j])
      p1[i,j] <- p1[i,j] +
        scale_x_continuous(limits = gg_obj$layout$panel_scales_x[[1]]$range$range) +
        scale_y_continuous(limits = gg_obj$layout$panel_scales_y[[1]]$range$range)
      # somehow when changing the y range the histogram gets split in half over the x!!!
    }
  }
  p1
}

cars_plot_l25_mod <- ggpairs_lim(cars_plot2, cars_plot)
cars_plot_l25_mod 

ggpairs_xlim <- function(p1, p2){
  for(i in 1:p2$nrow) {
    for(j in 1:(i)) {
      gg_obj <- ggplot_build(p2[i,j])
      p1[i,j] <- p1[i,j] +
        scale_x_continuous(limits = gg_obj$layout$panel_scales_x[[1]]$range$range)
    }
  }
  p1
}
cars_plot_l25_modx <- ggpairs_xlim(cars_plot2, cars_plot)

...