R 将ggplot保存到列表中,然后应用到网格。从最后一个绘图排列几何图形线将填充所有以前的绘图

R 将ggplot保存到列表中,然后应用到网格。从最后一个绘图排列几何图形线将填充所有以前的绘图,r,for-loop,ggplot2,save,correlation,R,For Loop,Ggplot2,Save,Correlation,我对R和ggplot2很陌生。我正在尝试使用for循环创建一个由相关性图以及它们的后续最大值和最小值组成的网格。然后,这些绘图将以PDF格式保存到目录中。保存后,将正确绘制蓝色线(最小-最大值)。但是,当我使用do.call(grid.arrange,t)或对列表中的绘图的任何其他调用时。您没有获得正确的蓝线,但最后的打印蓝线填充了所有打印 我不明白如何正确地打印和保存pdf,但却无法将ggplot对象正确地存储在t list()中,或者如何在使用do.call(grid.arrange,t)进

我对R和ggplot2很陌生。我正在尝试使用for循环创建一个由相关性图以及它们的后续最大值和最小值组成的网格。然后,这些绘图将以PDF格式保存到目录中。保存后,将正确绘制蓝色线(最小-最大值)。但是,当我使用do.call(grid.arrange,t)或对列表中的绘图的任何其他调用时。您没有获得正确的蓝线,但最后的打印蓝线填充了所有打印

我不明白如何正确地打印和保存pdf,但却无法将ggplot对象正确地存储在t list()中,或者如何在使用do.call(grid.arrange,t)进行渲染时出现一些混乱。原始线条(黑色)如何正确绘制,而几何线条添加不正确?我真的很困惑

如果有人能帮我检查一下这段代码,并找出如何正确地绘制所有线条,然后将它们放在网格中,这将是非常棒的

下面使用随机数据的可复制代码

require(TTR)
require(ggplot2)
library(gridExtra)

set.seed(12345)
filelocation = "c:/"
values <- as.data.frame(matrix( rnorm(5*500,mean=0,sd=3), 500, 5))

t <- list()
rollLength = 25
for( i in 1:(ncol(values)))
{
p <- ggplot(data=values, aes(x = index(values)) ) 
p <- p + geom_line(data=values, aes_string(y = colnames(values)[i]))
p <- p + geom_line(data = values, aes(x = index(values), y = runMax(values[,i], n = rollLength) ), colour = "blue", linetype = "longdash" )
p <- p + geom_line(data = values, aes(x = index(values), y = runMin(values[,i], n = rollLength) ), colour = "blue", linetype = "longdash" )
p <- p + ggtitle(colnames(values)[i]) + xlab("Date") + ylab("Pearson Correlation")
print(p)
ggsave( file = paste(colnames(values)[i],".pdf",sep = "") , path = filelocation)
assign(paste("p", i, sep = ""), p)
t[[i]] <- p
}

do.call(grid.arrange,t)
require(TTR)
需要(ggplot2)
图书馆(gridExtra)
种子集(12345)
filelocation=“c:/”

值Hmm,我认为这并不完全是您想要的,但是非常接近,代码更少

require(TTR)
require(ggplot2)

set.seed(12345)
values <- as.data.frame(matrix( rnorm(5*500,mean=0,sd=3), 500, 5))
rollLength = 25

library(reshape2)
dfmelt <- melt(values)
dfmelt$max <- runMax(dfmelt$value, n=rollLength)
dfmelt$min <- runMin(dfmelt$value, n=rollLength)
dfmelt$row <- index(dfmelt)
ggplot(dfmelt, aes(x = row, y = value)) +
  geom_line() +
  geom_line(aes(x = row, y = max), data=dfmelt, colour = "blue", 
                                   linetype = "longdash") +
  geom_line(aes(x = row, y = min), data=dfmelt, colour = "blue", 
                                   linetype = "longdash") +
  facet_wrap(~ variable, scales="free")
require(TTR)
需要(ggplot2)
种子集(12345)

价值观非常好。虽然很接近,但经过一些调整,我终于找到了答案。干得好,谢谢。