我曾经使用过Matlab,现在尝试学习如何在R中使用tidyverse(特别是ggplot2),所以我正在绘制新斯科舍省沿岸所有地点的地图收集项目数据。我知道我在绘制从“地图”开始的部分是错误的,但是我不知道如何使用基于纬度/经度的ggmap进行绘制。我假设下一行“ loc_map”不起作用,因为“ tidyverse”中未制作“ map”,但我不知道如何解决!
lat <- loc$Lat
long <- loc$Long
locs <- data.frame(long,lat)
data("coastlineWorldFine")
map <- plot(coastlineWorldFine, col='grey', clong= mean(long),
clat=mean(lat), span=400, projection = "+proj=merc",
main="Sample Sites")
loc_map <- map + geom_point(data=locs, aes(x=long, y=lat), size = 20)
答案 0 :(得分:2)
这是您可以添加geom_point
图层的起点。首先,我加载了许多库。 marmap
和oce
分别是测深和海岸线数据所必需的。 RColorBrewer
用于测深的调色板,而dplyr
需要mutate
。 magrittr
提供了复合分配管道运算符(%<>%
),在重构测深数据时使用了tibble
,而ggthemes
提供了theme_tufte
。
# Load libraries
library(ggplot2)
library(marmap)
library(oce)
library(RColorBrewer)
library(dplyr)
library(magrittr)
library(tibble)
library(ggthemes)
在这里,我获得了测深数据,对其进行了重组,并将其分类为深度间隔。
# Get bathymetry data
bathy <- getNOAA.bathy(lon1 = -68, lon2 = -56,
lat1 = 41, lat2 = 49,
resolution = 1, keep = TRUE)
bathy <- as.tibble(fortify.bathy(bathy))
bathy %<>% mutate(depth_bins = cut(z, breaks = c(Inf, 0, -200, -500, -1000,
-1500, -2000, -2500, -3000, -Inf)))
接下来,我获取海岸线数据并将其放入数据框。
# Get coast line data
data(coastlineWorldFine, package = "ocedata")
coast <- as.data.frame(coastlineWorldFine@data)
最后,我将其绘制出来。
# Plot figure
p <- ggplot()
p <- p + geom_raster(data = bathy, aes(x = x, y = y, fill = depth_bins), interpolate = TRUE, alpha = 0.75)
p <- p + geom_polygon(data = coast, aes(x = longitude, y = latitude))
p <- p + coord_cartesian(ylim = c(42, 47), xlim = c(-67, -57))
p <- p + theme_tufte()
p <- p + theme(axis.text = element_blank(),
axis.title = element_blank(),
axis.line = element_blank(),
axis.ticks = element_blank(),
legend.position = "right",
plot.title = element_text(size = 24),
legend.title = element_text(size = 20),
legend.text = element_text(size = 18))
p <- p + scale_fill_manual(values = rev(c("white", brewer.pal(8, "Blues"))), guide = "none")
print(p)
这给出了以下内容:
添加geom_point
层将允许您绘制现场站点。
答案 1 :(得分:1)
您没有给我们太多帮助,但是可以。
library(sf)
library(lwgeom) # needed only for st_sample
library(tidyverse)
让我们获得一个Admin01级的加拿大shapefile,提取新斯科舍省并简化多边形
# Get a Canada Admin01 shapefile
canada <- st_as_sf(raster::getData("GADM", country = "CAN", level = 1))
# just get Nova Scotia
ns <- filter(canada, NAME_1 == "Nova Scotia")
# simplify the polygons a bit (tweak `0.01` as you need)
ns <- st_simplify(ns, preserveTopology = TRUE, 0.01)
现在,由于您未提供点数据,因此我们将生成一些点数据。这些将不会全部在海岸线上:
set.seed(2018-11-23)
some_random_points <- as_data_frame(st_coordinates(st_sample(ns, 20)))
some_random_points
## # A tibble: 18 x 2
## X Y
## <dbl> <dbl>
## 1 -63.4 44.7
## 2 -63.9 45.1
## 3 -64.2 44.7
## 4 -60.8 46.8
## 5 -65.0 44.3
## 6 -63.8 45.4
## 7 -62.7 45.3
## 8 -66.1 44.3
## 9 -64.8 44.1
## 10 -64.5 44.8
## 11 -63.8 44.5
## 12 -64.7 44.8
## 13 -63.1 44.9
## 14 -65.5 43.9
## 15 -64.6 44.4
## 16 -60.4 45.9
## 17 -63.9 44.6
## 18 -62.4 45.6
现在,做一些现代的gg制图:
ggplot() +
geom_sf(data = ns, fill = "gray90", color = "#2b2b2b", size=0.125) +
geom_point(data = some_random_points, aes(X, Y)) +
theme_bw()