Как изменить всплывающий / всплывающий текст таблицы атрибутов на графике - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать интерактивную карту из шейп-файла с всплывающей подсказкой / всплывающей подсказкой, которая отображает некоторую информацию.

В настоящее время, когда я наводю курсор мыши на область на карте, это толькодает информацию для VAR1 (A, B, C, D), а не информацию в DATA$HOVER

Карта (называемая NUTS1 в моем коде) получена из: http://geoportal.statistics.gov.uk/datasets/nuts-level-1-january-2018-full-clipped-boundaries-in-the-united-kingdom)

У меня нет доступа к SF.

sessionInfo ()
R версия 3.4.0 Исправлена ​​(2017-05-31 r72750)
Платформа: x86_64-w64-mingw32 / x64 (64-разрядная версия)
Работает в: Windows 7 x64 (сборка 7601) с пакетом обновления 1

packageVersion ("plotly")
[1] '4.7.1'

packageVersion ("ggplot2")
[1] '2.2.1'

DATA <- c(NA)
DATA$NUTS1 <- c("UKC","UKD","UKE","UKF","UKG","UKH","UKI","UKJ","UKK","UKL","UKM",
"UKN")
DATA$VAR1  <- c("D","D","A","D","A","C","B","C","B","C","B","A")
DATA$VAR2  <- c("8","4","1","10","4","7","5","1","8","6","3","8")
DATA$VAR3  <- c("1","2","3","4","5","6","7","8","9","10","11","12")
NUTS1 <- readOGR(dsn = 
          "NUTS_Level_1_January_2018_Full_Clipped_Boundaries_in_the_United_Kingdom",
                 layer = 
          "NUTS_Level_1_January_2018_Full_Clipped_Boundaries_in_the_United_Kingdom")
NUTS1 <- fortify(NUTS1, region = "nuts118cd")
DATA$HOVER <- with(DATA, paste(NUTS1, "<br>", VAR1, "<br>", VAR2, "<br>", VAR3))

p <- ggplot(data = DATA, text = HOVER) + 
  geom_map(data = DATA, aes(map_id = NUTS1, fill = VAR1), map = NUTS1) + 
  expand_limits(x = NUTS1$long, y = NUTS1$lat)

p <- ggplotly(p, tooltip = "text")

1 Ответ

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

Я думаю, прежде всего, ваш DATA объект должен быть data.frame (из вашего кода я получаю список, который не принимается функцией ggplot()).

Затем попытайтесь отобразить столбец HOVER в эстетику text в geom_map(), а не в ggplot().

Кроме того, в вашем DATA data.frame переименуйте столбец NUTS1 в id, чтобы он совпадал с именем столбца id из NUTS1 data.frame, полученного с помощью fortify(вы видите, что это важно из примеров, найденных в help(geom_map)).

library(ggplot2)
library(plotly)
library(rgdal)

DATA <- data.frame(id = c("UKC","UKD","UKE","UKF","UKG","UKH","UKI","UKJ","UKK","UKL","UKM","UKN"),
                   VAR1 = c("D","D","A","D","A","C","B","C","B","C","B","A"),
                   VAR2 = c("8","4","1","10","4","7","5","1","8","6","3","8"),
                   VAR3 = 1:12)
DATA$HOVER <- with(DATA, paste(id, "<br>", VAR1, "<br>", VAR2, "<br>", VAR3))

NUTS1 <- readOGR(dsn = "NUTS_Level_1_January_2018_Full_Clipped_Boundaries_in_the_United_Kingdom",
                 layer = "NUTS_Level_1_January_2018_Full_Clipped_Boundaries_in_the_United_Kingdom")
NUTS1 <- fortify(NUTS1, region = "nuts118cd")

p <- ggplot(data = DATA) + 
  geom_map(aes(map_id = id, fill = VAR1, text = HOVER), map = NUTS1) +
  expand_limits(x = NUTS1$long, y = NUTS1$lat)

p2 <- ggplotly(p)
p2

enter image description here


Обратите внимание, что интерактивные картысделать проще с пакетом mapview .Для вашей конкретной проблемы, проверьте всплывающих окон mapview .Вот попытка с mapview:

library(mapview)
library(rgdal)

NUTS1 <- readOGR(dsn = "NUTS_Level_1_January_2018_Full_Clipped_Boundaries_in_the_United_Kingdom",
                 layer = "NUTS_Level_1_January_2018_Full_Clipped_Boundaries_in_the_United_Kingdom")

DATA <- data.frame(NUTS1 = c("UKC","UKD","UKE","UKF","UKG","UKH","UKI","UKJ","UKK","UKL","UKM","UKN"),
                   VAR1 = c("D","D","A","D","A","C","B","C","B","C","B","A"),
                   VAR2 = c("8","4","1","10","4","7","5","1","8","6","3","8"),
                   VAR3 = 1:12)
# merge DATA with the SpatialPolygonsDataFrame NUTS1
nuts <- merge(x = NUTS1, y = DATA, by.x = "nuts118cd", by.y = "NUTS1")

mapview(nuts, popup = popupTable(nuts, zcol = c("nuts118cd", "VAR1", "VAR2", "VAR3")))

enter image description here

Чтобы заполнить VAR1, вам нужно следовать этому примеру и звоните zcol = "VAR1" в mapview, например:

mapview(nuts, zcol = "VAR1", 
        popup = popupTable(nuts, zcol = c("nuts118cd", "VAR1", "VAR2", "VAR3")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...