Введение

Данная статья возможно будет интересна любителям биологии, кому нравиться классифицировать и систематизировать информацию, а также тем кто начинает свой путь в языке R. Лично меня всегда радуют маленькие открытия, особенно, если я узнаю что-то новое чего не знал ранее. На этот раз таким открытием стал биом Уиттекера. И я хочу поделиться этим переводом статьи с Вами.

Биом Уиттекера, также известный как метод классификации экосистем, делит экосистемы земли на различные типы на основе таких факторов, как географическое распределение и условия окружающей среды. Этот метод классификации был предложен американским экологом Робертом Уиттакером (Robert Whittaker) в 1962 году, целью которого является улучшение понятий и описаний разнообразия и функций экосистем. Согласно диаграмме Уиттакер использует два фактора для классификации биологических сообществ: осадки и температуру (Рисунок 1).

Рисунок 1. Биом Уиттекера
Рисунок 1. Биом Уиттекера

Биом Уиттакера делит экосистемы на поверхности земли на пять типов в зависимости от сочетания климата и типов растительности: дождевые тропические леса, хвойные леса умеренного пояса, лиственные широколиственные леса умеренного пояса, луга и пустыни.Среди них влажные тропические леса распространены вблизи экватора, с теплым и влажным климатом и богатой и разнообразной растительностью; хвойные леса умеренного пояса распространены в более высоких широтах Северного полушария и Антарктиды, с холодным климатом и растительностью, в которой преобладают хвойные деревья; широколиственные леса умеренного пояса распространены в средних и высоких широтах, с четырьмя различными сезонами года и растительностью, в которой преобладают листопадные широколиственные деревья; луга распространены в средних и низких широтах, с сухим климатом и растительностью, основанной на лугах; пустыни распространены в низких широтах, с сухим климатом и редкой растительностью.

В статье из журнала Nature Communications Hammond, W.M., Williams, A.P., Abatzoglou, J.T. et al. Global field observations of tree die-off reveal hotter-drought fingerprint for Earth’s forests представлена более расширенный вид диаграммы Биома Уиттекера (Рисунок 2). Она используется для отображения температуры, осадков, высоты над уровнем моря и сообществ в различных точках отбора проб. Она богата информацией и красива в своем представлении.

Рисунок 2. Диаграмма биома Уиттакера опубликованный в журнале Nature Communications
Рисунок 2. Диаграмма биома Уиттакера опубликованный в журнале Nature Communications

Чтобы запечатлеть в своей памяти информацию о биоме Уиттакера, я решил воспроизвести данную диаграмму с помощью языка R. Давайте посмотрим, как я этого добился и что получилось в итоге.

Библиотека plotbiomes на языке R

Ну буду лукавить изначально я предполагал использовать для визуализации Python. Однако после нескольких минут гугления обнаружил в R такой замечательную библиотеку как plotbiomes и самая простая реализация биома Уиттакера может быть выполнена с помощью двух строк кода:

library(plotbiomes)
whittaker_base_plot()
Рисунок 3. Две строчки кода и задача выполнена... не очень интересно )))
Рисунок 3. Две строчки кода и задача выполнена... не очень интересно )))

Диаграмма основана на ggplot, и того же результата можно достичь с помощью ggplot:

library(plotbiomes)
library(ggplot2)

plot_1 <- ggplot() +
  # add biome polygons
  geom_polygon(data = Whittaker_biomes,
               aes(x    = temp_c,
                   y    = precp_cm,
                   fill = biome),
               # adjust polygon borders
               colour = "gray98",
               size   = 1) +
  theme_bw()
plot_1

Whittaker_biomes - это базовые данные для диаграммы. Если вы хотите изменить форму диаграммы, вы можете изменить данные:

Рисунок 4. Базовые данные биома Уиттакера
Рисунок 4. Базовые данные биома Уиттакера

Дополнительно измените цвет, например, используя классический цвет Whittaker_biomes,

Ricklefs_colors - это предопределенный набор цветов, который поставляется с пакетом plotbiomes. Эти цвета использовались в работе Ricklefs, R. E. (2008). The economy of nature. W. H. Freeman and Company. (Chapter 5, Biological Communities, The biome concept):

Ricklefs_colors
plot_2 <- plot_1 +
  # fill the polygons with predefined colors
  scale_fill_manual(name   = "Whittaker biomes",
                    breaks = names(Ricklefs_colors),
                    labels = names(Ricklefs_colors),
                    values = Ricklefs_colors)
plot_2
Рисунок 5
Рисунок 5

На основе ggplot можно внести более подробные изменения используя синтаксис:

whittaker_base_plot() + theme_bw()

Вы можете использовать различные цветовые схемы для улучшения эстетичности, например, с помощью пакета RColorBrewer. В следующем примере я использовал пользовательскую палитру:

library(RColorBrewer)

# the main rule - create 9 colors for the 9 biomes

# failed trial with RColorBrewer :)
my_palette_1 <- rev(brewer.pal(n = 9, name = "BrBG"))
whittaker_base_plot(color_palette = my_palette_1)

# this seems a better approach - interpolate 9 colors from given main 3  
my_palette_2 <- colorRampPalette(colors = c("#F5F5F5",  "#01665E", "#8C510A"))(9)
whittaker_base_plot(color_palette = my_palette_2)
Рисунок 6
Рисунок 6

Описанный выше метод, использующий инкапсуляцию whittaker_base_plot(), можно настроить с помощью ggplot:

names(my_palette_2) <- names(Ricklefs_colors)

ggplot() +
  # add biome polygons
  geom_polygon(data = Whittaker_biomes,
               aes(x    = temp_c,
                   y    = precp_cm,
                   fill = biome),
               # adjust polygon border
               colour = "gray98",
               size   = 1) +
  # fill the polygons with desired colors
  scale_fill_manual(name   = "Whittaker biomes",
                    breaks = names(Ricklefs_colors),
                    labels = names(Ricklefs_colors),
                    values = my_palette_2)
Рисунок 7
Рисунок 7

Воспроизведение результатов из журнала

Чтобы воспроизвести диаграмму представленную в публикации, необходимо добавить некоторые моменты, как в статье (Рисунок 8)

Рисунок 8
Рисунок 8

Сначала добавляем случайные точки, генерируя случайные местоположения и извлекая температуру и осадки из данных WorldClim.

library(raster)
library(maptools)

path <- system.file("extdata", "temp_pp.tif", package = "plotbiomes")
temp_pp <- raster::stack(path)
names(temp_pp) <- c("temperature", "precipitation")

data(wrld_simpl) # load world polygons from maptools

wrld_simpl <- wrld_simpl[wrld_simpl$NAME != "Antarctica", ]

set.seed(66) # random number generator
points <- sp::spsample(x = wrld_simpl, n = 50, type = "random")

extractions <- raster::extract(temp_pp, points, df = TRUE)

extractions$temperature <- extractions$temperature/10

extractions$precipitation <- extractions$precipitation/10
extractions$Elevation <- runif(10) * 100
plot(temp_pp[[1]]/10); points(points)
plot(temp_pp[[2]]); points(points)
Рисунок 9. Рисунок 9. Извлеченный точек со значениям температуры по Цельсию
Рисунок 9. Рисунок 9. Извлеченный точек со значениям температуры по Цельсию
Рисунок 10. Рисунок 9. Извлеченные точки со значениям осадков в миллиметрах
Рисунок 10. Рисунок 9. Извлеченные точки со значениям осадков в миллиметрах

Наложение точек на основе инкапсуляции whittaker_base_plot:

whittaker_base_plot() +
  # add the temperature - precipitation data points
  geom_point(data = extractions, 
             aes(x = temperature, 
                 y = precipitation), 
             size   = 3,
             shape  = 21,
             colour = "gray95", 
             fill   = "black",
             stroke = 1,
             alpha  = 0.5) +
  theme_bw()
Рисунок 11
Рисунок 11

На рисунке в журнале также изображены возвышенности разных цветов и есть белые границы, которые добавляют красоты в диаграмму.

Цветовое сопоставление цвета границы точек и фоновой заливки является очень творческим процессом и относительно хлопотным, поскольку заливка использовалась для полигонов биомов, а ggplot2 допускает только один масштаб.

Следовательно, мы не можем использовать два разных отображения заливки. Одним из решений является двойной вызов geom_point (6.4.1 Specify Values в официальном документе ggplot2). Сначала вызывается линия границы заданной точки, а следующим шагом вызывается раскраска точки.

plot_3 <- whittaker_base_plot() +
  geom_point(data = extractions,
             aes(x = temperature,
                 y = precipitation),
             shape  = 21,
             stroke = 1, # acts as the thickness of the boundary line
             colour = "gray95", # acts as the color of the boundary line
             size   = 3.5) +
  geom_point(data = extractions,
             aes(x = temperature,
                 y = precipitation,
                 color = Elevation),
             shape = 16,
             size  = 3,
             alpha = 0.5) +
 scale_color_viridis_c()
plot_3 + theme_bw()
Рисунок 12
Рисунок 12

Наконец, используйте возможности ggplot, чтобы полностью обновить и поместить легенду в границу диаграммы:

my_plot <- plot_3 +
  # Optional - Overwrite axis ranges (the scale warning is expected):
  # - set range on OY axes and adjust the distance (gap) from OX axes
  scale_y_continuous(name = 'Precipitation (cm)',
                     limits = c(min = -5, max = ceiling(max(460, extractions$precipitation)/10)*10) ,
                     expand = c(0, 0)) +
  # - set range on OX axes and adjust the distance (gap) from OY axes
  scale_x_continuous(name = expression("Temperature " ( degree*C)),
                     limits = c(min = floor(min(-20, extractions$temperature)/5)*5, max = 30.5),
                     expand = c(0, 0)) +
  coord_fixed(ratio = 1/10) + # aspect ratio, expressed as y / x
  theme_bw() +
  theme(
    legend.justification = c(0, 1), # pick the upper left corner of the legend box and
    legend.position = c(0, 1), # adjust the position of the corner as relative to axis
    legend.background = element_rect(fill = NA), # transparent legend background
    legend.box = "horizontal", # horizontal arrangement of multiple legends
    legend.spacing.x = unit(0.5, units = "cm"), # horizontal spacing between legends
    panel.grid = element_blank() # eliminate grids
  )
  my_plot
Рисунок 13
Рисунок 13

Метод классификации биомов Уиттакера учитывает не только состав растений и животных, но и влияние факторов окружающей среды на экосистему. Это обеспечивает основу для экологических исследований, позволяя нам лучше понимать характеристики и функции различных экосистем, а также лучше защищать экосистемы и управлять ими.

Комментарии (0)