Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R图形窗口中组合基础图形和ggplot图形_R_Plot_Ggplot2_Base_Biwavelet - Fatal编程技术网

在R图形窗口中组合基础图形和ggplot图形

在R图形窗口中组合基础图形和ggplot图形,r,plot,ggplot2,base,biwavelet,R,Plot,Ggplot2,Base,Biwavelet,我想生成一个图形,它有一个基本图形和ggplot图形的组合。以下代码显示了使用R的基本绘图功能绘制的我的图: t <- c(1:(24*14)) P <- 24 A <- 10 y <- A*sin(2*pi*t/P)+20 par(mfrow=c(2,2)) plot(y,type = "l",xlab = "Time (hours)",ylab = "Amplitude",main = "Time series") acf(y,main = "Autocorr

我想生成一个图形,它有一个基本图形和ggplot图形的组合。以下代码显示了使用R的基本绘图功能绘制的我的图:

t <- c(1:(24*14)) 
P <- 24 
A <- 10 
y <- A*sin(2*pi*t/P)+20

par(mfrow=c(2,2))
plot(y,type = "l",xlab = "Time (hours)",ylab = "Amplitude",main = "Time series")
acf(y,main = "Autocorrelation",xlab = "Lag (hours)", ylab = "ACF")
spectrum(y,method = "ar",main = "Spectral density function", 
         xlab = "Frequency (cycles per hour)",ylab = "Spectrum")
require(biwavelet)
t1 <- cbind(t, y)
wt.t1=wt(t1)
plot(wt.t1, plot.cb=FALSE, plot.phase=FALSE,main = "Continuous wavelet transform",
     ylab = "Period (hours)",xlab = "Time (hours)")

t使用gridBase包,只需添加两行即可。我认为,如果你想用网格进行有趣的绘图,你只需要理解和掌握视口。它实际上是网格包的基本对象

vps <- baseViewports()
pushViewport(vps$figure) ##   I am in the space of the autocorrelation plot

vps您可以在grob和viewport中使用print命令
首先绘制基础图形,然后添加ggplot

library(grid)

# Let's say that P is your plot
P <- ggplot(acd, # etc... )

# create an apporpriate viewport.  Modify the dimensions and coordinates as needed
vp.BottomRight <- viewport(height=unit(.5, "npc"), width=unit(0.5, "npc"), 
                           just=c("left","top"), 
                           y=0.5, x=0.5)

# plot your base graphics 
par(mfrow=c(2,2))
plot(y,type #etc .... )

# plot the ggplot using the print command
print(P, vp=vp.BottomRight)
库(网格)
#假设P是你的情节

P

我是gridGraphics软件包的粉丝。由于某种原因,我在gridBase上遇到了麻烦

library(ggplot2)
library(gridGraphics)
data.frame(x = 2:10, y = 12:20) -> dat
plot(dat$x, dat$y)
grid.echo()
grid.grab() -> mapgrob
ggplot(data = dat) + geom_point(aes(x = x, y = y)) 
pushViewport(viewport(x = .8, y = .4, height = .2, width = .2))    
grid.draw(mapgrob)

软件包具有用于捕获基本R图的
recordPlot()
函数,以便将它们放在
plot\u grid()函数中

库(双小波)
图书馆(GG2)
图书馆(cowplot)
图书馆(网格图形)

t使用带有
acf()
输出的
polygon
来构建一个类似于
ggplot
的基本图形图几乎同样简单,而且看起来更加一致。感谢我们的回复。这个问题的真正目的是学习如何在图形窗口中组合ggplot和基础图形,我意识到可能有更有效的方法生成所示图形,但出于将来的目的,我想学习指定的方法。请查看
gridBase
软件包…您可能想看看
gridGraphics
软件包,该软件包“[重绘]基本图形为网格图形”。尽管它标记为重复,但这个答案对我来说非常有效:是的,我尝试过这个,问题是,使用ggplot生成的绘图比其他面板大得多(如上所示)。有办法改变这个吗?+1非常好。如果您将对
acf(…)
的调用替换为对
plot.new()
的调用,那么您就不必调用
grid.rect()
来“涂白”acf绘图。我刚回来,看到您添加了这个更简单、更聪明的答案。@JoshO'Brien非常感谢!对于ggplot对象,我将使用
print
方法中的
vp
参数,而不是
grid.draw(ggplotGrob(p))
。你知道如何用你的方法控制绘图的宽度吗?例如,我想要一个基本图形和一个ggplot2图形并排,但是基本图形的宽度要大一些。嗨,Stéphane,你可以完成这一点,在
viewport()
行中调整设置。具体来说,您需要调整
宽度
y
值,尝试不同的值,直到获得所需的结果。谢谢Ricardo。实际上我有一个问题要问
library(grid)

# Let's say that P is your plot
P <- ggplot(acd, # etc... )

# create an apporpriate viewport.  Modify the dimensions and coordinates as needed
vp.BottomRight <- viewport(height=unit(.5, "npc"), width=unit(0.5, "npc"), 
                           just=c("left","top"), 
                           y=0.5, x=0.5)

# plot your base graphics 
par(mfrow=c(2,2))
plot(y,type #etc .... )

# plot the ggplot using the print command
print(P, vp=vp.BottomRight)
library(ggplot2)
library(gridGraphics)
data.frame(x = 2:10, y = 12:20) -> dat
plot(dat$x, dat$y)
grid.echo()
grid.grab() -> mapgrob
ggplot(data = dat) + geom_point(aes(x = x, y = y)) 
pushViewport(viewport(x = .8, y = .4, height = .2, width = .2))    
grid.draw(mapgrob)