538 ggplot输出:在R栅格图形中验证pictureGrob
我正在尝试编写一个小实用程序函数,在底部用一个漂亮的小徽标和url注释我的绘图-例如: 我已经知道如何将postscript文件加载到R中;这是为了证明情节底部的形象,这让我发疯。我无法将538 ggplot输出:在R栅格图形中验证pictureGrob,r,ggplot2,r-grid,grimport,R,Ggplot2,R Grid,Grimport,我正在尝试编写一个小实用程序函数,在底部用一个漂亮的小徽标和url注释我的绘图-例如: 我已经知道如何将postscript文件加载到R中;这是为了证明情节底部的形象,这让我发疯。我无法将图片文件夹左对齐;我最多只能把它放在绘图的左边,但我的一半图像被截去了,就像下面这个可复制的例子: 修补宽度设置可以通过限制pictureGrob周围的缓冲区,大致达到我想要达到的效果,但我认为,我真正想要的是在其视口内左对齐图片本身,或者使视口完全贴紧图片。[Paul Murrell在grid book上做
图片文件夹
左对齐;我最多只能把它放在绘图的左边,但我的一半图像被截去了,就像下面这个可复制的例子:
修补宽度
设置可以通过限制pictureGrob
周围的缓冲区,大致达到我想要达到的效果,但我认为,我真正想要的是在其视口内左对齐图片本身,或者使视口完全贴紧图片。[Paul Murrell在grid book上做了类似的事情,但这似乎取决于一个stringWidth
实用函数,该函数不支持图片(?)
我问过一个类似的问题,但正如巴蒂斯特在那个里的评论,“在网格中处理正当性总是相当尴尬”
感谢您的帮助;任何关于网格中的正当性的概念性讨论的指针都将是壮观的
可复制代码(请注意,grImport
需要安装ghostscript):
require(grImport)
需要(ggplot2)
需要(额外)
#注意:您的计算机上还需要安装ghostscript。
#我花了很长时间让鬼脚本正常工作。
#从R邮件列表的内部,我发现了这个有用的提示
#来自保罗·穆雷尔本人:
#https://www.mail-archive.com/r-help@r-project.org/msg203180.html
#YMMV,这在我的机器上起作用了:
#gswin我相信widthDetails并没有为pictureGrobs实现,所以调整会做随机的事情
这里有一种方法:定义对象的宽度,并将其放置在x=0.5宽度处
require(grImport)
hourglass <- new("Picture",
paths= list(new("PictureFill",
x=c(0, 1, 0, 1),
y=c(0, 0, 1, 1))),
summary= new("PictureSummary",
numPaths=1,
xscale=c(0, 1),
yscale=c(0, 1)))
g1 <- pictureGrob(hourglass, use.gc=FALSE,x=unit(1,"line"),
width=unit(2,"line"), gp=gpar(fill="red"))
library(ggplot2)
library(gtable)
library(dplyr)
p <- qplot(1,1)
g <- ggplotGrob(p)
grid.newpage()
g %>%
gtable_add_rows(unit(2,"lines")) %>%
gtable_add_grob(rectGrob(gp=gpar(fill="grey")), name="border",
t=nrow(g)+1,l=1,r=ncol(g)) %>%
gtable_add_grob(g1, t=nrow(g)+1,l=1,r=ncol(g)) %>%
gtable_add_grob(textGrob("text here", x=1, hjust=1, gp=gpar(col="white")),
name = "text", t=nrow(g)+1,l=1,r=ncol(g)) %>%
grid.draw
require(grImport)
沙漏%
gtable_add_grob(textGrob(“此处的文本”,x=1,hjust=1,gp=gpar(col=“white”)),
name=“text”,t=nrow(g)+1,l=1,r=ncol(g))%>%
网格绘制
我相信widthDetails并没有为pictureGrobs实现,所以对正是随机的
这里有一种方法:定义对象的宽度,并将其放置在x=0.5宽度处
require(grImport)
hourglass <- new("Picture",
paths= list(new("PictureFill",
x=c(0, 1, 0, 1),
y=c(0, 0, 1, 1))),
summary= new("PictureSummary",
numPaths=1,
xscale=c(0, 1),
yscale=c(0, 1)))
g1 <- pictureGrob(hourglass, use.gc=FALSE,x=unit(1,"line"),
width=unit(2,"line"), gp=gpar(fill="red"))
library(ggplot2)
library(gtable)
library(dplyr)
p <- qplot(1,1)
g <- ggplotGrob(p)
grid.newpage()
g %>%
gtable_add_rows(unit(2,"lines")) %>%
gtable_add_grob(rectGrob(gp=gpar(fill="grey")), name="border",
t=nrow(g)+1,l=1,r=ncol(g)) %>%
gtable_add_grob(g1, t=nrow(g)+1,l=1,r=ncol(g)) %>%
gtable_add_grob(textGrob("text here", x=1, hjust=1, gp=gpar(col="white")),
name = "text", t=nrow(g)+1,l=1,r=ncol(g)) %>%
grid.draw
require(grImport)
沙漏%
gtable_add_grob(textGrob(“此处的文本”,x=1,hjust=1,gp=gpar(col=“white”)),
name=“text”,t=nrow(g)+1,l=1,r=ncol(g))%>%
网格绘制
我相信widthDetails并没有为pictureGrobs实现,所以对正是随机的
这里有一种方法:定义对象的宽度,并将其放置在x=0.5宽度处
require(grImport)
hourglass <- new("Picture",
paths= list(new("PictureFill",
x=c(0, 1, 0, 1),
y=c(0, 0, 1, 1))),
summary= new("PictureSummary",
numPaths=1,
xscale=c(0, 1),
yscale=c(0, 1)))
g1 <- pictureGrob(hourglass, use.gc=FALSE,x=unit(1,"line"),
width=unit(2,"line"), gp=gpar(fill="red"))
library(ggplot2)
library(gtable)
library(dplyr)
p <- qplot(1,1)
g <- ggplotGrob(p)
grid.newpage()
g %>%
gtable_add_rows(unit(2,"lines")) %>%
gtable_add_grob(rectGrob(gp=gpar(fill="grey")), name="border",
t=nrow(g)+1,l=1,r=ncol(g)) %>%
gtable_add_grob(g1, t=nrow(g)+1,l=1,r=ncol(g)) %>%
gtable_add_grob(textGrob("text here", x=1, hjust=1, gp=gpar(col="white")),
name = "text", t=nrow(g)+1,l=1,r=ncol(g)) %>%
grid.draw
require(grImport)
沙漏%
gtable_add_grob(textGrob(“此处的文本”,x=1,hjust=1,gp=gpar(col=“white”)),
name=“text”,t=nrow(g)+1,l=1,r=ncol(g))%>%
网格绘制
我相信widthDetails并没有为pictureGrobs实现,所以对正是随机的
这里有一种方法:定义对象的宽度,并将其放置在x=0.5宽度处
require(grImport)
hourglass <- new("Picture",
paths= list(new("PictureFill",
x=c(0, 1, 0, 1),
y=c(0, 0, 1, 1))),
summary= new("PictureSummary",
numPaths=1,
xscale=c(0, 1),
yscale=c(0, 1)))
g1 <- pictureGrob(hourglass, use.gc=FALSE,x=unit(1,"line"),
width=unit(2,"line"), gp=gpar(fill="red"))
library(ggplot2)
library(gtable)
library(dplyr)
p <- qplot(1,1)
g <- ggplotGrob(p)
grid.newpage()
g %>%
gtable_add_rows(unit(2,"lines")) %>%
gtable_add_grob(rectGrob(gp=gpar(fill="grey")), name="border",
t=nrow(g)+1,l=1,r=ncol(g)) %>%
gtable_add_grob(g1, t=nrow(g)+1,l=1,r=ncol(g)) %>%
gtable_add_grob(textGrob("text here", x=1, hjust=1, gp=gpar(col="white")),
name = "text", t=nrow(g)+1,l=1,r=ncol(g)) %>%
grid.draw
require(grImport)
沙漏%
gtable_add_grob(textGrob(“此处的文本”,x=1,hjust=1,gp=gpar(col=“white”)),
name=“text”,t=nrow(g)+1,l=1,r=ncol(g))%>%
网格绘制
谢谢!从概念上讲,这是因为宽度=单位(2,“线”)限制了图片(有效地做了Murrell书中“非常舒适”的例子所做的),然后x=单位(1,“线”)将其从x=0/视口左侧移动一点吗?我猜。。我没怎么用pictureGrobs,它们的边缘确实有点粗糙。谢谢!从概念上讲,这是因为宽度=单位(2,“线”)限制了图片(有效地做了Murrell书中“非常舒适”的例子所做的),然后x=单位(1,“线”)将其从x=0/视口左侧移动一点吗?我猜。。我没怎么用pictureGrobs,它们的边缘确实有点粗糙。谢谢!从概念上讲,这是因为宽度=单位(2,“线”)限制了图片(有效地做了Murrell书中“非常舒适”的例子所做的),然后x=单位(1,“线”)将其从x=0/视口左侧移动一点吗?我猜。。我没怎么用pictureGrobs,它们的边缘确实有点粗糙。谢谢!从概念上讲,这是因为宽度=单位(2,“线”)限制了图片(有效地做了Murrell书中“非常舒适”的例子所做的),然后x=单位(1,“线”)将其从x=0/视口左侧移动一点吗?我猜。。我没怎么用pictureGrobs,它们的边缘确实有点粗糙