1

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

我不明白这如何正确绘制和保存 pdf,但不能将 ggplot 对象正确存储在 t list() 中,或者使用 do.call(grid.arrange,t) 在渲染中如何存在一些混淆。原始线(黑色)如何正确绘制,但 geom_line 添加不正确?我真的很困惑。

如果有人可以帮助我检查此代码并了解如何正确绘制所有线条,然后将它们放在一个很棒的网格中。

下面使用随机数据的可重现代码

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)
4

1 回答 1

0

嗯,这不是我想的你想要的,但是很接近,而且代码更少

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")

在此处输入图像描述

于 2013-10-31T04:31:14.847 回答