gpt4 book ai didi

r - 将比例尺添加到已使用 coord_sf 缩放的 ggplot map ?

转载 作者:行者123 更新时间:2023-12-04 01:15:39 26 4
gpt4 key购买 nike

我使用 sf 包和 ggplot2 制作了一张 map :

library(ggplot2)
library(sf)
library(rnaturalearth)
state_prov <- rnaturalearth::ne_states(c("united states of america", "canada"), returnclass="sf")
x <- ggplot(data=state_prov) +
geom_sf()+
coord_sf(xlim=c(-170, -95), ylim=c(40, 75))
print(x)

在 Rstudio 中生成以下 map : blank plot

太棒了,但我需要给它添加一个比例尺。当我尝试使用 ggsn 修改代码时,我根本看不到比例尺。

library(ggplot2)
library(sf)
library(rnaturalearth)
state_prov <- rnaturalearth::ne_states(c("united states of america", "canada"), returnclass="sf")
x <- ggplot(data=state_prov) +
geom_sf()+
coord_sf(xlim=c(-170, -95), ylim=c(40, 75)) +
ggsn::scalebar(state_prov, location="topleft", dist = 50, dist_unit = "km",
transform=TRUE, model="WGS84", height=0.1)
print(x)

我尝试更改高度、st.dist 和位置,但没有成功。当我删除对 coord_sf() 的调用时,我可以看到比例尺比例不佳,这让我相信 ggsn 无法识别 map 正在通过 coord_sf() 放大。

我该如何解决这个问题? ggsn 似乎不容易修改。我愿意使用其他包或方法,但我确实需要以类似的方式继续调用 ggplot,因为我有一个基于相同结构的复杂得多的 map 。

谢谢!

最佳答案

如您所述,如果您注释掉代码的 coord_sf 部分,则会显示比例尺。我的猜测是 ggsn::scalebar 必须从整个 state_prov 数据集中获取其 topleft 位置,并且当您使用 coord_sf< 进行缩放时 比例尺被裁掉了。

编辑:将比例尺放在经纬度投影的 map 上时,请注意这种比例的极度扭曲:https://stackoverflow.com/a/41373569/12400385

这里有几个用于显示比例尺的选项。

选项 1

使用 ggspatial::annotation_scale 而不是 ggsn ,它似乎可以识别 coord_sf 中定义的缩放。

ggplot(data=state_prov) + 
geom_sf()+
coord_sf(xlim=c(-170, -95), ylim=c(40, 75)) +
ggspatial::annotation_scale(location = 'tl')

enter image description here

选项 2

使用您的原始代码,但在绘图之前裁剪 state_prov,以便 scalebar 可以找到正确的 topleft

state_prov_crop <- st_crop(state_prov, xmin=-170, xmax = -95, ymin = 40, ymax = 75)

ggplot(data=state_prov_crop) +
geom_sf()+
#coord_sf(xlim=c(-170, -95), ylim=c(40, 75)) +
ggsn::scalebar(state_prov_crop, location="topleft", dist = 50, dist_unit = "km",
transform=TRUE, model="WGS84", height=0.1)

enter image description here

关于r - 将比例尺添加到已使用 coord_sf 缩放的 ggplot map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63459419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com