You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:05:49