在每节,先运行以下这几行程序。
library(ggplot2)
library(ggpubr)
library(ggtext) #用于个性化图表
library(dplyr) #用于数据处理
p_base <- ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point()
使用facet_wrap函数
在 ggplot2 中,可以通过使用 facet_wrap 来在一幅图中显示多个子图。 facet_wrap 函数可以根据一个分类变量创建子图。每个子图都会显示分类变量的一个水平。
p_base +
facet_wrap(~cyl)
另一个例子
p_base +
facet_wrap(~ cyl, ncol = 2, scales = "free")
###使用ggarrange函数
ggarrange允许在一个画布上安排多个独立的图形,例如不同数据集的图、不同类型的图(如条形图和散点图)。 用户可以详细控制图形的布局,例如定义行和列的数量、图形间的间距等。 每个ggplot对象可以独立创建和修改,然后再进行组合。
p1 <- ggplot(data = filter(mtcars, cyl == 4) , aes(x = wt, y = mpg))+ geom_point()
p2 <- ggplot(data = filter(mtcars, cyl == 6) , aes(x = wt, y = mpg))+ geom_point()
p3 <- ggplot(data = filter(mtcars, cyl == 8) , aes(x = wt, y = mpg))+ geom_point()
ggarrange(p1, p2, p3, ncol = 3, nrow = 1, widths = c(1, 1, 1), heights = 0.5)
总结
当需要展示同一数据集中不同子集的比较时(如不同组、不同条件),facet_wrap是一个非常方便的选择,因为它可以快速生成整洁一致的子图。 而当需要包含基于不同数据集的图形,或者需要特别布局(如不同大小的图形并排显示)时,使用ggarrange会更合适。