我正在尝试编写一个小实用函数来注释我的情节Reuben Fischer-Baum 风格,底部有一个漂亮的小徽标和 url - 例如:
我已经想出了如何将 postscript 文件加载到 R 中;它证明了情节底部的图像让我发疯。我无法pictureGrob
左对齐;充其量我可以让它在我的情节的左侧居中,但是我的图像的一半被切断了,就像下面这个可重现的例子:
通过限制 周围的缓冲区,修改width
设置可以近似于我想要完成的任务pictureGrob
,但我认为,我真正想要的是在其视口内左对齐图片本身,或者使视口完全贴合图片。[Paul Murrell 在第 3 页做了类似的事情。网格书的162,但这似乎取决于一个stringWidth
没有图片伙伴的实用函数(?)]
我问过一个关于gridextra tables的类似问题,但正如 baptiste 在那里评论的那样,“在网格中处理对齐总是相当尴尬”。
任何帮助表示赞赏;指向任何关于网格中正当理由发生的概念性讨论的指针将是壮观的。
可重现的代码(注意grImport
需要安装 ghostscript):
require(grImport)
require(ggplot2)
require(gridExtra)
#nb: you also need ghostscript installed on your machine.
#I had a hell of a time getting ghostscript to work properly.
#From the bowels of a R mailing list, I found this helpful tip
#from Paul Murrell himself:
#https://www.mail-archive.com/r-help@r-project.org/msg203180.html
#YMMV, THIS WORKED ON MY MACHINE:
#gswin <- shortPathName("C:/Program Files/gs/gs9.15/bin/gswin64c.exe")
#Sys.setenv(R_GSCMD = gswin)
#get a fun little moon
PostScriptTrace(
file=file.path(system.file(package = "RGraphics"), "extra", "comic_moon.ps"),
outfilename="comic_moon.xml")
moon <- readPicture("comic_moon.xml")
annotate_me <- function(
plot_to_annotate,
some_picture,
bg_color="gray30"
) {
#make a gTree
foo <- gTree(
children=gList(
rectGrob(gp=gpar(fill=bg_color)),
pictureGrob(
picture=some_picture,
x=0, y=0.5,
#width=?
)
)
)
final <- arrangeGrob(
plot_to_annotate, foo,
nrow=2, heights=c(19,1)
)
return(final)
}
annotate_me(
plot_to_annotate=qplot(mpg, data=mtcars),
some_picture=moon
)