网格包:在一个对象中保存多个 grobs 的图
grid package: Save plot of multiple grobs in one object
我正在将多个 grob 组合到一张图像中。我可以将输出保存到 RStudio 中的文件,但如何将其分配给 R 中的对象?
这是一个例子:
library(ggplot2)
library(grid)
#create the plot
plot <- ggplot(mtcars) +
geom_point(aes(x = disp, y = mpg))
#create two grobs
rect <- rectGrob(gp = gpar(alpha = 0.5, col = "white"))
circle <- circleGrob(x = 0.5, y = 0.5, r = 0.2, gp = gpar(fill = "darkred"))
#create the viewport
vipo <- viewport(x = 0.8, y = 0.8,
just = c("centre", "centre"),
width = 0.3, height = 0.3)
我正在尝试 gTree()
我可以在其中传递 grob 和视口,但输出是错误的:
plot_gtree <- gTree(children = gList(ggplotGrob(plot), rect, circle), vp = vipo)
grid.draw(plot_gtree)
当然它不知道哪个grob属于哪个viewport。
如果我这样画就可以了:
grid.draw(ggplotGrob(plot))
pushViewport(vipo)
grid.draw(rect)
grid.draw(circle)
popViewport()
我怎样才能像保存 ggplot 那样保存它?
几个选项:
使用annotation_custom
将其添加到绘图中:
plot = plot + annotation_custom(grobTree(rect, circle),
xmin=300, xmax=400, ymin=25, ymax=30)
但是您需要指定 x
& y
坐标。
或将其添加到情节gtable
:
g = gtable::gtable_add_grob(x=ggplotGrob(plot),
grobs=grobTree(rect, circle, vp=vipo),
t=7, l=5)
grid.newpage(); grid.draw(g)
我正在将多个 grob 组合到一张图像中。我可以将输出保存到 RStudio 中的文件,但如何将其分配给 R 中的对象?
这是一个例子:
library(ggplot2) library(grid) #create the plot plot <- ggplot(mtcars) + geom_point(aes(x = disp, y = mpg)) #create two grobs rect <- rectGrob(gp = gpar(alpha = 0.5, col = "white")) circle <- circleGrob(x = 0.5, y = 0.5, r = 0.2, gp = gpar(fill = "darkred")) #create the viewport vipo <- viewport(x = 0.8, y = 0.8, just = c("centre", "centre"), width = 0.3, height = 0.3)
我正在尝试 gTree()
我可以在其中传递 grob 和视口,但输出是错误的:
plot_gtree <- gTree(children = gList(ggplotGrob(plot), rect, circle), vp = vipo) grid.draw(plot_gtree)
当然它不知道哪个grob属于哪个viewport。
如果我这样画就可以了:
grid.draw(ggplotGrob(plot)) pushViewport(vipo) grid.draw(rect) grid.draw(circle) popViewport()
我怎样才能像保存 ggplot 那样保存它?
几个选项:
使用annotation_custom
将其添加到绘图中:
plot = plot + annotation_custom(grobTree(rect, circle),
xmin=300, xmax=400, ymin=25, ymax=30)
但是您需要指定 x
& y
坐标。
或将其添加到情节gtable
:
g = gtable::gtable_add_grob(x=ggplotGrob(plot),
grobs=grobTree(rect, circle, vp=vipo),
t=7, l=5)
grid.newpage(); grid.draw(g)