ggplot2组合图之ggpubr

ggplot2拥有强大的绘图功能,当我们需要将多个ggplot2绘制的图片组合在一种图片中时,可选方法之一就是使用ggpubr包中的ggarrange函数,该函数的一大优点就是可以自动设置多张图片共用一个图例(使用第一张图片的图例),并且自动调整图片之间的比例。

话不多说,上代码:


library(ggplot2)

# 构建数据集
data_ab <- ToothGrowth
data_ab$dose <- as.factor(data_ab$dose)
data_ab$len2 <- data_ab$len / 10
# 绘制图形
a <- ggplot(data = data_ab, aes(x = dose, y = len, fill = dose)) + 
  geom_boxplot(width = 0.5) +
  # 给箱式图添加散点
  geom_jitter(shape = 16, position = position_jitter(0.2), color = "black") +
  # 坐标轴标签
  labs(x = "Dose", y = "Length") +
  # 修改legend
  scale_fill_discrete(name = "", breaks = c(0.5, 1, 2),
                    labels = paste("Dose=", c(0.5, 1, 2), sep = "")) +
  # 修改legend位置
  theme(legend.position = "top")
print(a)

图片a如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16

 接着绘制图片b:

b <- ggplot(data = data_ab, aes(x = dose, y = len2, fill = dose)) + 
  geom_boxplot(width = 0.5)
print(b)

 图片b如下所示:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16

 使用ggpubr将上述两张图片组合在一起,并为每张图片添加一个标签:

# 使用ggarange将a和b组合在一起, ggarange的一大优点是其合并legend
library(ggpubr)
tiff("ggpubr1.tiff", res = 600, width = 3600, height = 3600, compression = "lzw")
ggarrange(
  a, b, # 指定待组合的图
  ncol = 1, nrow = 2, # 组合图的行列数
  labels = c("A", "B"), # 组合图标注标签
  label.x = -0.0, label.y = 1.12, # 标签所在位置
  font.label = list(size = 18, face = "bold"), # 标签字体
  common.legend = T # 共用图例, 选用第一张图的图例
)
dev.off()

在本地生成的图片如下图所示: 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16

 在ggarrange中,还可以修改两张图片的占比:

tiff("ggpubr2.tiff", res = 600, width = 3600, height = 3600, compression = "lzw")
ggarrange(
  a, b,
  ncol = 1, nrow = 2,
  common.legend = T,
  labels = c("A", "B"),
  label.x = -0.0, label.y = 1.12,
  font.label = list(size = 18, face = "bold"),
  heights = c(0.5, 1) # 指定两张图片的高度占比
)
dev.off()

结果如下图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16

 接着,再绘制一张图c,将其与上述组合图进行组合:

c <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  geom_curve(aes(x = 2.62, y = 21.0, xend = 3.57, yend = 15.0, colour = "curve")) +
  geom_segment(aes(x = 2.62, y = 21.0, xend = 3.57, yend = 15.0, colour = "segment"))
print(c)

图c如下所示:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16

 将c与ab的组合图组合在一起, 使c占图片左侧1/2; a与b联合占右侧1/2

tiff("ggpubr3.tiff", res = 600, width = 7200, height = 3600, compression = "lzw")
plot_ab <- ggarrange(
  a, b,
  ncol = 1, nrow = 2,
  common.legend = T,
  labels = c("A", "B"),
  label.x = -0.0, label.y = 1.12,
  font.label = list(size = 18, face = "bold")
)
plot_abc <- ggarrange(c, plot_ab, ncol = 2, nrow = 1, labels = c("C", ""),
                      label.x = 0.0, label.y = 1.0, widths = c(0.8, 1.2))
print(plot_abc)
dev.off()

生成图片结果如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16

### 使用 `ggpubr` 包拼接多个散点 为了实现这一目标,可以采用 `ggpubr` 提供的 `ggarrange()` 函数来排列由 `ggplot2` 创建的不同散点表。下面展示了一个具体的实例,该例子展示了如何创建并组合来自不同数据集中的散点。 #### 安装与加载必要的库 首先确保已经安装了所需的软件包,并将其载入工作环境中[^5]: ```r if (!require("ggpubr")) { install.packages("ggpubr") } library(ggpubr) if (!require("ggplot2")) { install.packages("ggplot2") } library(ggplot2) ``` #### 构建单个散点对象 接着定义几个单独的散点用于后续安排显示。这里以鸢尾花 (`iris`) 和汽车性能 (`mtcars`) 数据为例构建两个不同的散点[^3]: ```r # 鸢尾花数据集上的散点 scatter_iris <- ggplot(iris, aes(x=Sepal.Length, y=Petal.Length, color=Species)) + geom_point(size=3) + labs(title="Iris Sepal vs Petal Length") # 汽车性能数据集上的散点 scatter_mtcars <- ggplot(mtcars, aes(x=wt, y=mpg, color=cyl)) + geom_point(alpha=0.7, size=4) + labs(title="Car Weight vs Mileage per Gallon") ``` #### 组合多个散点为单一布局 最后一步就是调用 `ggarrange()` 来按照指定的方式布置这些散点。可以通过调整参数控制片之间的间距以及添加共同标签等特性[^1]: ```r combined_plots <- ggarrange(scatter_iris, scatter_mtcars, ncol = 2, # 设置列数为2 common.legend = TRUE, # 启用共享例 legend="right") # 将例放置于右侧 print(combined_plots) ``` 通过上述代码片段,能够有效地利用 `ggpubr` 的功能将多个散点整合在一起,从而更方便地对比分析不同类型的数据关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值