技术问询:如何在ggplot2中将泽西岛轮廓居中至边界框中央
解决泽西岛轮廓在指定边界框居中显示的问题
嘿,我懂你想把泽西岛的轮廓稳稳居中到指定边界框里的需求,咱们一步步来搞定它~
首先,你原来的代码没有设置坐标范围,导致图形没法聚焦在目标区域。要实现居中,我们需要先明确泽西岛数据的位置,再调整坐标参数让它和目标边界框的中心对齐。
步骤1:获取泽西岛数据的经纬度范围
先拿到df(泽西岛数据)的经纬度极值,这样我们能算出它的中心位置:
# 提取泽西岛的经纬度范围 x_jersey <- range(df$long, na.rm = TRUE) y_jersey <- range(df$lat, na.rm = TRUE) # 计算泽西岛的中心坐标 center_x_jersey <- mean(x_jersey) center_y_jersey <- mean(y_jersey)
步骤2:计算目标边界框的中心
你给出的目标边界框参数是:
- x范围:
200000.732到905000.646 - y范围:
-5812.321到900000.543
咱们算出这个框的中心:
# 目标边界框的中心 center_x_target <- mean(c(200000.732, 905000.646)) center_y_target <- mean(c(-5812.321, 900000.543))
步骤3:调整坐标范围让泽西岛居中
现在有两种常见的实现方式,你可以根据需求选:
方式一:让泽西岛完全适配目标边界框并居中
这种方式会调整xlim和ylim,确保泽西岛的中心和目标框中心重合,同时填满(或适配)目标框:
# 计算偏移后的坐标范围 x_offset <- center_x_target - center_x_jersey y_offset <- center_y_target - center_y_jersey adjusted_xlim <- x_jersey + x_offset adjusted_ylim <- y_jersey + y_offset # 更新你的绘图代码 graph1 <- ggplot() + geom_polygon(data = middlestates, colour = "black", fill = "#D3D3D3", aes(x = long, y = lat, group = group)) + geom_polygon(data = df, colour = "black", aes(x = long, y = lat, group = group, fill = ALG)) + ggtitle("Figure 2.2A: Assessment Results for\nGener...") + coord_cartesian(xlim = adjusted_xlim, ylim = adjusted_ylim)
方式二:严格使用给定的目标边界框,同时保证居中不拉伸
如果你必须用你给出的xlim和ylim参数,那要注意图形的宽高比,避免泽西岛因为画布比例问题看起来不居中:
# 计算目标边界框的高宽比 target_width <- 905000.646 - 200000.732 target_height <- 900000.543 - (-5812.321) aspect_ratio <- target_height / target_width # 更新绘图代码,添加宽高比设置 graph1 <- ggplot() + geom_polygon(data = middlestates, colour = "black", fill = "#D3D3D3", aes(x = long, y = lat, group = group)) + geom_polygon(data = df, colour = "black", aes(x = long, y = lat, group = group, fill = ALG)) + ggtitle("Figure 2.2A: Assessment Results for\nGener...") + coord_cartesian(xlim = c(200000.732, 905000.646), ylim = c(-5812.321, 900000.543)) + theme(aspect.ratio = aspect_ratio)
这样设置后,泽西岛的轮廓就能精准居中在你指定的边界框中央啦~
内容的提问来源于stack exchange,提问作者NBE
相关产品推荐
相关产品推荐

