使用链接命令在循环中打印 ggplot

SN2*_*248 2 r piping ggplot2

我正在尝试在循环中制作一组 ggplots 并显示它们。我正在尝试使用%>%运算符。这是一个玩具示例,它绘制了从 1 到 10 的点,每个点都有不同的标题。

library(magrittr)
library(ggplot2)

data1 <- data.frame('x' = 1:10, 'y' = 1:10)

for (index in 1:10){

  data1 %>% 
    ggplot(aes(x = x, y = y)) +
    geom_point() +
    ggtitle(paste("plot ",as.character(index)))
}
Run Code Online (Sandbox Code Playgroud)

现在,下面的代码可以工作并生成 10 个图,每个图都有不同的标题

library(magrittr)
library(ggplot2)

data1 <- data.frame('x' = 1:10, 'y' = 1:10)

for (index in 1:10){


    print(ggplot(data = data1, aes(x = x, y = y)) +
    geom_point() +
    ggtitle(paste("plot ",as.character(index))))
}
Run Code Online (Sandbox Code Playgroud)

但是,我想使用%>%运算符来生成一系列图。我%>% print()在标题末尾尝试过,它运行但不生成用于显示的图。然而

for (index in 1:10){

  data1 %>% 
    print(data = .,ggplot(aes(x = x, y = y)) +
    geom_point() +
    ggtitle(paste("plot ",as.character(index))))

}
Run Code Online (Sandbox Code Playgroud)

产生错误

Error: ggplot2 doesn't know how to deal with data of class uneval 
Run Code Online (Sandbox Code Playgroud)

有什么愚蠢的,我失踪了吗?

谢谢!

MrF*_*ick 5

这实际上是%>%和之间的操作顺序问题+。你可以把你的ggplot东西放在一起,比如

for (index in 1:10){
  data1 %>% {
    ggplot(., aes(x = x, y = y)) +
    geom_point() +
    ggtitle(paste("plot ",as.character(index)))
  } %>% print
}
Run Code Online (Sandbox Code Playgroud)

或者你可以把整个链条放在印刷品中

for (index in 1:10) {
  print(data1 %>%
    ggplot(aes(x = x, y = y)) +
    geom_point() +
    ggtitle(paste("plot ",as.character(index)))
  )
}
Run Code Online (Sandbox Code Playgroud)

  • 您不能使用管道运算符从 `.` 运行,有时自动参数分配将无法“猜测”您想要什么,或者您可能需要多次引用数据。 (2认同)