Введение
Данная статья возможно будет интересна любителям биологии, кому нравиться классифицировать и систематизировать информацию, а также тем кто начинает свой путь в языке 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
Метод классификации биомов Уиттакера учитывает не только состав растений и животных, но и влияние факторов окружающей среды на экосистему. Это обеспечивает основу для экологических исследований, позволяя нам лучше понимать характеристики и функции различных экосистем, а также лучше защищать экосистемы и управлять ими.