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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:35:38