在R中自定义图像上绘图时图像缩放异常的问题求助
召唤师峡谷地图绘图匹配问题解决建议
问题描述
使用Riot API获取英雄击杀/死亡数据,尝试将数据点绘制到召唤师峡谷地图上,但地图无法填满绘图区域,导致数据点与地图位置不匹配。
所用代码
library(ggplot2) library(jpeg) library(grid) path="mypath" img=readJPEG(path) img=rasterGrob(img,interpolate=TRUE) ggplot(data=jk,aes(x=x,y=y))+coord_cartesian(xlim=c(-200,15000),ylim=c(-200,15000))+ annotation_custom(img, xmin=-Inf, xmax=Inf, ymin=-Inf,ymax=Inf)+ geom_point(color="red")+facet_wrap(vars(role))
输出效果
输出截图显示:地图未填满绘图区域,数据点位置与地图实际坐标不匹配。
解决步骤
- 匹配坐标与地图比例:召唤师峡谷地图是16:9的宽高比,你当前设置的x、y范围都是(-200,15000),是1:1的正方形,这会强制拉伸地图。调整纵坐标范围,比如把
ylim设为c(-200, 8350)(计算方式:(15000 - (-200)) * 9/16 ≈ 8550,减去200后得到8350),保证宽高比和地图一致。 - 替换图层实现精准绑定:
annotation_custom会忽略坐标限制,改用annotation_raster将地图严格绑定到你设置的坐标范围内,同时无需使用grid包的rasterGrob,简化代码:library(ggplot2) library(jpeg) path="mypath" img=readJPEG(path) ggplot(data=jk,aes(x=x,y=y))+ coord_cartesian(xlim=c(-200,15000), ylim=c(-200, 8350))+ annotation_raster(img, xmin=-200, xmax=15000, ymin=-200, ymax=8350)+ geom_point(color="red")+ facet_wrap(vars(role))+ scale_x_continuous(expand = c(0, 0))+ scale_y_continuous(expand = c(0, 0)) - 关闭自动边距扩展:添加
scale_x_continuous(expand = c(0,0))和scale_y_continuous(expand = c(0,0)),避免ggplot自动在绘图区域边缘添加空白,确保地图填满整个区域。 - 核对图片原始尺寸:用
dim(img)查看读取的图片宽高像素数,确认坐标范围的比例和图片像素比例完全一致,比如图片宽1920、高1080,比例就是16:9,对应坐标范围也要保持相同比例。
内容的提问来源于stack exchange,提问作者majulito
相关产品推荐
相关产品推荐

