首页 > 解决方案 > 用 for 循环绘制 ggplot。应该如何引用变量?

问题描述

我正在尝试创建散点图,其中单个图显示每个预测变量与单个结果之间的关系。但是,结果无法正常显示。我认为这是因为 ggplot 函数没有将结果识别为列名。关于如何正确引用结果的任何建议?

# data
data <- data.frame(o1=rnorm(100, 3, sd=1.2),
                   o2=rnorm(100, 3.5, sd=1.4),
                   p1=rnorm(100, 2, sd=1.9),
                   p2=rnorm(100, 1, sd=1.2),
                   p3=rnorm(100, 7, sd=1.6)
)

func <- function(data, outcomes, predictors) {

for(i in seq_along(outcomes)){
  print(data %>% select(outcomes[[i]], predictors[[i]]) %>% 
          gather(var, value, -outcomes[[i]]) %>% 
          ggplot(aes(x=value, y=outcomes[[i]])) + geom_point() + facet_wrap(~var))
   
}
}

func(data, outcomes=c("o1", "o2"), predictors=list(c("p1", "p2"), c("p2","p3")))

标签: rggplot2

解决方案


您可以在没有循环的情况下尝试此操作:

data <- data.frame(o1=rnorm(100, 3, sd=1.2),
                   o2=rnorm(100, 3.5, sd=1.4),
                   p1=rnorm(100, 2, sd=1.9),
                   p2=rnorm(100, 1, sd=1.2),
                   p3=rnorm(100, 7, sd=1.6)
                   )

tidy_data <- data %>% 
  pivot_longer(c(p1:p3), names_to = "predictor", values_to = "x") %>% 
  pivot_longer(c(o1:o2), names_to = "outcome", values_to = "y")


ggplot(tidy_data) +
  
  geom_point(aes(x = x,
                 y = y)) +
  
  facet_grid(outcome~predictor)

在此处输入图像描述


推荐阅读