如何用ggpubr::ggscatter()实现散点图的选择性点标注?
如何在ggscatter中仅保留指定散点的标注?
当前通过ggscatter绘制的MDS散点图显示了所有样本的标注,需求是仅保留Herens、Payerne、Orbe、Val de Ruz、Lavaux这几个点的标注,移除其余所有标注。
原代码如下:
data("swiss") head(swiss) library(magrittr) library(dplyr) library(ggpubr) # Compute MDS mds <- swiss %>% dist() %>% cmdscale() %>% as_tibble() colnames(mds) <- c("Dim.1", "Dim.2") # Plot MDS ggscatter(mds, x = "Dim.1", y = "Dim.2", label = rownames(swiss), size = 1, repel = TRUE)
解决方案
核心方法是通过条件判断,仅为指定样本保留标注文本,其余样本的标注设为NA(ggpubr会自动忽略NA值的标注)。修改后的完整代码如下:
data("swiss") head(swiss) library(magrittr) library(dplyr) library(ggpubr) # Compute MDS mds <- swiss %>% dist() %>% cmdscale() %>% as_tibble() colnames(mds) <- c("Dim.1", "Dim.2") # 指定需要保留标注的样本名称 target_labels <- c('Herens', 'Payerne', 'Orbe', "Val de Ruz", "Lavaux") # Plot MDS,仅保留指定样本的标注 ggscatter(mds, x = "Dim.1", y = "Dim.2", label = ifelse(rownames(swiss) %in% target_labels, rownames(swiss), NA), size = 1, repel = TRUE)
关键说明
- 先定义需要保留标注的样本列表
target_labels,方便后续维护修改; - 使用
ifelse()函数对每个样本名进行判断:如果样本名在目标列表中,就保留原名称作为标注,否则赋值为NA; - ggscatter在处理
label参数时,会自动跳过值为NA的标注,最终仅显示指定样本的文本标签。
内容的提问来源于stack exchange,提问作者nerd
相关产品推荐
相关产品推荐

