Настройте точечные карты в R с помощью tmap

У меня есть набор точечных данных, который я хотел бы нанести на карту. Я новичок в tmap и играл с ним, но не смог получить желаемый результат. Мне нужно что-то, что делает следующее (если возможно):

  • Отображать баллы только для обозначенного area (например, A002)
  • Раскрасьте точки на основе value и укажите, какие это цвета (например, 0 = зеленый, 1 = синий и 2 = красный)
  • Отображение легенды внутри карты с произвольным заголовком (например, номера легенды)
  • Разрешить размещение произвольного текста в легенде (например, 0 [какой-то текст]; 1 [какой-то текст]; 2 [какой-то текст]
  • При наведении курсора на точку отображается запись в label.
  • При нажатии на точку отображаются все атрибуты (например, значения для кода, площади, значения и метки).

Это код, который я использовал:

require("data.table")
require("sf")
require("tmap")

dt1 <- data.table(
  code=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312"),
  area=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
  x=c(325147,323095,596020,257409,241206,248371,261076,595218,596678),
  y=c(286151,284740,335814,079727,084266,078283,062045,333889,337836),
  value=c(0,1,2,0,1,1,2,2,2),
  label=c("A00 111", "A00 112","A00 113","A00 211","A00 212","A00 213","A00 214","A00 311","A00 312")) 

sf1 <- st_as_sf(dt1, coords = c("x","y"), crs=27700, na.fail=FALSE)

tmap_mode("view")

map <- tm_shape(sf1) + tm_dots(group = "value", breaks = c(0,1,2,Inf), palette = c("aquamarine2", "cornflowerblue", "brown1"))

map

person Chris    schedule 28.07.2019    source источник


Ответы (1)


Мне удалось получить большую часть желаемых вами баллов с помощью лишь незначительных изменений в вашем коде.

Основные изменения:

  • преобразование group в col (я думаю, это было вашим самым большим камнем преткновения)

  • добавление вектора из трех меток легенды в labels

  • добавление заголовка легенды в title

  • добавление заголовка всплывающего окна (большой жирный элемент вверху всплывающего окна) в id

  • добавление всплывающих окон «также-ранс» (маленькие серые элементы внутри) в popup.vars; обратите внимание, как я переименовал их, включив двоеточие (иначе вы получите имена полей)

require("data.table")
require("sf")
require("tmap")

dt1 <- data.table(
  code=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312"),
  area=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
  x=c(325147,323095,596020,257409,241206,248371,261076,595218,596678),
  y=c(286151,284740,335814,079727,084266,078283,062045,333889,337836),
  value=c(0,1,2,0,1,1,2,2,2),
  label=c("A00 111", "A00 112","A00 113","A00 211","A00 212","A00 213","A00 214","A00 311","A00 312")) 

sf1 <- st_as_sf(dt1, coords = c("x","y"), crs=27700, na.fail=FALSE)

tmap_mode("view")

map <- tm_shape(sf1) + tm_dots(col = "value", 
                               breaks = c(0,1,2,Inf),
                               labels = c("some text A", "some text B", "some text C"),
                               id = "label", # bold in popup
                               popup.vars = c("area:" = "area", "code:" = "code"), # light in popup
                               palette = c("aquamarine2", "cornflowerblue", "brown1"),
                               title = "Lo & behold: a legend!")

map

tmap-map-with-dots

Всплывающие окна не так просто захватить экран, но, похоже, работают :)

person Jindra Lacko    schedule 29.07.2019
comment
Идеально. Спасибо. Кроме того, указание popup.vars = TRUE означает, что все атрибуты отображаются во всплывающем окне (не уверен, как я это пропустил раньше!). - person Chris; 31.07.2019
comment
Рад помочь! Я лично предпочитаю перечислять popup.vars по отдельности, так как 1) мои переменные обычно имеют загадочные имена и 2) мои фреймы данных содержат много переменных. Но я должен признать, что парень Теннекес довольно умен! :) - person Jindra Lacko; 31.07.2019