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

如何在保持比例尺不变的情况下并排绘制加州两个县的地图?

解决方案:同比例尺并排绘制两县地图

完全可以在保持实际比例尺一致的前提下,将San Diego县和Santa Clara县的地图并排展示,以此准确对比二者的实际面积。下面提供两种简单可靠的实现方法:

方法一:数据合并+分面绘制(推荐)

这种方法通过合并两个县的空间数据,利用ggplot的分面功能生成并排地图,同时强制统一坐标范围和比例尺,确保面积对比的准确性。

完整代码

library(tigris)
library(ggplot2)
library(sf)  # 用于处理空间数据边界计算

# 获取两个县的空间数据
san_diego <- county_subdivisions(state = "CA", county = "San Diego County", cb = TRUE, year = NULL)
santa_clara <- county_subdivisions(state = "CA", county = "Santa Clara County", cb = TRUE, year = NULL)

# 为数据集添加县名标识,方便分面
san_diego$county_name <- "San Diego County"
santa_clara$county_name <- "Santa Clara County"

# 合并两个数据集
combined_counties <- rbind(san_diego, santa_clara)

# 计算两个县的整体边界范围,确保分面后比例尺一致
bbox_sd <- st_bbox(san_diego)
bbox_sc <- st_bbox(santa_clara)
x_range <- c(min(bbox_sd$xmin, bbox_sc$xmin), max(bbox_sd$xmax, bbox_sc$xmax))
y_range <- c(min(bbox_sd$ymin, bbox_sc$ymin), max(bbox_sd$ymax, bbox_sc$ymax))

# 绘制并排地图
ggplot() +
  geom_sf(data = combined_counties, color = "black", fill = "white", size = 0.25) +
  facet_wrap(~county_name, ncol = 2) +  # 横向分两列展示
  coord_sf(xlim = x_range, ylim = y_range, fixed = TRUE) +  # 固定比例尺,统一坐标范围
  theme_minimal() +
  labs(title = "San Diego County vs Santa Clara County (同比例尺对比)")

关键说明

  • st_bbox()用于获取每个县的地理边界,通过计算两个边界的极值,确保分面后的两个地图使用完全相同的坐标范围
  • coord_sf(fixed = TRUE)强制x轴和y轴的比例尺一致,避免地图拉伸变形,保证面积比例准确
  • 分面后两个面板共享相同的比例尺,能直观对比两县的实际面积大小

方法二:独立绘图+拼图(patchwork包)

如果需要保留两个独立的ggplot对象,再将它们并排拼接,可以使用patchwork包,同时为两个图设置相同的坐标范围和比例尺。

完整代码

library(tigris)
library(ggplot2)
library(sf)
library(patchwork)  # 用于拼图

# 获取空间数据
san_diego <- county_subdivisions(state = "CA", county = "San Diego County", cb = TRUE, year = NULL)
santa_clara <- county_subdivisions(state = "CA", county = "Santa Clara County", cb = TRUE, year = NULL)

# 计算统一的坐标范围
bbox_sd <- st_bbox(san_diego)
bbox_sc <- st_bbox(santa_clara)
x_range <- c(min(bbox_sd$xmin, bbox_sc$xmin), max(bbox_sd$xmax, bbox_sc$xmax))
y_range <- c(min(bbox_sd$ymin, bbox_sc$ymin), max(bbox_sd$ymax, bbox_sc$ymax))

# 绘制两个独立的地图,设置相同的坐标范围和比例尺
gg_san_diego <- ggplot() + 
  geom_sf(data = san_diego, color="black", fill="white", size=0.25) +
  coord_sf(xlim = x_range, ylim = y_range, fixed = TRUE) +
  ggtitle("San Diego County") +
  theme_minimal()

gg_santa_clara <- ggplot() + 
  geom_sf(data = santa_clara, color="black", fill="white", size=0.25) +
  coord_sf(xlim = x_range, ylim = y_range, fixed = TRUE) +
  ggtitle("Santa Clara County") +
  theme_minimal()

# 横向拼接两个图
gg_san_diego + gg_santa_clara + plot_layout(ncol = 2)

关键说明

  • 两个图必须使用相同的xlim和ylim,并设置fixed = TRUE,才能保证比例尺完全一致
  • patchwork包的plot_layout()可以灵活控制拼图的行列布局

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:52:48