Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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
538 ggplot输出:在R栅格图形中验证pictureGrob_R_Ggplot2_R Grid_Grimport - Fatal编程技术网

538 ggplot输出:在R栅格图形中验证pictureGrob

538 ggplot输出:在R栅格图形中验证pictureGrob,r,ggplot2,r-grid,grimport,R,Ggplot2,R Grid,Grimport,我正在尝试编写一个小实用程序函数,在底部用一个漂亮的小徽标和url注释我的绘图-例如: 我已经知道如何将postscript文件加载到R中;这是为了证明情节底部的形象,这让我发疯。我无法将图片文件夹左对齐;我最多只能把它放在绘图的左边,但我的一半图像被截去了,就像下面这个可复制的例子: 修补宽度设置可以通过限制pictureGrob周围的缓冲区,大致达到我想要达到的效果,但我认为,我真正想要的是在其视口内左对齐图片本身,或者使视口完全贴紧图片。[Paul Murrell在grid book上做

我正在尝试编写一个小实用程序函数,在底部用一个漂亮的小徽标和url注释我的绘图-例如:

我已经知道如何将postscript文件加载到R中;这是为了证明情节底部的形象,这让我发疯。我无法将
图片文件夹
左对齐;我最多只能把它放在绘图的左边,但我的一半图像被截去了,就像下面这个可复制的例子:

修补
宽度
设置可以通过限制
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,它们的边缘确实有点粗糙