基于ggplot2修改散点图:添加分组配色、指定直线及条件标签
解决方案
以下是满足你所有需求的完整代码,每部分对应你的要求:
代码实现
# 加载必要包 library(ggplot2) library(ggrepel) # 你的原始数据集(保持不变) CombinedScores<-c("zero", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "60", "G", "LG", "GF", "FER", "VAR", "LOPE", "DAR", "CCOR", "LTR", "Ideal") FalsePositiveRate<-c(0, 0.04, 0.07, 0.1, 0.18, 0.26, 0.4, 0.5, 0.6, 0.71, 0.8, 0.96, 0.1, 0.26, 0.07, 0.49, 0.07, 0.26, 0.05, 0.28, 0.03, 1 ) TruePositiveRate<-c(0, 0.4, 0.4, 0.53, 0.8, 0.8, 0.92, 1, 1, 1, 1, 1, 0.53, 0.8, 0.47, 0.93, 0.4, 0.8, 0.6, 0.8, 0.8, 1) MetricOrAlternate<-c("Metric", "Alternate", "Alternate", "Alternate", "Alternate", "Alternate", "Alternate", "Alternate", "Alternate", "Alternate", "Alternate", "Alternate", "Metric", "Metric", "Metric", "Metric", "Metric", "Metric", "Metric", "Metric", "Metric", "Metric") COMBINEDTABLE<-data.frame(CombinedScores, FalsePositiveRate, TruePositiveRate, MetricOrAlternate) # 绘制图形 ggplot(COMBINEDTABLE, aes(x = FalsePositiveRate, y = TruePositiveRate)) + # 需求1:按MetricOrAlternate配色,自动生成图例 geom_point(aes(color = MetricOrAlternate), size = 3) + # 自定义配色(可选,让区分更明显) scale_color_manual(values = c("Alternate" = "#2c3e50", "Metric" = "#e74c3c")) + # 需求2:添加黄色直线,对应(0,0.5)到(0.5,1),方程为y = x + 0.5 geom_abline(slope = 1, intercept = 0.5, color = "yellow", size = 1.2, linetype = "solid") + # 需求3:仅标注直线上方的点,过滤出满足y > x + 0.5的行 geom_text_repel( data = subset(COMBINEDTABLE, TruePositiveRate > FalsePositiveRate + 0.5), aes(label = CombinedScores), nudge_y = 0.02, nudge_x = 0.02, min.segment.length = 0, color = "black" ) + # 设置坐标轴范围 coord_cartesian(xlim = c(0,1), ylim = c(0,1)) + # 优化图例和标题(可选) labs( x = "False Positive Rate", y = "True Positive Rate", color = "Category" ) + theme_minimal()
关键部分说明
- 分组配色:在
geom_point的aes中加入color = MetricOrAlternate,ggplot会自动根据该字段分组上色并生成图例;scale_color_manual可以自定义两种类别的颜色,让区分更清晰。 - 添加黄色直线:两点(0,0.5)和(0.5,1)对应的直线方程是
y = x + 0.5,用geom_abline直接指定斜率slope=1和截距intercept=0.5即可,设置颜色和粗细让直线更显眼。 - 仅标注直线上方的点:用
subset()函数过滤数据集,只保留满足TruePositiveRate > FalsePositiveRate + 0.5的行,将过滤后的数据集传给geom_text_repel的data参数,这样就只会标注直线上方的点。
内容的提问来源于stack exchange,提问作者JamesLancaster
相关产品推荐
相关产品推荐

