Введение
Данная статья возможно будет интересна любителям биологии, кому нравиться классифицировать и систематизировать информацию, а также тем кто начинает свой путь в языке R. Лично меня всегда радуют маленькие открытия, особенно, если я узнаю что-то новое чего не знал ранее. На этот раз таким открытием стал биом Уиттекера. И я хочу поделиться этим переводом статьи с Вами.
Биом Уиттекера, также известный как метод классификации экосистем, делит экосистемы земли на различные типы на основе таких факторов, как географическое распределение и условия окружающей среды. Этот метод классификации был предложен американским экологом Робертом Уиттакером (Robert Whittaker) в 1962 году, целью которого является улучшение понятий и описаний разнообразия и функций экосистем. Согласно диаграмме Уиттакер использует два фактора для классификации биологических сообществ: осадки и температуру (Рисунок 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). Она используется для отображения температуры, осадков, высоты над уровнем моря и сообществ в различных точках отбора проб. Она богата информацией и красива в своем представлении.

Чтобы запечатлеть в своей памяти информацию о биоме Уиттакера, я решил воспроизвести данную диаграмму с помощью языка R. Давайте посмотрим, как я этого добился и что получилось в итоге.
Библиотека plotbiomes на языке R
Ну буду лукавить изначально я предполагал использовать для визуализации Python. Однако после нескольких минут гугления обнаружил в R такой замечательную библиотеку как plotbiomes и самая простая реализация биома Уиттакера может быть выполнена с помощью двух строк кода:
library(plotbiomes) whittaker_base_plot()

Диаграмма основана на 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 - это базовые данные для диаграммы. Если вы хотите изменить форму диаграммы, вы можете изменить данные:

Дополнительно измените цвет, например, используя классический цвет 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

На основе 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)

Описанный выше метод, использующий инкапсуляцию 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)

Воспроизведение результатов из журнала
Чтобы воспроизвести диаграмму представленную в публикации, необходимо добавить некоторые моменты, как в статье (Рисунок 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)


Наложение точек на основе инкапсуляции 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()

На рисунке в журнале также изображены возвышенности разных цветов и есть белые границы, которые добавляют красоты в диаграмму.
Цветовое сопоставление цвета границы точек и фоновой заливки является очень творческим процессом и относительно хлопотным, поскольку заливка использовалась для полигонов биомов, а 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()

Наконец, используйте возможности 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

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