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

如何在ggplot中为竖直线与对角线之间的区域填充阴影

实现方法

要给两条线之间加阴影,核心是先构造阴影区域的坐标数据,再加填充图层就行,注意填充图层要放在点、线图层下面,不然会挡住原有内容。
你现在代码里的两条线交于原点(0,0):竖线是x=0,斜率为-1的斜线是y=-x,参考图里的阴影是x在[-1, 0]区间、y介于0和-x之间的直角三角区域,直接按边界生成数据填充即可。

方法1:用geom_ribbon生成平滑填充(推荐,方便后续调整范围)

library(ggplot2)
df <- data.frame(x=c(1,-1), y=c(1,-1))

# 构造填充数据集,取200个点保证边缘平滑
fill_df <- data.frame(
  x = seq(-1, 0, length.out = 200)
)
fill_df$ymax <- -fill_df$x # 斜线上对应的y值作为上边界
fill_df$ymin <- 0 # 阴影下边界对齐x轴,和参考图效果一致

ggplot(df, aes(x, y)) +
  # 阴影图层放最底层
  geom_ribbon(
    data = fill_df,
    aes(x = x, ymin = ymin, ymax = ymax),
    fill = "grey70", # 阴影颜色
    alpha = 0.7, # 阴影透明度,数值越小越透明
    colour = NA # 去掉填充区域的边框线
  ) +
  geom_point() +
  geom_abline(slope=-1) +
  geom_vline(xintercept = 0) +
  # 固定坐标范围和示例匹配
  coord_cartesian(xlim = c(-1, 1), ylim = c(-1, 1))

方法2:用geom_polygon直接画固定形状阴影(适合区域形状固定的场景)

如果不需要动态调整范围,直接给多边形的三个顶点坐标就行,代码更简洁:

library(ggplot2)
df <- data.frame(x=c(1,-1), y=c(1,-1))

ggplot(df, aes(x, y)) +
  geom_polygon(
    # 三个顶点分别是线交点(0,0)、竖线上端点(0,1)、斜线上端点(-1,1)
    data = data.frame(x = c(0, 0, -1), y = c(0, 1, 1)),
    aes(x = x, y = y),
    fill = "grey70",
    alpha = 0.7
  ) +
  geom_point() +
  geom_abline(slope=-1) +
  geom_vline(xintercept = 0) +
  coord_cartesian(xlim = c(-1,1), ylim = c(-1,1))

调整说明

  • 要改阴影颜色就改fill的色值,要改透明度就调alpha的数值。
  • 如果要填充延伸到绘图边界的区域,只要调整fill_df的x范围,把ymin、ymax改成你需要的边界值就行,超出绘图区的部分ggplot会自动裁剪。
  • 如果要填充第四象限的对顶区域,把x范围改成seq(0, 1, length.out = 200),对应设置ymin = -x、ymax = 0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:45:31