tmap facetmap не работает для tm_fill, но работает для tm_symbols - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь использовать 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"))

1 Ответ

0 голосов
/ 30 декабря 2018

Отличная работа.Я не знаток tmap, но вы пытались установить free.coords на TRUE вместо FALSE в tm_facets?Это помогло мне.

Я также думаю, что tm_borders, tm_fill и tm_polygons как-то избыточны в этом случае, поэтому я сохранил только tm_polygons.

Здесьмои правки в коде, которые должны исправить вашу проблему:

tmap_mode("view")
tm_shape(map.temp) + 
  tm_polygons(col = "value", breaks = breaks, title = legend_title) +
  tm_symbols(col = "black", border.col = "black", size = "value", title.col = legend_title) +
  tm_facets(by = "year",  nrow = 3, free.coords = TRUE, sync = TRUE) + # set free.coords to TRUE
  tm_layout(title = title) +
  tm_view(view.legend.position  = c("left", "bottom"))

enter image description here

...