如何在R语言中对函数曲线划分的指定条件区域进行着色
R绘图区域着色问题排查与修正
原代码核心问题
- 填充路径构造错误:
polygon()要求输入的坐标点按顺时针/逆时针顺序排列形成闭合路径,原代码直接拼接固定坐标和筛选后的x/y值,坐标对应关系混乱,无法形成符合要求的填充区域 - 未区分不等式对应的x区间:
((1+x)/(1-x))² < 1仅在x<0时成立,对应条件2的着色区域((1+x)/(1-x))² > 1仅在x>0时成立,对应条件3的着色区域
- 坐标边界匹配错误:原代码设置的y轴上限为15,但填充时写死了y=16的边界,超出绘图范围易出现显示异常
修正后可运行代码
# 拆分正负x区间分别处理,避免逻辑混淆 x_neg <- seq(-0.6, 0, length = 1100) x_pos <- seq(0, 0.6, length = 1100) # 计算对应区间的曲线值 curve_neg <- ((1 + x_neg)/(1 - x_neg))^2 curve_pos <- ((1 + x_pos)/(1 - x_pos))^2 # 初始化画布 plot(0, 1, xlim = c(-0.6, 0.6), ylim = c(-1, 15), xlab = "x", ylab = "y") # 绘制参考虚线 abline(h = 1, lty = "dashed") abline(v = 0, lty = "dashed") curve(((1+x)/(1-x))^2, add = TRUE, lty = "dashed", from = -1, to = 1) # 填充条件2区域:y ≤ ((1+x)/(1-x))² < 1(x负区间,y从绘图下限到曲线值) polygon( c(x_neg, rev(x_neg)), c(curve_neg, rep(-1, length(x_neg))), density = 20, angle = 45, border = NA, col = "blue" ) # 填充条件3区域:1 < ((1+x)/(1-x))² ≤ y(x正区间,y从曲线值到绘图上限) polygon( c(x_pos, rev(x_pos)), c(curve_pos, rep(15, length(x_pos))), density = 20, angle = -45, border = NA, col = "red" )
代码说明
- 拆分正负x区间分别计算曲线值,避免不同区间的逻辑混淆
- 构造
polygon路径时,先按顺序取区间内的x和对应曲线y值,再倒序取x和对应边界y值,形成完整闭合路径 - 两种区域使用不同角度的填充线区分,也可直接修改
col参数更换填充颜色
内容的提问来源于stack exchange,提问作者Mara Peris
相关产品推荐
相关产品推荐

