Добавление данных о землетрясениях и карты для Фиджи

Я использовал datasets::quakes, чтобы нарисовать землетрясения на Фиджи следующим образом:

quakes_df <- datasets::quakes
library(ggplot2)
my_plot <- ggplot() +
  geom_point(data= quakes_df, aes(lat, long, col= mag)) +
  scale_color_gradient(low= "green", high= "red", na.value= "black", aesthetics= "colour", 
                   breaks= seq(min(quakes_df$mag), max(quakes_df$mag), length.out= 4))
my_plot

На следующем этапе я хочу добавить полигоны Фиджи, чтобы лучше понять, где на самом деле происходят землетрясения. Но пока я не могу понять, как совместить оба сюжета. Что я делаю:

# Data of whole world
world <- rnaturalearth::ne_countries(scale = "medium", returnclass = "sf")
# Extract Fiji only.
fiji <- subset(world, sovereignt == "Fiji", select= "geometry")
# Add new layer to existing plot
my_plot + geom_sf(data= fiji)

Полученный сюжет неверен. Что здесь происходит? И как я могу добавить границы страны Фиджи на первый график с землетрясениями?

Вы можете использовать пакет sf для преобразования вашего df в геопространственный объект sf например с помощью sf::st_as_sf(). Тогда вы можете использовать geom_sf() вместо geom_point().

VinceGreg 10.07.2024 17:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать пакет sf для преобразования вашего фрейма данных в геопространственный объект sf например. с sf::st_as_sf(). Данные, кажется, выражены в долготе-широте; вероятно, в системе координат (CRS) EPSG:4326. Поскольку это около линии 180 градусов, в этом ответе предлагается использовать CRS EPSG:3994 (отказ от ответственности: я не знаком с CRS Тихоокеанского региона).

Я добавил Австралию на карту для большего пространственного контекста.

library(sf)
library(tidyverse)

quakes_df <- datasets::quakes
world <- rnaturalearth::ne_countries(scale = "medium", returnclass = "sf")
fiji <- subset(world, sovereignt == "Fiji", select= "geometry")
Australia <- subset(world, sovereignt == "Australia", select= "geometry")

quakes_sf <- st_as_sf(quakes_df , coords =c ("long","lat") , crs = 4326) %>% 
  st_transform(crs=3994)

ggplot() +
    geom_sf(data= fiji %>% st_transform(crs=3994))+
  geom_sf(data= Australia %>% st_transform(crs=3994))+
  geom_sf(data= quakes_sf, aes(col= mag),alpha = 0.2) +
  scale_color_gradient(low= "green", high= "red", na.value= "black", aesthetics= "colour", 
                       breaks= seq(min(quakes_df$mag), max(quakes_df$mag), length.out= 4))

Created on 2024-07-10 with reprex v2.1.0

Я считаю, что st_transform(crs=3994) — это то, чего мне не хватало больше всего. Спасибо!

LulY 10.07.2024 19:45

После второго взгляда ваша первая трудность заключается в том, что вы перепутали x и y. Вы можете получить приличный сюжет, используя geom_point(data= quakes_df, aes(x= long, y = lat,col= mag) вместо st_as_sf и geom_sf(data=quakes_sf), но переход на 180 градусов все равно будет проблемой.

VinceGreg 10.07.2024 20:23

Примерно 90% этой цифры не несут полезной информации.

Friede 10.07.2024 20:23

@Friede Это правда, но для меня это не проблема, поскольку теперь я знаю принцип объединения слоев и могу выбирать, какую часть хочу отображать.

LulY 10.07.2024 21:26

Возможно, картирование землетрясений по батиметрическому слою (за исключением Австралии), но, как вы говорите, ваша карта.

Chris 10.07.2024 21:47

Я так не думаю: «Я хочу добавить полигоны для Фиджи».

Friede 11.07.2024 08:00

Я бы предпочел сосредоточиться на Фиджи, т.е.

library(sf)
library(rnaturalearth) # devtools::install_github("ropensci/rnaturalearthhires")
library(ggplot2)

# Note: 
sum(is.na(quakes$mag)) # na.value = "black"
#> [1] 0
quakes = 
  st_as_sf(quakes, coords=c("long","lat"), crs=4326) |> 
  st_transform(crs=3994)
Fiji = 
  ne_countries(scale = "large", returnclass = "sf") |>
  subset(sovereignt= = "Fiji", select=c("geometry")) |>
  st_transform(crs=3994)
ggplot() +
  geom_sf(data=Fiji) +
  geom_sf(data=quakes, aes(col=mag), alpha=.05) +
  scale_color_gradient(low = "green", high = "red", aesthetics = "colour", 
                       breaks=seq( min(quakes$mag), max(quakes$mag), length.out=4L )) +
  coord_sf(st_bbox(quakes)[c(1L, 3L)], st_bbox(quakes)[c(2L, 4L)])

Другие вопросы по теме

Как я могу помешать ggplot перезаписать аргументы по умолчанию, которые были установлены ранее?
R и ggplot с st_crop: обрезка карты не работает должным образом
Ggplot: расширение меток оси и размещение рамок вокруг элементов оси
Небольшой хак для ggplot — простой способ добавить текст с реальными средними значениями и стандартным отклонением при использовании линий или столбцов
Добавление geom_sf к длинному графику с пакетом gratia в R
Могу ли я заставить ggplot использовать страницу слов формата A4 без изменения параметров fig.height, fig.width и dpi?
Как я могу получить точный контроль над положением легенды ggplot теперь, когда числовой аргумент «legend.position» устарел?
Ggsurvplot не отображает комбинированную кривую выживания с add.all = TRUE при фасетировании
Контролировать положение x с помощью ggrepel
Есть ли способ запретить меткам фасетов иметь одинаковую ширину (после вращения)