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

如何调整ggplot中PUBG地图背景图的坐标至0-8e+05范围?

调整Miramar地图坐标范围到0至8e5的解决方案

嘿Lucy,我帮你梳理一下怎么把Miramar地图的坐标范围精准调整到0到8e5,刚好我之前也处理过类似的图像坐标映射问题,给你两种常用的实现方式:

方法一:用R基础绘图系统

这种方式适合习惯用基础plot函数的场景,核心是先锁定绘图区域的坐标范围,再把图像按比例映射进去:

library(jpeg)

# 读取地图图像
miramar <- readJPEG("/Users/lucyzhang/Waterloo/stat 847/project/pubg/miramar.jpg")

# 获取图像的原始宽高(注意dim返回的顺序是:高度、宽度、通道数)
img_h <- dim(miramar)[1]
img_w <- dim(miramar)[2]

# 目标坐标范围
target_min <- 0
target_max <- 8e5

# 计算缩放因子,确保图像按比例适配目标范围,避免拉伸变形
scale_ratio <- min(target_max / img_w, target_max / img_h)
scaled_w <- img_w * scale_ratio
scaled_h <- img_h * scale_ratio

# 计算图像在目标区域内的居中位置
x_left <- (target_max - scaled_w) / 2
x_right <- x_left + scaled_w
y_bottom <- (target_max - scaled_h) / 2
y_top <- y_bottom + scaled_h

# 创建空的绘图区域,锁定坐标范围
plot(1, type = "n", 
     xlim = c(target_min, target_max), 
     ylim = c(target_min, target_max),
     xlab = "X坐标", ylab = "Y坐标", main = "Miramar地图(坐标0-8e5)")

# 绘制地图图像
rasterImage(miramar, xleft = x_left, xright = x_right, ybottom = y_bottom, ytop = y_top)

# 同步调整死亡点的坐标(如果你的点是基于原始图像坐标的话)
deaths1$scaled_x <- deaths1$x * scale_ratio + x_left
deaths1$scaled_y <- deaths1$y * scale_ratio + y_bottom

# 绘制死亡点
points(deaths1$scaled_x, deaths1$scaled_y, col = "red", pch = 16, cex = 0.8)

方法二:用ggplot2(更直观的可视化)

如果你用ggplot2做可视化,用annotation_raster可以更方便地控制图像位置:

library(jpeg)
library(ggplot2)

# 读取地图图像
miramar <- readJPEG("/Users/lucyzhang/Waterloo/stat 847/project/pubg/miramar.jpg")

# 计算缩放比例,保持图像原始比例
scale_ratio <- min(8e5 / dim(miramar)[2], 8e5 / dim(miramar)[1])
scaled_w <- dim(miramar)[2] * scale_ratio
scaled_h <- dim(miramar)[1] * scale_ratio

# 调整死亡点坐标(和图像同步缩放)
deaths1$scaled_x <- deaths1$x * scale_ratio + (8e5 - scaled_w)/2
deaths1$scaled_y <- deaths1$y * scale_ratio + (8e5 - scaled_h)/2

# 绘制可视化图
ggplot() +
  # 添加地图背景,锁定坐标范围
  annotation_raster(miramar, 
                    xmin = (8e5 - scaled_w)/2, xmax = (8e5 + scaled_w)/2,
                    ymin = (8e5 - scaled_h)/2, ymax = (8e5 + scaled_h)/2) +
  # 强制保持图像比例,避免拉伸
  coord_fixed(ratio = dim(miramar)[2]/dim(miramar)[1]) +
  # 设置全局坐标范围为0-8e5
  xlim(0, 8e5) +
  ylim(0, 8e5) +
  # 添加死亡点
  geom_point(data = deaths1, aes(x = scaled_x, y = scaled_y), 
             color = "red", size = 1.5, alpha = 0.6) +
  labs(x = "X坐标", y = "Y坐标", title = "Miramar地图死亡位置分布") +
  theme_minimal()

关键注意点:

  • 如果你的死亡数据坐标原本就是对应0-8e5的,那可以跳过坐标缩放的步骤,直接把图像映射到这个范围就行;
  • 一定要用scale_ratio来保持图像比例,不然地图会变形,影响点的位置准确性;
  • 如果你希望图像完全填满0-8e5的区域(接受轻微拉伸),可以去掉比例计算,直接把xmin=0, xmax=8e5, ymin=0, ymax=8e5传给annotation_raster或者rasterImage。

内容的提问来源于stack exchange,提问作者Lucy Zhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:58:27