Настройка автографиков проекта атласа малярии

Я пытаюсь построить график некоторых данных из проекта Атлас малярии . Поэтому я посмотрел виньетку и использовал пример для начала:

if (!require("malariaAtlas")) install.packages("malariaAtlas")
    
shape <- getShp(ISO = "MDG", admin_level = "admin1")
raster <- getRaster(dataset_id = "Explorer__2020_Global_PfPR", shp = shape, year = 2013)

p <- autoplot(object = raster,
              legend_title = "",
              plot_titles = FALSE, 
              fill_colour_palette = "PuBu")

в результате получается следующий график:

и предупреждающее сообщение:

В geom_spatraster(data = object, use_coltab = use_coltab, ...): Игнорирование неизвестных параметров: legend_title, plot_titles и fill_colour_palette

Альтернативная версия построения графиков autoplot_MAPraster допускает некоторую настройку:

p <- autoplot_MAPraster(object = raster, 
                        legend_title = "", 
                        plot_titles = FALSE, 
                        fill_colour_palette = "PuBu")

Для моего приложения мне нужно настроить графики (цвет и заголовок легенды, фигуры на растре, собственный заголовок и т. д.). Поэтому я проверил исходный код и без проблем изменил код autoplot.MAPshp , но не знаю, как заставить ggplot2::geom_raster(data = object[object$raster_name == rastername,], ggplot2::aes_string(x = "x", y = "y", fill = "z")) работать с кодом autoplot.MAPraster. В частности, object[object$raster_name == rastername,], где object = raster, я получаю ошибку:

Ошибка в h(simpleError(msg, call)) :
Ошибка при оценке аргумента «i» при выборе метода для функции «[»: [подмножество] недопустимое имя(я)

Моей целью была бы (для меня) рабочая версия исходного кода autoplot.MAPraster, которую можно было бы модифицировать.

РЕДАКТИРОВАТЬ

Для лучшего разграничения разных частей карты было бы полезно перенести ранее рассчитанные границы страны (фигуры) поверх существующего растра.

shape <- getShp(ISO = "MDG", admin_level = "admin1")
autoplot(shape)

Из кода autoplot.MAPraster что-то вроде

p <- p + geom_polygon(data = shape, aes_string(x = "long", y = "lat", group = "group"), alpha = 0, colour = "grey40")

мог бы выполнить эту работу. Для меня это приводит к массажу ошибок:

Ошибка в geom_polygon(): ! Проблема при расчете эстетики. Ошибка произошла на третьем уровне. Вызвано ошибкой: ! Группа объектов не найдена

Стоит ли изучать 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
0
70
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать ggtitle() для основного заголовка, labs() для названия легенды, scale_fill_gradient() для раскрашивания карты и theme_classic() для темы сюжета.

p + ggtitle("Some Title") +
  labs(fill = "Legend Title") +
  scale_fill_gradient(low = "lightgreen", high = "darkgreen") +
  theme_classic()

Выход:

Есть ли способ добавить фигуру поверх растра?

Excelsior 20.05.2024 14:16

Не могли бы вы объяснить больше, пожалуйста? Пример, может быть.

MetehanGungor 20.05.2024 14:27

Я отредактировал вопрос в соответствии

Excelsior 20.05.2024 14:49
Ответ принят как подходящий

При работе с геопространственными данными гораздо проще относиться к ним как к таковым. Это особенно верно в случае ggplot2, который очень хорошо обрабатывает геопространственные данные. Например, «форма» в вашем примере — это научно-фантастический объект, поэтому ее построение с использованием geom_sf() — более надежный подход. Аналогично, «растр» — это SpatRaster, поэтому вы можете использовать tidyterra::geom_spatraster().

В этом реплексе используется часть примера кода из malariaAtlas GitHub . Если вам нужны разные цвета заливки, есть множество вариантов scale_fill_*(). Я включил два варианта (один закомментирован, вы можете переключаться между ними для сравнения). Я установил цвет «формы» на «черный» для иллюстративных целей, поскольку «серый40» не виден четко, но вы можете использовать любую ggplot2 эстетику, цвета и заливки в соответствии с вашими потребностями.

library(malariaAtlas)
library(tidyterra)

shape <- getShp(ISO = "MDG", admin_level = "admin1")

raster <- getRaster(dataset_id = "Explorer__2020_Global_PfPR", shp = shape, year = 2013)

ggplot() +
  geom_spatraster(data = raster) +
  geom_sf(data = shape, colour = "black", fill = NA) +
  ggtitle("Raw PfPR Survey points +\nModelled PfPR 2-10 in Madagascar in 2013") +
  scale_fill_distiller(name = "PfPR", 
                       palette = "RdYlBu",
                       na.value = "transparent") +
  # scale_fill_gradient(low = "lightblue", high = "darkblue", 
  #                     na.value = "transparent") +
  coord_sf(xlim = c(42.5, 51)) +
  theme(plot.title = element_text(size = 10))

Настройка может быть проще с помощью базового сюжета. Для начала:

library(terra)
plot(raster)
lines(shape, col = "gray")

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