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

R语言ggplot绘制新月形散点图 角落区域2添加噪声不显示问题排查

问题排查结果
  • 核心错误是构造区域2、区域1的数据集时,列顺序和原数据集不一致
    原数据集g的列顺序为X1、X2、c,但你生成区域2的数据集时写的是data.frame(c,X1,X2),列顺序为c、X1、X2,即使R会尝试按列名匹配,也有概率因类型不一致、环境变量残留等问题导致列值错位,区域2的坐标值被错误填入其他列,自然无法在目标区域显示。
  • 第二个错误是sample函数未指定size参数
    除了第一次添加噪声时指定了size=1000,后面两次生成标签c的sample调用都没有加size参数,默认会返回和输入向量等长的结果(此处0:1长度为2,仅生成2个标签),依赖R的向量循环补全长度属于不规范写法,极易引发意外错误。
  • 额外的不规范问题:第一次添加噪声时,sample生成的标签长度为1000,但X1、X2仅生成100个值,会导致坐标值重复循环10次,生成的噪声点不符合预期。
修正后的完整代码
#load library
library(RSSL)
library(ggplot2)

#generate first data
d <- generateCrescentMoon(1000,2,1)
d$c = ifelse(d$Class == "+", "1","0")
d$Class = NULL

# 第一次添加噪声:x1∈[-5,0]、x2∈[-10,10]
c <- sample(0:1, size=100, replace=TRUE)
X1 <- runif(100, min=-5, max=0)
X2 <- runif(100, min=-10, max=10)
a = data.frame(X1,X2,c)
a$c = as.factor(a$c)
g = rbind(a,d)

#Add noise to Region2:x1∈[5,10]、x2∈[5,10]
c <- sample(0:1, size=100, replace=TRUE, prob=c(0.5, 0.5))
X1 <- runif(100, min=5, max=10)
X2 <- runif(100, min=5, max=10)
# 保持列顺序和原数据集一致
f = data.frame(X1,X2,c)
f$c = as.factor(f$c)
gg = rbind(g,f)

#Add noise to Region1:x1∈[-10,-5]、x2∈[-10,-5]
c <- sample(0:1, size=100, replace=TRUE, prob=c(0.5, 0.5))
X1 <- runif(100, min=-10, max=-5)
X2 <- runif(100, min=-10, max=-5)
f = data.frame(X1,X2,c)
f$c = as.factor(f$c)
g= rbind(gg,f)

#plot
ggplot(g, aes(x=X1, y=X2, color=c, shape=c)) +  geom_point() 
验证方法

运行修正后的代码后,可先运行以下代码确认数据合并正常:

# 查看坐标范围是否覆盖[-10,10]
range(g$X1)
range(g$X2)
# 确认总行数符合预期:1000月牙点+300个噪声点=1300行
nrow(g)

输出符合上述预期的情况下,绘图即可正常显示三个区域的噪声点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 08:54:08