R语言 我如何循环通过列名称,并为每一个ggplot散点图

8ehkhllq  于 2023-05-26  发布在  其他
关注(0)|答案(2)|浏览(123)

我有一个dataframe filter,它是dataframe df2的子集,它是用dyplr的mutate()函数创建的。
我想循环遍历一些列,然后用它们绘制散点图。
我的循环:

colNames <- names(filter)[9:47]
for(i in colNames){
  ggplot(filter, aes(x=i, y=CrimesPer10k)) +
    geom_point(color="#B20000", size=4, alpha=0.5) +
    geom_hline(yintercept=0, size=0.06, color="black") + 
    geom_smooth(method=lm, alpha=0.25, color="black", fill="black")
}

然而,我没有得到任何输出,也没有任何错误。
我做错了什么?

mfuanj7w

mfuanj7w1#

您需要在for循环中显式地print()ggplot()返回的对象,因为auto-print() ing在那里(以及其他一些地方)被关闭。
您还需要使用aes_string()代替aes(),因为您没有将i用作filter中的实际变量,而是将其用作包含要绘制的filter中的变量(反过来)的字符串。
下面是一个实现这两种方法的示例:

Y <- rnorm(100)
df <- data.frame(A = rnorm(100), B = runif(100), C = rlnorm(100),
                 Y = Y)
colNames <- names(df)[1:3]
for(i in colNames){
  plt <- ggplot(df, aes_string(x=i, y = Y)) +
    geom_point(color="#B20000", size=4, alpha=0.5) +
    geom_hline(yintercept=0, size=0.06, color="black") + 
    geom_smooth(method=lm, alpha=0.25, color="black", fill="black")
  print(plt)
  Sys.sleep(2)
}
wz1wpwve

wz1wpwve2#

aes_string()在ggplot 2> 3.0.0中被弃用,但可以使用.data

colNames <- names(filter)[9:47]
for(i in colNames){
  plt <- ggplot(filter, aes(x=.data[[i]], y=CrimesPer10k)) +
    geom_point(color="#B20000", size=4, alpha=0.5) +
    geom_hline(yintercept=0, size=0.06, color="black") + 
    geom_smooth(method=lm, alpha=0.25, color="black", fill="black")
print(plt)
}

相关问题