I have a dataframe of sightings and objects with their latitudes and longitudes:
object = c("yacht", "fishingboat", "whale")
long = c(-123.02676, -123.39763, -123.25103)
lat = c(38.22033, 38.05059, 38.32280)
df = cbind.data.frame(long, lat)
I want to plot these points on a map of the world. I have created a map of the earth using the "rnaturalearth" package.
library(rnaturalearth)
library(sf)
world <- rnaturalearth::ne_countries(scale = "small", returnclass = "sf")
world %>% st_transform(crs = "+proj=moll") %>%
ggplot() + geom_sf() + theme_minimal()
As I said before, I want to plot the coordinates on the world map.
You need to reproject these points, then you can use standard geom_point
and geom_text
. Your points are far too close together to see them all separately on a world map though:
df <- sf::sf_project("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0",
"+proj=moll", df) %>%
as.data.frame() %>%
setNames(c("long", "lat")) %>%
cbind(object = object)
world %>%
st_transform(crs = "+proj=moll") %>%
ggplot() +
geom_sf() +
theme_minimal() +
geom_point(data = df, aes(long, lat)) +
geom_text(data = df, aes(long, lat, label = object),
vjust = c(1, 0, -1), hjust = 1)
If you zoom it, it is much clearer:
world %>%
st_transform(crs = "+proj=moll") %>%
ggplot() +
geom_sf() +
theme_minimal() +
geom_point(data = df, aes(long, lat)) +
geom_text(data = df, aes(long, lat, label = object),
vjust = c(0.5, 1, -1), hjust = 1.2) +
coord_sf(ylim = c(4200000, 4700000), xlim = c(-10.75, -10.25) * 10^6)