如何在R的ggplot2中仅绘制对角线下方的点?
问题描述
我创建了如下数据集:
p_cd = c(0.01, 0.15, 0.30, 0.50, 0.70, 0.80, 0.90, 0.99) p_bm = c(0.01, 0.15, 0.30, 0.50, 0.70, 0.80, 0.90, 0.99) data = as.data.frame(expand.grid(p_cd,p_bm)) data = cbind(data,rep(NA,dim(data)[1])) weights = c(NA,0.48,0.28,0.1,0.03,0.02,0.013,0.01,NA,NA,1.52,0.57,0.18,0.1,0.07,0.07,NA,NA,NA,1.8,0.57,0.35,0.25,0.24,NA,NA,NA,NA,2.21,1.26,0.91,0.86,NA,NA,NA,NA,NA,3.62,2.62,2.5,NA,NA,NA,NA,NA,NA,5.25,4,NA,NA,NA,NA,NA,NA,NA,24.46,rep(NA,8)) u = 1 for(i in 1:dim(data)[1]){ if(data[i,1]>data[i,2]){ data[i,3] = weights[u] u = u + 1 } }
基于该数据集,我用ggplot2绘制了图形:
p_1 = ggplot() + geom_point(data = subset(data), aes(x=p_cd, y=p_bm, col = weights), size = 3) + scale_color_continuous(type = "viridis") + geom_point(data = subset(data, weights <= 1), aes(x=p_cd, y=p_bm), color = "black", size = 3) + xlim(0, 1) + ylim(0,1) + ggtitle("N = 50 & K = 2") + labs(colour = "Root Mean Square Error")
但我只想绘制对角线下方的点,也就是满足data[i,1]>data[i,2]的带颜色的点,该怎么实现?
解决方案
直接在subset()中添加p_cd > p_bm的筛选条件即可,建议先给数据集列命名(避免默认的Var1/Var2命名带来的混淆):
1. 给数据集列命名(可选但推荐)
在创建数据集后添加列名:
colnames(data) = c("p_cd", "p_bm", "weights")
2. 修改绘图代码,筛选目标点
修改两个geom_point()的data参数,只保留p_cd > p_bm的行:
p_1 = ggplot() + # 仅绘制对角线下方的带颜色点 geom_point(data = subset(data, p_cd > p_bm), aes(x=p_cd, y=p_bm, col = weights), size = 3) + scale_color_continuous(type = "viridis") + # 仅在目标点上叠加黑色外圈 geom_point(data = subset(data, p_cd > p_bm & weights <= 1), aes(x=p_cd, y=p_bm), color = "black", size = 3) + xlim(0, 1) + ylim(0,1) + ggtitle("N = 50 & K = 2") + labs(colour = "Root Mean Square Error")
说明
- 如果没有给列命名,就用默认列名筛选:
subset(data, Var1 > Var2); - 两个
geom_point都要添加筛选条件,确保只操作对角线下方的目标点。
内容的提问来源于stack exchange,提问作者Jonathan1234
相关产品推荐
相关产品推荐

