我想使用sf微调ggplot2中文本的x和y位置。可以在美学中修改文本的正当性,然后需要对裸露进行类似的修改,但是nudge_x和nudge_y不能用于美学中。
使用sp和强化的数据帧,我可以在美学上修改x和y(x =(x + hBump),y =(y + vBump)。我不知道这在SF中是否可行。
以下是一些数据:
Cities <- read.table( text=
"City long lat hJust vJust hBump vBump
GrandJunction -108.550649 39.063871 1 1 -1100 -1000
Gunnison -106.925321 38.545825 0 1 0 -1000
Tincup -106.47836 38.754439 1 0 0 800",
header=TRUE )
转换为sf
Cities.sf <- st_as_sf(
x = Cities,
coords = c("long", "lat"),
crs = "+proj=longlat +datum=WGS84"
)
ggplot(coord_sf只是为了让标签不脱落)
ggplot(Cities.sf) +
geom_sf() +
coord_sf(xlim = c(-109, -106.3), ylim = c(38.4, 39.2)) +
geom_sf_text(aes(label = City, hjust = hJust, vjust = vJust))
现在,如果我们轻推一个,其他人可能会陷入困境。
需要美感!
ggplot(Cities.sf) +
geom_sf() +
coord_sf(xlim = c(-109, -106.3), ylim = c(38.4, 39.2)) +
geom_sf_text(
aes(label = City, hjust = hJust, vjust = vJust),
nudge_x = 0.025, nudge_y = -0.025
)
附带问题-我猜是否将对象转换为另一个crs
使用米,那么微移单位必须从度数更改为米?这就是hBump和vBump所在的单位。
最佳答案
据我所知,nudge_x
和nudge_y
的矢量化输入已正确处理。
library(ggplot2)
library(sf)
#> Linking to GEOS 3.7.2, GDAL 2.4.2, PROJ 5.2.0
Cities <- read.table(text=
"City long lat hJust vJust hBump vBump
GrandJunction -108.550649 39.063871 1 1 -1100 -1000
Gunnison -106.925321 38.545825 0 1 0 -1000
Tincup -106.47836 38.754439 1 0 0 800",
header=TRUE)
Cities.sf <- st_as_sf(x = Cities,
coords = c("long", "lat"),
crs = "+proj=longlat +datum=WGS84")
ggplot(Cities.sf) + geom_sf() +
coord_sf(xlim = c(-109, -106.3), ylim = c(38.4, 39.2)) +
geom_sf_text(
aes(label = City, hjust = hJust, vjust = vJust),
nudge_x = c(-0.025, 0.025, -0.05),
nudge_y = c(-0.025, -0.025, 0)
)
#> Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
#> not give correct results for longitude/latitude data
由reprex package(v0.3.0)创建于2020-01-01
关于r - 在geom_sf_text中,如何在美学上微调x和y?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59522531/