Я пытаюсь использовать tmap для создания интерактивных графиков для глобального набора данных.Файл map.temp имеет классы sf
и data.frame
.Он имеет четыре столбца - FPU
, value
, year
и geometry
.Я хочу сделать фасеты для года, который является символьной переменной с тремя уникальными значениями - 2005, 2050 и 2080.
head(map.temp)
возвращает
Simple feature collection with 6 features and 3 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -179.1667 ymin: 39.66666 xmax: 179.8333 ymax: 71.41666
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
FPU year geometry value
1 ALB_ALB 2005 MULTIPOLYGON (((20.08333 39... 2494
2 ALB_ALB 2050 MULTIPOLYGON (((20.08333 39... 2565
3 ALB_ALB 2080 MULTIPOLYGON (((20.08333 39... 1906
4 ALK_USA 2005 MULTIPOLYGON (((-179 51.166... NA
5 ALK_USA 2050 MULTIPOLYGON (((-179 51.166... NA
6 ALK_USA 2080 MULTIPOLYGON (((-179 51.166... NA
Код tm_shape
нижеимеет три закомментированные строки;по одному для tm_polygons
, tm_fill
и tm_symbols
.Если они не закомментированы и код запускается отдельно, каждый из них создает три графика, по одному на каждый год.Я ожидаю, что tm_fill и tm_polygons заполнят многоугольники FPU цветами, но они делают это только для года = 2080. Если строка tm_symbols не закомментирована, у нее будут результаты (круги, размер которых относительно значения) для каждого года.Файл test.RDS доступен здесь .Мой главный вопрос - как сделать так, чтобы грани на 2005 и 2050 годы были окрашены с помощью tm_fill
.
library(tmap)
map.temp <- readRDS("test.RDS")
title <- "Maize rainfed yield <br> (mt/ha)"
legend_title <- "(mt/ha)"
breaks <- c(1.0, 2139.2, 4277.5, 6415.8, 8554)
tmap_mode("view")
tm_shape(map.temp) +
# tm_polygons(col = "value", breaks = breaks, title = legend_title) +
# tm_fill(col = "value", title = legend_title) +
tm_borders() +
# tm_symbols(col = "black", border.col = "black", size = "value", title.col = legend_title) +
tm_facets(by = "year", nrow = 3, free.coords = FALSE, sync = TRUE) +
tm_layout(title = title) +
tm_view(view.legend.position = c("left", "bottom"))