【问题标题】:How to change the attribute table popup/hover text in a plotly map如何更改绘图地图中的属性表弹出/悬停文本
【发布时间】:2019-05-30 05:54:11
【问题描述】:

我正在尝试从 shapefile 制作交互式 地图,并带有显示一些信息的悬停/工具提示。

目前,当我将鼠标悬停在地图上的某个区域上时,它只提供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)Service Pack 1

packageVersion("情节")
[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")

【问题讨论】:

    标签: plotly r ggplot2 hover tooltip r-plotly


    【解决方案1】:

    我认为,首先,您的DATA 对象应该是data.frame(从您的代码中我得到一个列表,ggplot() 函数不接受该列表)。

    然后,尝试将HOVER 列映射到geom_map() 中的text 美学而不是ggplot()

    另外,在您的 DATA data.frame 中,将列 NUTS1 重命名为 id,以便它与使用 NUTS1 data.frame 获得的 id 列名称 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
    


    请注意,使用mapview package 制作交互式地图更简单。对于您的特定问题,请查看mapview popups。这是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")))
    

    要填写VAR1,您需要关注this example并在mapview中调用zcol = "VAR1",例如:

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

    【讨论】:

      猜你喜欢
      • 2020-11-05
      • 2017-12-17
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多