我有一个来自晶格库的图(水平图)和来自oce库的简笔图,我想将它们堆叠在一起。我在堆叠这些图时遇到了问题,就像通常使用基数R一样,我认为这是因为它们都是专门的图。是否可以将以下两个图堆叠在同一页面上,以使时间戳(x轴)彼此对齐?
library(oce)
library(lattice)
library(grid)
第一个情节(来自OCE帮助文档的示例)
# Oceanographic example
data(met)
t <- met[["time"]]
u <- met[["u"]]
v <- met[["v"]]
p <- met[["pressure"]]
dev.new(width=15, height=4)
plotSticks(t, 99, u, v, yscale=25)
第二个情节:
AllT<-NULL
for(i in seq(1,length(t))){
myTime<-t[i]
myTime2<-rep(myTime,10)
AllT<-append(AllT,myTime2)
}
myY<-NULL
for(j in seq(1,length(t))){
mySeq<-seq(1,10)
myY<-append(myY,mySeq)
}
Temp<-seq(1,7200)
MyDF<-data.frame(Temp,myY,AllT)
#Plot code
dev.new(width=15, height=6)
p1<-levelplot(Temp ~ AllT * myY,
data = MyDF,ylim=c(10,1),
xlab = "Time", ylab = "y]",
aspect=0.4,
)
p1
trellis.focus("legend", side="right", clipp.off=TRUE, highlight=FALSE)
grid.text('[Temp]', 1.9, .5, hjust=0.5, vjust=1,rot=270)
trellis.unfocus()
理想情况下,最终图将在顶部显示棒图(如果x轴对齐,则不需要在棒图上打勾),而下面的水平图在两者之间留有最小空间
答案 0 :(得分:1)
这是我目前能想到的。有一种方法可以像我所知道的那样实际修改grobs
,但是当我尝试时却不喜欢gTrees
。这样可以使您靠近。
这些链接可能有用。
https://www.andrewheiss.com/blog/2016/12/08/save-base-graphics-as-pseudo-objects-in-r/
force a regular plot object into a Grob for use in grid.arrange
#libraries
library(gridGraphics)
library(grid)
library(gridExtra)
library(oce)
library(gggplot2)
library(ggplotify)
#plots
data(met)
t <- met[["time"]]
u <- met[["u"]]
v <- met[["v"]]
p <- met[["pressure"]]
grab_grob <- function(){
grid.echo()
grid.grab()
}
plotSticks(t, 99, u, v, yscale=25)
p1 <- grab_grob() #grab the last plot as a grob
AllT <- NULL
for(i in seq(1, length(t))){
myTime <- t[i]
myTime2 <- rep(myTime, 10)
AllT <- append(AllT, myTime2)
}
myY <- NULL
for(j in seq(1, length(t))){
mySeq <- seq(1, 10)
myY <- append(myY, mySeq)
}
Temp <- seq(1, 7200)
MyDF <- data.frame(Temp, myY, AllT)
#Plot code
dev.new(width = 15, height = 6)
p2 <- levelplot(Temp ~ AllT * myY,
data = MyDF, ylim=c(10, 1),
xlab = "Time", ylab = "y]",
aspect = 0.4,
)
p2
trellis.focus("legend", side="right", clipp.off = TRUE, highlight = FALSE)
grid.text('[Temp]', 1.9, .5, hjust = 0.5, vjust = 1, rot = 270)
trellis.unfocus()
p2a <- as.grob(p2)
grid.arrange(p1, p2a, ncol = 1)