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

如何在ggplot2或R基础绘图中绘制曲线上方与指定x区间的重叠阴影区域

当然没问题!要实现只保留蓝色与红色阴影的重叠区域,核心是直接定义出这个重叠区域的边界——也就是x在[-2,-1]或[0,2]区间内,同时从曲线y=x³到y最大值的部分。下面分别用ggplot2和R基础绘图两种方式实现:

用ggplot2实现

我们可以先在数据框中添加重叠区域的上下限列,只在目标x区间内标记有效区域,其他位置设为NA(ggplot会自动忽略这些无效值):

# 生成基础数据
x = seq(-3, 3, 0.005) 
y = x**3 
df = data.frame(x = x, y = y) 

# 计算y的最大值,作为重叠区域的上边界
max_y = max(df$y)

# 定义重叠区域的下边界:仅在目标x区间内取曲线值,其余为NA
df$ymin_overlap = ifelse(
  (df$x >= -2 & df$x <= -1) | (df$x >= 0 & df$x <= 2),
  df$y,
  NA
)
# 重叠区域的上边界始终是y的最大值
df$ymax_overlap = max_y

library(ggplot2) 
ggplot(df, aes(x, y)) + 
  geom_line() + 
  # 绘制坐标轴和参考线
  geom_hline(yintercept = 0) + 
  geom_vline(xintercept = 0) + 
  geom_vline(xintercept = c(-2, -1, 0, 2), lty = 'dashed', color = 'red') + 
  # 绘制重叠区域
  geom_ribbon(aes(ymin = ymin_overlap, ymax = ymax_overlap), alpha = 0.2, fill = 'purple') + 
  ylab(expression('f(x) = '~X^3)) + 
  theme_classic()

这段代码直接绘制出你需要的重叠区域,避免了多个图层叠加带来的显示混乱。你可以根据喜好修改填充颜色(这里用紫色区分,也可以换成你想要的颜色)。

用R基础绘图实现

如果不想依赖ggplot2,用基础绘图的polygon()函数也能轻松实现,思路是构造重叠区域的多边形坐标:

# 生成基础数据
x = seq(-3, 3, 0.005) 
y = x**3 
max_y = max(y)

# 绘制基础曲线、坐标轴和参考线
plot(x, y, type = "l", ylab = expression('f(x) = '~X^3), col = "black", bty = "l")
abline(h = 0, v = 0)
abline(v = c(-2, -1, 0, 2), lty = "dashed", col = "red")

# 绘制第一个重叠区间[-2,-1]
idx1 = which(x >= -2 & x <= -1)
# 构造多边形的坐标:先沿曲线从左到右,再沿y=max_y从右到左
x_poly1 = c(x[idx1], rev(x[idx1]))
y_poly1 = c(y[idx1], rep(max_y, length(idx1)))
polygon(x_poly1, y_poly1, col = adjustcolor("purple", alpha.f = 0.2), border = NA)

# 绘制第二个重叠区间[0,2]
idx2 = which(x >= 0 & x <= 2)
x_poly2 = c(x[idx2], rev(x[idx2]))
y_poly2 = c(y[idx2], rep(max_y, length(idx2)))
polygon(x_poly2, y_poly2, col = adjustcolor("purple", alpha.f = 0.2), border = NA)

adjustcolor()函数用来设置填充色的透明度,和ggplot2的alpha参数效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:57:39