У меня есть набор данных с некоторыми выбросами, и я использовал функцию ggpairs GGally для построения графиков рассеяния, сглаженных гистограмм и коэффициента корреляции на одном графике, например:
![https://i.stack.imgur.com/0xsQQ.png]](https://i.stack.imgur.com/0xsQQ.png)
Если я удаляю выбросы, границы оси изменяются , поэтому я написал функцию, которая зацикливается на «вспомогательных участках» первого графика, получает пределы оси и изменяет пределы второго графика.
Однако при изменении оси Y сглаженные гистограммы как-то разбиваются, и я получаю странный вид графика:
![https://i.stack.imgur.com/Ahz8G.png](https://i.stack.imgur.com/Ahz8G.png)
Этого не произойдет, если только x ось изменена:
![https://i.stack.imgur.com/7F04X.png](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)