У меня большое количество переменных, и я хотел бы создать диаграммы рассеяния, сравнивающие все переменные с одной переменной. Мне удалось сделать это в базе R, используя lapply, но я не могу выполнить ту же задачу в ggplot2, используя lapply.

Ниже приведен пример набора данных.

df <- data.frame("ID" = 1:16)
df$A <- c(1,2,3,4,5,6,7,8,9,10,11,12,12,14,15,16)
df$B <- c(5,6,7,8,9,10,13,15,14,15,16,17,18,18,19,20)
df$C <- c(11,12,14,16,10,12,14,16,10,12,14,16,10,12,14,16)

Я определяю переменные, с которыми я хотел бы сгенерировать диаграммы рассеяния, используя приведенный ниже код:

df_col_names <- df %>% select(A:C) %>% colnames(.) 

Ниже показано, как мне удалось успешно выполнить задачу построения графика всех переменных относительно переменной A, используя lapply в базе R:

lapply(df_col_names, function(x) {
  tiff(filename=sprintf("C:\\Documents\\%s.tiff", x),
       width = 1000, height = 1000, res=200)
  plot(df$A, df[[x]], 
       pch=19,
       cex = 1.5,
       ylab = x,
       ylim = c(0, 20),
       xlim = c(0, 20))
  dev.off()
})

Ниже я безуспешно пытаюсь выполнить задачу в ggplot2. Он генерирует изображения tiff, хотя они пустые.

lapply(df_col_names, function(x) {
  tiff(filename=sprintf("C:\\Documents\\%s.tiff", x),
       width = 1000, height = 1000, res=200)
ggplot(df) +
  geom_point(data = df,
             aes(x = A, y = df_col_names[[x]], size = 3)) +
  geom_smooth(aes(x = A, y = df_col_names[[x]], size = 0), method = "lm", size=0.5) +
  coord_fixed(ratio = 1, xlim = c(0, 20), ylim = c(0, 20)) +
  guides(size = FALSE, color = FALSE) +
  theme_bw(base_size = 14)
dev.off()
})
0
chipsin 2 Мар 2021 в 12:08

1 ответ

Лучший ответ

У меня работает с ggsave. Также обратите внимание, что вы передаете имена строковых столбцов в ggplot, поэтому используйте .data для ссылки на фактические значения столбцов.

library(ggplot2)

lapply(df_col_names, function(x) {
  ggplot(df) +
    geom_point( aes(x = A, y = .data[[x]], size = 3)) +
    geom_smooth(aes(x = A, y = .data[[x]], size = 0), method = "lm", size=0.5) +
    coord_fixed(ratio = 1, xlim = c(0, 20), ylim = c(0, 20)) +
    guides(size = FALSE, color = FALSE) +
    theme_bw(base_size = 14) -> plt
  ggsave(sprintf("%s.tiff", x), plt)
})
1
Ronak Shah 2 Мар 2021 в 09:23