R结合记录的情节

时间:2018-07-19 11:27:35

标签: r ggplot2

由于某些原因,我在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]]

预先感谢您:)

0 个答案:

没有答案