【问题标题】:ggplot2 plots the same graph instead of different onesggplot2 绘制相同的图而不是不同的图
【发布时间】:2018-08-08 13:51:32
【问题描述】:

最初我想在 for 循环中使用 ggplot2,但它不起作用,因为不是保存第一个图,而是在循环的第二次迭代后保存了第二个图。下面的代码说明了这一点。不必使用 for 循环来重现此错误。如果我像这样执行代码,它可以工作:

library(ggplot2)

df <- data.frame(x = c(1,2,3,4,5),
             y1 = c(10,55,32,78,47),
             y2 = c(-1.3,-2.5,-4.1,-1.7,-3.6))

hori <- c("y1", "y2")

pmse <- list()

pmse[[1]] <- ggplot(data = df, aes(x = x, y = eval(parse(text = paste(hori[1])))))+
  geom_line()+
  labs(title = paste(hori[1]))+
  ylab(paste(hori[1]))

pmse[[2]] <- ggplot(data = df, aes(x = x, y = eval(parse(text = paste(hori[2])))))+
  geom_line()+
  labs(title = paste(hori[2]))+
  ylab(paste(hori[2]))

pmse[[1]]
pmse[[2]]

如果12i 替换,而i = 1i = 2 分别保存第二个图形2 次。不知何故,第一个情节似乎被覆盖了:

pmse <- list()
i <- 1
pmse[[i]] <- ggplot(data = df, aes(x = x, y = eval(parse(text = paste(hori[i])))))+
  geom_line()+
  labs(title = paste(hori[i]))+
  ylab(paste(hori[i]))

i <- 2
pmse[[i]] <- ggplot(data = df, aes(x = x, y = eval(parse(text = paste(hori[i])))))+
  geom_line()+
  labs(title = paste(hori[i]))+
  ylab(paste(hori[i]))

pmse[[1]]
pmse[[2]]

如何使用变量(我覆盖)而不是数字 12 来重现第一个代码 sn-p?当我使用i = 1j = 2 并将第二个“迭代”中的i 替换为j 时,它工作正常。我错过了什么吗?我该如何解决这个问题?

【问题讨论】:

标签: r for-loop ggplot2


【解决方案1】:

我建议重新考虑如何组织与 ggplot 相关的数据并利用 facet_wrap

df %>% 
  gather(key, value, -x) %>% 
  ggplot(., aes(x=x, y=value)) + 
  geom_line() +  
  facet_wrap(~key)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-01
    • 2020-01-27
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多