如何为ggimage包geom_image()的重叠图像添加抖动效果?
在ggplot中为重叠图像点添加抖动/间距的简单方法
问题背景
现有一段使用geom_image在ggplot中以图像替代散点的代码,当图像因x、y坐标重叠或距离过近时,需要添加简单的抖动/间距效果以避免遮挡。
原代码如下:
set.seed(2017-02-21) d <- data.frame(x = rnorm(10), y = rnorm(10), image = sample(c("https://www.r-project.org/logo/Rlogo.png", "https://jeroenooms.github.io/images/frink.png"), size=10, replace = TRUE) ) # 原绘图代码 ggplot(d, aes(x, y)) + geom_image(aes(image=image), size=.08)
简单实现方法
最直接且无需修改原始数据的方案是使用position_jitter调整图像位置:
set.seed(2017-02-21) d <- data.frame(x = rnorm(10), y = rnorm(10), image = sample(c("https://www.r-project.org/logo/Rlogo.png", "https://jeroenooms.github.io/images/frink.png"), size=10, replace = TRUE) ) # 添加抖动效果的绘图 ggplot(d, aes(x, y)) + geom_image(aes(image=image), size=.08, position = position_jitter(width = 0.2, height = 0.2))
- 参数说明:
width和height控制x、y方向的抖动幅度,可根据图像大小、坐标范围自行调整数值,数值越大抖动越明显。 - 优势:无需改动原始数据集,代码改动极小,快速解决重叠遮挡问题。
如果需要更智能的间距调整(比如仅对重叠点生效),可以结合ggrepel包的position_repel(需先安装ggrepel),但对于简单需求,position_jitter已足够实用。
内容的提问来源于stack exchange,提问作者SteveMcManaman
相关产品推荐
相关产品推荐

