tidyterra
Пакет tidyterra (https://dieghernan.github.io/tidyterra/) предоставляет 📸 методы, обычные для пакетов “вселенной” tidy (tidyverse), объектам SpatRaster и SpatVector, созданным в пакете terra.
В tidyterra также реализованы 📸 функции
tidy-методы, реализованные в tidyterra, работают по-разному в зависимости от типа объекта
•
•
Методы возвращают тот же тип объекта, который использовался на входе, если только ожидаемое поведение метода не предполагает возврат объекта другого типа. Например,
tidyterra задумана как удобная обертка terra. Такой подход имеет свою цену в плане производительности. Если вы активно используете terra или вам нужно работать с большими растровыми файлами, используйте terra, как более ориентированную на производительность.
📖 Hernangómez, D., (2023). Using the tidyverse with terra objects: the tidyterra package. Journal of Open Source Software, 8 (91), 5751, https://doi.org/10.21105/joss.05751.
#R
Пакет tidyterra (https://dieghernan.github.io/tidyterra/) предоставляет 📸 методы, обычные для пакетов “вселенной” tidy (tidyverse), объектам SpatRaster и SpatVector, созданным в пакете terra.
В tidyterra также реализованы 📸 функции
geom_*
для построения графиков объектов SpatRaster и SpatVector с помощью ggplot2.tidy-методы, реализованные в tidyterra, работают по-разному в зависимости от типа объекта
Spat*
:•
SpatVector
: методы реализованы с помощью terra::as.data.frame()
. Строки соответствуют геометрии, а столбцы — атрибутам геометрии.•
SpatRaster
: подход tidyterra заключается в том, чтобы рассматривать слои (layers) как столбцы таблицы, а ячейки (cells) — как строки. Например, select(SpatRaster, 1)
будет выбирать первый слой SpatRaster
.Методы возвращают тот же тип объекта, который использовался на входе, если только ожидаемое поведение метода не предполагает возврат объекта другого типа. Например,
as_tibble()
вернет tibble
.tidyterra задумана как удобная обертка terra. Такой подход имеет свою цену в плане производительности. Если вы активно используете terra или вам нужно работать с большими растровыми файлами, используйте terra, как более ориентированную на производительность.
📖 Hernangómez, D., (2023). Using the tidyverse with terra objects: the tidyterra package. Journal of Open Source Software, 8 (91), 5751, https://doi.org/10.21105/joss.05751.
#R
Логические операции
Рассмотрим логические операции с векторными данными (
Начнем с функций
Функции принимают на вход объекты
Построим полигон
Применив к
мы получим одинаковый результат:
Разница в работе функций появляется, когда у векторных данных есть атрибуты:
У
Обрезать SpatVector можно по прямоугольнику (SpatRaster, SpatExtent) или по другому SpatVector. Если это не полигоны, то используется минимальная выпуклая оболочка.
Объединение векторов SpatVector, а также объектов SpatExtent, осуществляет функция
При объединении полигонов нужно учесть один важный момент. Объединим
В результате получим вектор, состоящий из двух полигонов: “дырявого”
Объединение линий и точек c помощью
Если
Функция
#R
Рассмотрим логические операции с векторными данными (
SpatVector
) в пакете terra
.Начнем с функций
crop
и intersect
— для обрезки и вычисления пересечения векторных данных соответственно: crop(x, y, ...)
intersect(x, y, ...)
Функции принимают на вход объекты
SpatVector
, SpatExtent
или SpatRaster
(у crop
первым аргументом могут быть только векторы и растры). С растровым использованием этих функций мы уже сталкивались здесь и здесь.Построим полигон
p1
и лежащий внутри него полигон p2
:p1 <- vect("POLYGON ((0 0, 8 0, 8 9, 0 9, 0 0))")
p2 <- vect("POLYGON ((2 6, 3 6, 3 8, 2 8, 2 6))")
plot(p1, lwd=2)
lines(p2, lwd=2, col="blue")
lines
использована для рисования поверх первого plot
’a.Применив к
p1
и p2
обрезку и пересечениеcropped <- crop(p1,p2)
isected <- intersect(p1,p2)
мы получим одинаковый результат:
# class : SpatVector
# geometry : polygons
# dimensions : 1, 0 (geometries, attributes)
# extent : 2, 3, 6, 8 (xmin, xmax, ymin, ymax)
# coord. ref. :
Разница в работе функций появляется, когда у векторных данных есть атрибуты:
p1[["id1"]] <- 1L
p2[["id4"]] <- 1L
cropped <- crop(p1,p2)
# class : SpatVector
# geometry : polygons
# dimensions : 1, 1 (geometries, attributes)
# extent : 2, 3, 6, 8 (xmin, xmax, ymin, ymax)
# coord. ref. :
# names : id1
# type : <int>
# values : 1
isected <- intersect(p1,p2)
# class : SpatVector
# geometry : polygons
# dimensions : 1, 2 (geometries, attributes)
# extent : 2, 3, 6, 8 (xmin, xmax, ymin, ymax)
# coord. ref. :
# names : id1 id4
# type : <int> <int>
# values : 1 1
У
crop
, в отличие от intersect
, геометрия и атрибуты y
не передаются на выход.Обрезать SpatVector можно по прямоугольнику (SpatRaster, SpatExtent) или по другому SpatVector. Если это не полигоны, то используется минимальная выпуклая оболочка.
Объединение векторов SpatVector, а также объектов SpatExtent, осуществляет функция
union
.При объединении полигонов нужно учесть один важный момент. Объединим
p1
и p2
с помощью union
:united <- union(p1, p2)
# class : SpatVector
# geometry : polygons
# dimensions : 2, 2 (geometries, attributes)
# extent : 0, 8, 0, 9 (xmin, xmax, ymin, ymax)
# coord. ref. :
# names : id1 id4
# type : <int> <int>
# values : 1 NA
# 1 1
plot(united[1], lwd=2, col="red")
plot(united[2], add=T, lwd=2, col="blue")
В результате получим вектор, состоящий из двух полигонов: “дырявого”
p1
с вырезанным из него p2
, и, собственно, p2
. Если такой эффект вам не нужен, а нужно просто создать SpatVector из нескольких полигонов, используйте rbind
:merged <- rbind(p1, p2)
# class : SpatVector
# geometry : polygons
# dimensions : 2, 2 (geometries, attributes)
# extent : 0, 8, 0, 9 (xmin, xmax, ymin, ymax)
# coord. ref. :
# names : id1 id4
# type : <int> <int>
# values : 1 NA
NA 1
Объединение линий и точек c помощью
union
просто объединяет два набора данных без каких-либо геометрических пересечений — так же, как и rbind
. На выходе получим атрибуты обоих исходных векторов.Если
x
и y
имеют разный геометрический тип, то возвращается коллекция SpatVectorCollection
.Функция
c()
создает их векторов SpatVectorCollection
или добавляет объекты в существующую коллекцию:collected <- c(p1, p2)
# class : SpatVectorCollection
# length : 2
# geometry : polygons (1)
polygons (1)
# names : ,
#R
Пространственные отношения между геометриями
Пространственные отношения между объектами — это про то, кто кого касается, пересекает, лежит внутри и т. п.
Выяснить пространственные отношения между геометриями векторов помогает функция
Посмотрим как это работает. Создадим новый полигон, лежащий внутри
Найдем, с какими полигонами из
#R
Пространственные отношения между объектами — это про то, кто кого касается, пересекает, лежит внутри и т. п.
Выяснить пространственные отношения между геометриями векторов помогает функция
relate
. Она возвращает логическую матрицу, указывающую на наличие или отсутствие определенных пространственных отношений между геометриями x
и y
:relate(x, y, relation, ...)
relation
— отношение между геометриями: "intersects", "touches", "crosses", "overlaps", "within", "contains", "covers", "coveredby", "disjoint".Посмотрим как это работает. Создадим новый полигон, лежащий внутри
p1
и не пересекающийся с p2
:merged <- rbind(p1, p2)
p3 <- vect("POLYGON ((4 6, 5 6, 5 8, 4 8, 4 6))")
plot(merged, lwd=2)
lines(p3, lwd=2, col="blue")
Найдем, с какими полигонами из
merged
пересекается (intersects
) p3
:relate(merged, p3, "intersects")
[,1]
[1,] TRUE
[2,] FALSE
p3
пересекается с первым элементом merged
, то есть с p1
, и не пересекается со вторым (p2
).is.related(x, y, relation, ...)
возвращает логический вектор, указывающий на наличие/отсутствие определенных пространственных отношений между x
и любой из геометрий в y
.is.related(merged, p3, "intersects")
[1] TRUE FALSE
#R
tidyplots
Цель пакета tidyplots (https://tidyplots.org/) — упростить создание графиков для научных публикаций. Он позволяет постепенно добавлять, удалять и корректировать элементы графиков, используя последовательный и интуитивно понятный синтаксис.
Многие пакеты tidy-вселенной так или иначе связаны с Хэдли Уикемом (Hadley Wickham), чего нельзя сказать о tidyplots. Более того, его автор Ян Бродер Энглер (Jan Broder Engler) предложил грамматику графики альтернативную принятой в знаменитом пакете ggplot2, разработанном Уикемом.
Для построения графиков используются функции вида Add, Remove, Adjust, Themes, Split, Output. С Add все понятно, но зачем нужен Remove? А вот зачем: вместо того, чтобы обнулять или делать пустым ненужный элемент, функции Remove говорят: “удалить заголовок легенды” (
Подробнее о работе с пакетом читайте в:
📖 Начало работы с tidyplots
Еще подробнее — в препринте.
Ян Энглер является также автором пакета tidyheatmaps.
Спасибо коллегам за наводку!
#R
Цель пакета tidyplots (https://tidyplots.org/) — упростить создание графиков для научных публикаций. Он позволяет постепенно добавлять, удалять и корректировать элементы графиков, используя последовательный и интуитивно понятный синтаксис.
Многие пакеты tidy-вселенной так или иначе связаны с Хэдли Уикемом (Hadley Wickham), чего нельзя сказать о tidyplots. Более того, его автор Ян Бродер Энглер (Jan Broder Engler) предложил грамматику графики альтернативную принятой в знаменитом пакете ggplot2, разработанном Уикемом.
Для построения графиков используются функции вида Add, Remove, Adjust, Themes, Split, Output. С Add все понятно, но зачем нужен Remove? А вот зачем: вместо того, чтобы обнулять или делать пустым ненужный элемент, функции Remove говорят: “удалить заголовок легенды” (
remove_legend_title
) или “удалить ось y” (remove_y_axis
). Вроде бы мелочь, но кому-то именно такой способ работы придется по душе. Функции Adjust настраивают элементы графиков, например, размер шрифта или цвет. Themes — это темы, то есть типовые настройки графиков. Split позволяет строить несколько графиков одновременно. Output настраивает вывод графиков в файлы.Подробнее о работе с пакетом читайте в:
📖 Начало работы с tidyplots
Еще подробнее — в препринте.
Ян Энглер является также автором пакета tidyheatmaps.
Спасибо коллегам за наводку!
#R
Introduction to Environmental Data Science
Книга Introduction to Environmental Data Science (https://bookdown.org/igisc/EnvDataSci/) Джерри Дэвиса (Jerry Davis) посвящена анализу пространственных данных, связанных с исследованиями окружающей среды, на языке программирования R.
В книге есть краткое введение в R, описана работа с векторными и растровыми данными, моделирование, анализ спутниковых снимков и временных рядов.
Environmental Data Science book (https://edsbook.org/welcome) — аналогичный ресурс на Python.
Спасибо коллегам за наводку!
#R #python
Книга Introduction to Environmental Data Science (https://bookdown.org/igisc/EnvDataSci/) Джерри Дэвиса (Jerry Davis) посвящена анализу пространственных данных, связанных с исследованиями окружающей среды, на языке программирования R.
В книге есть краткое введение в R, описана работа с векторными и растровыми данными, моделирование, анализ спутниковых снимков и временных рядов.
Environmental Data Science book (https://edsbook.org/welcome) — аналогичный ресурс на Python.
Спасибо коллегам за наводку!
#R #python