在 ggplotly/geom_sf() 中自定义 Hoverinfo

Customize Hoverinfo in ggplotly/geom_sf()

问题

我正在分析瑞士的雪崩事故,我用 ggplotlygeom_sf 创建了一个地图。我现在想调整图中点的悬停信息,以便它还显示变量 year & place 包含在数据框,但未包含在情节的 aes() 中。

数据

head(df)

LV03_E LV03_N deaths caughts year canton                            place
1 602380 131230      2       2 1995     VS Chetseron / Vallon de l`Ertentse
2 586070 104160      1       1 1995     VS          Verbier / Les Ruinettes
3 731720 155110      1       4 1996     GR                    Chilchalphorn
4 575300 141010      1       2 1996     VD                 La L\xe9cherette
5 661640 202180      1       4 1996     OW  Pilatus / Matthorn / Ruessiflue
6 820490 206020      1       1 1996     GR          Alp Trida / Greitspitz 

情节

ggplotly(
  ggplot() +
    geom_sf(data = swiss_cantons, fill = NA) +
    geom_point(data = df_avalanches_places, 
               mapping = aes(x = LV03_E, y=LV03_N, size = deaths), colour = "lightblue", alpha = 0.7) +
    theme_minimal())

预期结果

悬停信息的格式应为:

地点

死亡人数
捕获

我试过的

我试图通过在 aes() 中包含所需变量然后在 ggplotly() 中使用 tooltip 来解决问题,但我收到一条错误消息。

ggplotly(
  ggplot() +
    geom_sf(data = swiss_cantons, fill = NA) +
    geom_point(data = df_avalanches_places, 
               mapping = aes(x = LV03_E, y = LV03_N, size = deaths, place = place, year = year, caught = caughts), colour = "lightblue", alpha = 0.7) +
    theme_minimal(), tooltip = c('year', 'place', 'size', 'caught'))


Error in gsub("\n", br(), a, fixed = TRUE) : 
  input string 4 is invalid in this locale
In addition: Warning message:
Ignoring unknown aesthetics: place, year, caught 

如何正确调整hoverinfo?

您可以创建一个名为 tooltip 的新列来编写要显示的文本,然后将此列映射到 aestetic:

library(ggplot2)
library(plotly)

plt <-
  iris %>%
  mutate(tooltip = paste(Species, "Petal Length:", Petal.Length, sep = "\n")) %>%
  ggplot(aes(Sepal.Length, Sepal.Width, tooltip = tooltip)) +
  geom_point()

ggplotly(plt, tooltip = "tooltip")

我认为这不是空间地图的问题,所以我创建了这个更小的可重现示例。

默认情况下,plolty 工具提示对应于情节的实际美学。考虑用您要显示的元素创建一个新变量。

library(dplyr)
library(ggplot2)
library(plotly)
library(glue)

plot <- mtcars %>%
  mutate(
    model = rownames(.),
    label = glue::glue('{model} \nMPG:{mpg} \nWT: {wt}' )
    ) %>%
  ggplot(aes(x = wt, y = mpg, text = label)) +
  geom_point()
  
ggplotly(plot, tooltip = 'text')