1

我有一个精心制作的代码来创建一系列图表。我想在我创建的众多图表之一中放置一条垂直线。

考虑以下简单代码:

library(ggplot2)
library(grid)
library(gridExtra)


plots <- list()

for (i in 1:4) {
  V1 <- rnorm(1000)
  V2 <- seq(1000)
  df <- data.frame(V1, V2)

plots[[i]] <- ggplot(df, aes(x= V2, y=V1)) +
    geom_point()+
    geom_vline(xintercept = 500, color="red")
}


grid.arrange(grobs=plots, nrow=2)

我想要图 4 的红色垂直线,而不是其他的。我将如何有效地做到这一点?

4

2 回答 2

2

对于这个问题,您不需要 for 循环和 if 语句。您可以使用刻面;

library(ggplot2)
library(grid)
library(gridExtra)
library(dplyr)

set.seed(123) ## set the seed for random numbers to be reproducible
df <- bind_rows(lapply(1:4, function(x) 
                              data.frame(V1=rnorm(1000), V2=seq(1000))), .id = 'facet')

ggplot(df, aes(x= V2, y=V1)) +
  geom_point() +
  facet_wrap(~facet) +
  geom_vline(data=data.frame(xint=500,facet=4), aes(xintercept = xint), color = "red")

于 2020-06-24T15:42:01.220 回答
0

只需拆分您的情节制作并设置条件:)

library(ggplot2)
library(grid)
library(gridExtra)


plots <- list()

for (i in 1:4) {
    V1 <- rnorm(1000)
    V2 <- seq(1000)
    df <- data.frame(V1, V2)
    
    plots[[i]] <- ggplot(df, aes(x= V2, y=V1)) +
        geom_point()
    if (i == 4) plots[[i]] <- plots[[i]] + geom_vline(xintercept = 500, color="red")
}


grid.arrange(grobs=plots, nrow=2)
于 2020-06-24T15:04:45.443 回答