嵌套一个小剧情于主剧情之中

22

有没有通用的方法可以将图形嵌入到其他图形中,产生像下面模拟的那样的效果?

我知道在lattice中,你可以使用print(...,more = TRUE,positions = ...)来完成此操作,如该问题中所解释的那样。我猜ggplot也有解决方案(但我不太擅长ggplot)。问题是我想要将标准图形包中使用的普通绘图函数的图嵌入到lattice绘图中。

嵌入式绘图的模拟

提前感谢!


我认为我会放弃并在后期处理中完成它...当然这取决于目标。如果是PPT演示文稿,那么就非常容易。 - Tomas
1
希望这个链接对你有所帮助:http://casoilresource.lawr.ucdavis.edu/drupal/node/1007。 - EDi
3个回答

26

以下是另一种方法:在基础图形中制作ggplot2图形:

require(ggplot2)
require(grid)

plot(sin, -pi, 2*pi)
qp <- qplot(mpg, wt, data=mtcars)
print(qp, vp=viewport(.8, .75, .2, .2))

输入图像描述


这看起来非常通用(以及无比简洁),因为 lattice 绘图(也使用 grid-engine)也可以嵌入其中,而且您似乎可以尝试任何我尝试过的任意网格组合。 - IRTFM
谢谢你的提示,即使它不像 Al R. 的答案那么通用,但肯定更容易使用。 - Backlin
想看看你能否解决这些直方图插图? :) 我认为当它们到达时会很有趣。 - Iterator
在这个例子中,我认为只有required(grid)缺失了。 - Juan
然后,如果你使用ggsave将其保存为pdf文件,结果文件中只会出现最后一个图形。 - Eduardo
@ Eduardo:这是ggsave的预期行为。要保存为PDF,请使用pdf(file ='somefile.pdf')开始并使用dev.off()停止写入文件。 - ROLO

18
你可以尝试使用gridBase包,它提供了一些将基础图形和基于格的图形(包括lattice和ggplot2)整合的功能。下面的示例将一个基础图形绘制在lattice图形内部。
library(lattice)
library(gridBase)
library(grid) 

plot.new()
pushViewport(viewport())
xvars <- rnorm(25)
yvars <- rnorm(25)
xyplot(yvars~xvars)
pushViewport(viewport(x=.6,y=.8,width=.25,height=.25,just=c("left","top")))
grid.rect()
par(plt = gridPLT(), new=TRUE)
plot(xvars,yvars)
popViewport(2)

更多细节请参见:http://casoilresource.lawr.ucdavis.edu/drupal/node/1007 和这里:http://cran.r-project.org/web/packages/gridBase/vignettes/gridBase.pdf


非常优雅!正是我所希望找到的。 - Backlin

3

请查看TeachingDemos包中的教学演示包和subplot()函数,它也可能适用于lattice - 尽管我尚未尝试过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接