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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:16:02