R tmap tm_facet присваивает значения в неправильное местоположение - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь использовать tm_facets для отображения данных (в данном случае по урожайности кукурузы) в 2005, 2050 и 2080 годах. Файл test.RDS доступен здесь .

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)
tm_shape(map.temp) + 
  tm_polygons(col = "value", title = legend_title) +
  tm_facets(by = "year") +
  tm_layout(main.title = title) +
  tm_view(view.legend.position  = c("left", "bottom"))

Код выше делает это, но отображает данные в неправильном многоугольнике и неправильных годах.Чтобы увидеть это, запустите скрипт и щелкните темно-красную область на северо-востоке Канады.Всплывающее окно на всех трех картах показывает AMR_RUS со значением 5634, но цвета разные.Просмотрите файл map.temp (я использую Rstudio, чтобы сделать все это).Фильтр на FPU с AMR_RUS.Значение 2005 года составляет 6,047, 2050 - 5634, а 2080 - 4406 (изменение климата приведет к снижению урожайности в этой области).Далее посмотрите на первую пару записей в столбце геометрии.Последние координаты указаны для региона вдоль китайско-российской границы.Эту границу составляет река Амур, а AMR_RUS FPU (единица по производству продуктов питания) находится к северу от реки Амур в России.

Проблема с моим кодом или данными или функцией tm_facet в tmap?

1 Ответ

0 голосов
/ 01 января 2019

К сожалению, я не могу найти решение с помощью tmap, и не уверен, почему происходит такое неправильное расположение имен и значений полигонов во всплывающем окне. ОБНОВЛЕНИЕ: похоже, что это ошибка tmap, которая была немедленно исправлена ​​- см. tmap проблему 268 .

Я знаю, что вы попросили tmap решение,но, в качестве альтернативы, стоило бы изучить решение с помощью mapview - проверьте это и посмотрите, работает ли оно для вас:

library(mapview)

breaks <- c(1.0, 2139.2, 4277.5, 6415.8, 8554)

m_2005 <- mapview(map.temp[map.temp$year == 2005, ], 
                  zcol = "value", 
                  at = breaks, 
                  layer.name = "2005 - mt/ha")
m_2050 <- mapview(map.temp[map.temp$year == 2050, ], 
                  zcol = "value", 
                  at = breaks, 
                  layer.name = "2050 - mt/ha")
m_2080 <- mapview(map.temp[map.temp$year == 2080, ], 
                  zcol = "value", 
                  at = breaks, 
                  layer.name = "2080 - mt/ha")

sync(m_2005, m_2050, m_2080) # add ncol = 1, if you wish 1 column representation 

enter image description here

...