R语言 使用ggplot组合陆地Map和等高线图-掩蔽/填充海洋

llycmphe  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(211)

我开发了一种遗传算法,用于估计在给定基因型的情况下,在英格兰东南部的规则网格中观察到动物的概率。使用ggplot2,我可以轻松地生成概率等值线图或仅包含土地(多边形填充)的Map,但我想要的是等值线图仅限于土地的Map:



想要的结果是通过在Powerpoint中的等高线图上添加一个黑色蒙版来生成的,这是一个繁琐的过程,对于生成我需要的数百个等高线图来说是不切实际的。我相信一定有一个简单的方法来做到这一点。
我使用以下方法生成等高线图:

v <- ggplot(data, aes(Lat, Lng, z = P))
v + geom_contour(bins = 20)

并且Map使用:

ggplot(data = world) +
    geom_sf(color = "black", fill = "gray") +
    coord_sf(xlim = c(-2.3, 1.9), ylim = c(50.9, 53.5), expand = FALSE)

我的输入文件包括所有位置在0.05增量经度和纬度在指定的间隔.它是大的,但我会很高兴地添加它,如果这有助于.我已经看了网上,不能看到任何的例子,符合我想要的.
我尝试过将一个组件添加到另一个组件中作为额外的层,但我很难理解需要什么以及语法是什么。例如:
layer(geom =“contour”,stat =“identity”,data = data,mapping = aes(Lng,Lat,P))
错误:试图创建没有位置的图层。但即使这样做也不会掩盖海域。

q9rjltbz

q9rjltbz1#

下面是一个使用一些虚构数据的工作示例:

library(rnaturalearth)
library(ggplot2)

sea <- ne_download(scale = 10, type = 'ocean', category = "physical",
                   returnclass = "sf")

ggplot(data) + 
  geom_contour_filled(aes(Lng, Lat, z = P), bins = 20, color = "black") +
  guides(fill = "none") +
  geom_sf(data = sea, fill = "black") +
  coord_sf(ylim = c(51, 53.5), xlim = c(-2.2, 1.8), expand = FALSE)

所用数据

set.seed(1)

a <- MASS::kde2d(rnorm(100), rnorm(100, 53), n = 100, 
           lims = c(-2.2, 1.8, 51, 53.5))
b <- MASS::kde2d(rnorm(25, 0.5), rnorm(25, 52), n = 100, 
           lims = c(-2.2, 1.8, 51, 53.5))
a$z <- b$z - a$z + max(a$z)

data <- cbind(expand.grid(Lng = a$x, Lat = a$y), P = c(a$z))

创建于2023-01-02使用reprex v2.0.2

相关问题