在 ggplotly/geom_sf() 中自定义 Hoverinfo
Customize Hoverinfo in ggplotly/geom_sf()
问题
我正在分析瑞士的雪崩事故,我用 ggplotly
和 geom_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')
问题
我正在分析瑞士的雪崩事故,我用 ggplotly
和 geom_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')