97-R可视化26-底层绘图系统grid学习之拓展包gridExtra

2022-04-05 15:07:19 浏览数 (1)

  • 参考:
    • 4.5 The grid Package | Mastering Software Development in R (bookdown.org)[1]
    • R实战:grid包 - 悦光阴 - 博客园 (cnblogs.com)[2]
    • (11条消息) R语言grid包使用笔记——viewport_数据之美-CSDN博客_r语言grid包[3]
    • 书本《R 绘图系统》

前言

我们接着来唠唠R 的grid 绘图。gridExtra包人如其名,拓展包,自然就是要拓展的。

1-拼图

之前我们说过,ggplot 和base 都有自己的拼图方案:[[88-R可视化20-R的几种基于ggplot的拼图解决方案]]。

而在[[96-R可视化25-底层绘图系统grid学习之viewports]] 中,我们也说过,可以通过调整不同的viewport,实现同一大画布下,整合多个不同的grid 元素。亦或你也可以直接利用整体坐标来分配grob 对象,只是这样自然会有些麻烦。

gridExtra 拓展就比较方便了,可以自动的调配区域:

代码语言:javascript复制
grid.arrange(linesGrob(), circleGrob(),
             roundrectGrob(), segmentsGrob(), 
             ncol = 2)

不过需要注意的是,grid.arrange函数在调用的时候会重新开启一个新的画布。

因为ggplot2 其实就是grob 对象的ggplotGrob 组合,所以对于ggplot 对象,也是同样适用的。

2-设置拼图布局

如果你还记得[[88-R可视化20-R的几种基于ggplot的拼图解决方案]] 的话,其中提到了design 参数:

代码语言:javascript复制
design <- "
  122
  1#3
  443
"
p1   p2   p3   p4 

类似的,在grid.arrange 里,你可以通过参数layout_matrix 进行调配:

代码语言:javascript复制
grid.arrange(rectGrob(), circleGrob(),
             roundrectGrob(), textGrob(label = "good"), 
             layout_matrix = matrix(c(1,1,NA,2,3,3,4,NA),
             ncol = 4, byrow = T))
    
> matrix(c(1,1,NA,2,3,3,4,NA),
         ncol = 4, byrow = T)
     [,1] [,2] [,3] [,4]
[1,]    1    1   NA    2
[2,]    3    3    4   NA

这个matrix 内容,即对应了图中的位置:

以及通过tableGrob()画表格,其实[[43-R可视化01-gt包让R制作漂亮的表格]] 中的表格更好看哦:

代码语言:javascript复制
iris_plot <- ggplot(iris, aes(x = Sepal.Length, 
                              y = Sepal.Width, color = Species))   
  geom_point()
iris_table <- iris %>%
  group_by(Species) %>%
  dplyr::summarize(`Average Sepal.Length` = round(mean(Sepal.Length), 1),
                   `Average Sepal.Width` = round(mean(Sepal.Width), 1)) %>%
  tableGrob()

grid.draw(ggplotGrob(iris_plot))
wc_table_vp <- viewport(x = 0.22, y = 0.85, 
                        just = c("left", "top"),
                        height = 0.1, width = 0.2)
pushViewport(wc_table_vp)
grid.draw(iris_table)
popViewport()

3-详细介绍

可以参考:Index of /web/packages/gridExtra/vignettes (r-project.org)[4]

里面有几个函数的较为详细的用法介绍:

参考资料

[1]

4.5 The grid Package | Mastering Software Development in R (bookdown.org): https://bookdown.org/rdpeng/RProgDA/the-grid-package.html#overview-of-grid-graphics

[2]

R实战:grid包 - 悦光阴 - 博客园 (cnblogs.com): https://www.cnblogs.com/ljhdo/p/4874785.html

[3]

(11条消息) R语言grid包使用笔记——viewport_数据之美-CSDN博客_r语言grid包: https://blog.csdn.net/vivihe0/article/details/47188329

[4]

Index of /web/packages/gridExtra/vignettes (r-project.org): https://cran.r-project.org/web/packages/gridExtra/vignettes/

0 人点赞