如何在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
相关产品推荐
相关产品推荐

