ggplot2合并图层后保留分组图例并设置不同图例标题
保留独立图例并设置不同标题的PCA图合并方法
要实现合并后保留两个独立图例并分别设置标题,核心是让两个图层的颜色映射使用独立的尺度系统,这里推荐用ggnewscale包来实现,步骤如下:
步骤1:安装并加载所需包
install.packages(c("ggplot2", "patchwork", "ggnewscale")) library(ggplot2) library(patchwork) library(ggnewscale)
步骤2:合并图层并设置独立图例
不用分开绘制两个独立图对象,直接在同一个ggplot中依次添加图层,通过new_scale_color()分隔两个颜色尺度:
# 创建合并后的图 combined_plot <- ggplot() + # 第一个数据集的点,设置第一个图例标题 geom_point(data = dataWithLang, aes(x = PC1, y = PC2, color = PopLang), alpha = 0.45) + scale_color_discrete(name = "语言分组") + # 自定义第一个图例标题 # 开启新的颜色尺度,让后续图层的color映射独立于之前的设置 new_scale_color() + # 第二个数据集的点,设置第二个图例标题 geom_point(data = dataWithLocang, aes(x = PC1, y = PC2, color = PopLoc)) + scale_color_discrete(name = "地域分组") # 自定义第二个图例标题 # 查看最终合并图 combined_plot
原理说明
new_scale_color()会重置颜色映射的尺度规则,让后续图层的color美学不再和之前的图层合并图例,从而生成两个独立的颜色图例。- 用
scale_color_discrete()(如果是连续型数据则用scale_color_continuous())可以分别为两个图例设置自定义标题。
如果不想额外安装包,也可以将其中一个图层的美学映射改为shape或fill(需配合支持填充的点形状,比如shape=21)来实现双图例,但ggnewscale的方法更直观,且能保持两个图层都用颜色区分分组。
内容的提问来源于stack exchange,提问作者zhang
相关产品推荐
相关产品推荐

