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
相关产品推荐
相关产品推荐

