由于某些原因,我在2个变量中记录了2个ggplots,我想将它们组合为一个。有没有办法做到这一点? Layout(),par()或grid.arrange()也不适合我。
原因:
-我想有2个ggplots和另外的第二个y轴。
-我使用了一些解决方法来创建第二个y轴,因为没有直接的方法可以做到(如我所见)。
-但是创建第二个轴的(?)对象没有以某种方式存储在ggplot本身中,因此我无法拥有2个不同的第二个轴,因为任何时候为下一个ggplot创建新轴时,前一个也会被覆盖。
-我唯一能做的就是在创建每个ggplot后立即保存它们,因此我遇到了一个问题-如何将两个记录的图合并为一个。
我的代码中包含一些伪数据:
library("dplyr")
library("ggplot2")
# data
datasety <- c("SP500", "DAX")
R <- c("R1","R2")
k <- length(datasety)
Date = seq(as.Date("2017-01-01"), as.Date("2017-07-01"), by="days")
n = length(Date)
R1 <- data.frame(
Date,
logreturn = rnorm(n, 0, 1),
price = 1000+seq(n) + rnorm(n, 0, 100)
)
R2 <- data.frame(
Date,
logreturn = rnorm(n, 0, 1),
price = 10000+seq(n) + rnorm(n, 0, 100)
)
# standardize prices
adj_var <- function(rada, fit)
{
max_rada <- max(rada)
min_rada <- min(rada)
max_fit <- max(fit)
min_fit <- min(fit)
ratio <- (max_fit-min_fit)/(max_rada-min_rada)
var <- rada*ratio
offset <- min(fit)-min(var)
var2 <- var + offset
return(list(ratio=ratio, offset=offset, var=var2))
}
# plots
my.plots <- vector(k, mode='list')
for (i in 1:k) {
eval(parse(text=paste("a <- ", R[i], sep="")))
b <- ggplot(a, aes(x=Date, y=logreturn))
b <- b + ggtitle(datasety[i]) + theme(plot.title = element_text(hjust = 0.5))
b <- b + geom_bar(data=a, aes(Date, ifelse(logreturn>0, logreturn, NA), group=1), fill="green", colour="green4", stat="identity")
b <- b + geom_bar(data=a, aes(Date, ifelse(logreturn<=0, -logreturn, NA), group=1), fill="red", colour="red4", stat="identity")
b <- b + geom_line(aes(Date, adj_var(price, abs(logreturn))$var), colour="blue", size=1.1, alpha = .6)
b <- b + scale_y_continuous(sec.axis = sec_axis(~ . / adj_var(a$price, abs(a$logreturn))$ratio - adj_var(a$price, abs(a$logreturn))$offset / adj_var(a$price, a$logreturn)$ratio, name = "price"))
b <- b + theme(axis.title.y.right = element_text(colour="blue"), axis.text.y.right = element_text(colour="blue"))
plot(b)
eval(parse(text=paste("my.plots[[", i, "]] <- recordPlot()", sep="")))
}
# how to arrange these two plots into one?
my.plots[[1]]
my.plots[[2]]
预先感谢您:)