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

R ggplot2如何按类配色绘制散点并标注两类共有数据点

ggplot2绘制分类散点图并标注共有观测点

测试数据集

df<- structure(list(DES = c("AAAAA", "ABBBB", "BBDDD", "CHDDD", "NMHH", 
"YNNN", "UUUU", "IMMM", "TTSGG", "MHDDD", "IIKKKKK", "UDDDD", 
"AAAAA", "ABBBB"), Name = c("AB1", "TH1", "TH2", "HUA", "HUA1", 
"UMA", "YIN", "YIM", "IUMH", "YIMH", "YIH", "TH2", "AB1", "TH1"
), data = c(1.399260301, 1.435057306, 1.515715678, 1.157216398, 
1.452347714, 1.172466387, 1.16325675, 2.614138423, 0.895228818, 
1.571925745, 1.717242238, 1.572841664, 0.924094104, 1.59458932
), Exact = c(0.000536206, 0.000910058, 0.001145037, 0.00114666, 
0.001883335, 0.002365192, 0.002548559, 0.003406673, 0.004232483, 
0.005164572, 0.006269242, 0.006741774, 0.009565493, 0.009581586
), Class = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L)), class = "data.frame", row.names = c(NA, -14L))

需求说明

  • 绘制散点图,x轴映射data字段,y轴映射-log10(Exact)计算值
  • 不同Class类别的点使用不同颜色区分
  • 标注两个类别中Name字段共有的点,展示对应的名称标签
  • 已知两类共有的Name值为:AB1、TH1、TH2、YIH

原有代码问题

最初的基础绘图代码:

ggplot(data=df, aes(x = data, y = -log10(Exact)))+
  geom_point(colour="blue",size=0.5)

后续尝试分类配色的代码运行失败:

ggplot(data=df, aes(x = data, y = -log10(Exact)))+
  geom_point(colour="blue",size=0.5)+
  geom_point(data=df$Class ==1 , aes(x=data, y=-log10(Exact)), colour="red", size=2)+
  geom_point(data=df$Class ==2, aes(x=data, y=-log10(Exact)), colour="green", size=2)

失败原因:geom_point()的data参数必须传入数据框对象,直接传入df$Class ==1这类逻辑向量不符合参数输入要求,重复叠加三层geom_point也属于冗余写法。

正确实现代码

library(ggplot2)
# 定义共有名称集合
common_name <- c("AB1", "TH1", "TH2", "YIH")
# 提取需要加标签的观测子集
df_label <- subset(df, Name %in% common_name)

ggplot(df, aes(x = data, y = -log10(Exact))) +
  # 直接在美学映射中绑定颜色到Class字段,自动区分两类点颜色
  geom_point(aes(color = as.factor(Class)), size = 2) +
  # 自定义两类点的配色,对应Class1为红色,Class2为绿色
  scale_color_manual(values = c("1" = "red", "2" = "green"), name = "类别") +
  # 给共有点添加名称标签,vjust调整标签位置避免遮挡点
  geom_text(data = df_label, aes(label = Name), vjust = -0.8, size = 3.5, show.legend = F) +
  theme_bw()

内容的提问来源于stack exchange,提问作者nik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:27:49