我正在使用 R 版本 4.3.2,并且我正在尝试使用 rgdal 包。
我想制作一个“KUD 图”(每个 KUD 从 95 到 5 的 ggplot)。这是没有海岸线的情节:
为此,我需要在 geom_polygon 中使用 SpatialPolygonsDataFrame 将海岸线放置在地图中,所以我尝试这样做:
Corsica <- getData('GADM', country='FRA', level=0)
这就是我得到的 TADAA
我有一个形状文件(.shp),其几何形状:多边形。我想读一下。OGR
Corsica <- readOGR(dsn = "....", layer = ".....")
问题是我无法安装rgdal。我有这样的消息:
install.packages("rgdal")
Warning in install.packages :
package ‘rgdal’ is not available for this version of R
A version of this package for your version of R might be available elsewhere,
see the ideas at
https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages
我尝试使用旧版本的 R 安装 rgdal,但它不起作用...
有谁知道如何解决这个问题吗?是否有其他函数可以替代 readOGR ?是否仍然可以安装 rgdal,如果可以,如何安装?
提前感谢您的帮助
祝你有美好的一天
克莱维
这是我的整个代码:
ggplot() +
coord_sf(crs = 32632)+
geom_sf(data = st_as_sf(ver95), color= NA, fill="#3B9AB2", alpha=0.5)+
geom_sf(data = st_as_sf(ver90), color= NA, fill="#48A0B6", alpha=0.5)+
geom_sf(data = st_as_sf(ver85), color= NA, fill="#56A6BA", alpha=0.5)+
geom_sf(data = st_as_sf(ver80), color= NA, fill="#63ADBE", alpha=0.5)+
geom_sf(data = st_as_sf(ver75), color= NA, fill="#71B3C2", alpha=0.5)+
geom_sf(data = st_as_sf(ver70), color= NA, fill="#84B9B3", alpha=0.5)+
geom_sf(data = st_as_sf(ver65), color= NA, fill="#9EBE91", alpha=0.5)+
geom_sf(data = st_as_sf(ver60), color= NA, fill="#B7C26E", alpha=0.5)+
geom_sf(data = st_as_sf(ver55), color= NA, fill="#D1C74C", alpha=0.5)+
geom_sf(data = st_as_sf(ver50), color= NA, fill="#EBCC2A", alpha=0.5)+
geom_sf(data = st_as_sf(ver45), color= NA, fill="#E8C520", alpha=0.5)+
geom_sf(data = st_as_sf(ver40), color= NA, fill="#E6BF17", alpha=0.5)+
geom_sf(data = st_as_sf(ver35), color= NA, fill="#E4B80E", alpha=0.5)+
geom_sf(data = st_as_sf(ver30), color= NA, fill="#E2B204", alpha=0.5)+
geom_sf(data = st_as_sf(ver25), color= NA, fill="#E29E00", alpha=0.5)+
geom_sf(data = st_as_sf(ver20), color= NA, fill="#E67D00", alpha=0.5)+
geom_sf(data = st_as_sf(ver15), color= NA, fill="#EA5C00", alpha=0.5)+
geom_sf(data = st_as_sf(ver10), color= NA, fill="#EE3B00", alpha=0.5)+
geom_sf(data = st_as_sf(ver05), color= NA, fill="#F21A00", alpha=0.5)+
geom_sf(data = st_as_sf(mcp), color= "black", fill=NA, alpha=0.5)+
geom_point(data = Stations, aes(x=station_longitude, y = station_latitude),
shape=21, color="red", size = 2) +
geom_point(data = COA, aes(x=Longitude.coa, y = Latitude.coa), shape=3, color="black", size = 1) + ### points COAs
ylab("Latitude") +
xlab("Longitude")+
coord_sf(xlim = c(9.43, 9.55195), ylim = c(42.551657, 42.68), expand = FALSE)+
theme(legend.position = "none") +
geom_polygon(data = Corsica , aes(x=long, y=lat))+
ggtitle("KUD blue crab")+ theme_bw()
您遇到的问题是您需要为多边形设置
fill = FALSE
。这是因为默认的 ggplot2
行为是填充多边形。另外,我强烈建议在绘制空间数据时使用 geom_sf()
,因为使用其他几何选项 可能会导致问题。
正如评论中提到的,
rgdal
已于 2023 年 10 月弃用。此代表使用 sf
包,大多数相关 rgdal
函数已迁移到该包。请注意,如果您之前安装过 rgdal
,它可能会 导致问题,因此您可能需要从库目录中删除它的所有痕迹。这包括 GDAL
、GEOS
和 PROJ
绑定到的 rgdal
的版本。
我提供了四个数据集选项:两个内置于 R 包中,两个来自外部。在这四个中,来自 geodata 的数据似乎与示例图像中的数据最相似。
请注意,至少有两个 KUD 点似乎位于 Étang de Biguglia 内,因此您可以搜索科西嘉海岸线的更详细版本。我的科西嘉语和法语“有点生疏”,所以我的快速搜索没有找到比下面的选项更好的东西。
我不会打扰 OSM 数据,它是一个很大的数据集,并且不如地理数据选项详细。本示例中的四个数据集均被裁剪到示例中的 xlim/ylim 值之外。如果您需要更大的地图范围,请调整或省略
st_crop()
功能。
library(rnaturalearth) # 1.0.1
library(dplyr) # 1.1.4
library(sf) # 1.0.15
library(ggplot2) # 3.5.0
sf_use_s2(FALSE) # Needed for cropping full extent (global) S2 objects
# rnaturalearth
Corsica1 <- ne_countries(scale = "large", returnclass = 'sf') %>%
st_set_crs(4326) %>%
st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
select(geometry) %>%
mutate(source = "rnaturalearth")
# ggplot2
Corsica2 <- map_data("world") %>%
st_as_sf(coords = c("long","lat")) %>%
group_by(region, group) %>%
summarise(geometry = st_combine(geometry), .groups = "drop") %>%
st_cast("POLYGON") %>%
st_set_crs(4326) %>%
ungroup() %>%
st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
select(geometry) %>%
mutate(source = "ggplot2")
# https://osmdata.openstreetmap.de/download/coastlines-split-4326.zip
Corsica3 <- st_read("lines.shp") %>%
st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
select(geometry) %>%
mutate(source = "osm")%>%
group_by(source) %>%
summarise(geometry = st_combine(geometry), .groups = "drop")
# https://geodata.ucdavis.edu/gadm/gadm4.1/shp/gadm41_FRA_shp.zip
Corsica4 <- st_read("gadm41_FRA_0.shp") %>%
st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
select(geometry) %>%
mutate(source = "geodata")
Corsica_all <- do.call(rbind, mget(ls(pattern = "^Corsica[0-9]")))
ggplot() +
geom_sf(data = Corsica_all, aes(colour = source),
fill = NA,
linewidth = .5,
show.legend = FALSE) +
coord_sf(xlim = c(9.43, 9.55195),
ylim = c(42.551657, 42.68),
expand = FALSE) +
theme(axis.text = element_text(size = 5),
axis.text.x = element_text(angle = 90, hjust = 1)) +
facet_wrap(~ source, nrow = 2)