(Acest articol a fost publicat pentru prima dată pe klogrși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.
Problemă
O ggiraph zgârietor de cap de tip tooltip (și remedierea!)
Ne-am hotărât ggiraph ca pachetul nostru de vizualizare interactivă pentru un nou Shiny bord. Scopul a fost simplu: capturați valoarea axei Y, grupată după axa X pentru a fi afișată într-un sfat explicativ atunci când un utilizator trece cu mouse-ul peste un element. am folosit plotly înainte și are un argument la îndemână „y unificat” care face acest lucru perfect (a se vedea referința plotly). Scropul? ggiraph nu ofera aceasta optiune.
Soluția: această mică problemă este acum rezolvată! Scriu această postare pe blog pentru a consolida lecția pentru mine și, sper, să le salvez pe alții durerea de cap dacă se confruntă cu aceeași problemă. Să începem cu configurarea.
# Load packages
library(dplyr)
library(lubridate)
library(stringr)
library(patchwork)
library(glue)
library(ggplot2)
library(ggiraph)
# Set ggplot theme and default palette
theme_set(theme_minimal())
options(ggplot2.discrete.fill="viridis")
# Promise data
data("lakers")
Mai jos sunt rezumate datele și folosesc una dintre funcțiile mele preferate stringr::str_flatten_comma() pentru a crea indicația „y unificat” alături de câțiva prieteni în glue & str_replace_all pentru cazul meu de utilizare.
# Summarise data ppp_top_3 <- lakers |> filter(period != 5) |> group_by(period, player) |> summarise(total_points = sum(points), .groups = "drop_last") |> slice_max(n = 3, order_by = total_points) |> # Creating tooltip, adding
to neatly format tooltip mutate(tooltip = glue( "Total Points
", str_flatten_comma(glue(" - {player} {total_points}")) ) |> str_replace_all(",", ",
")) |> ungroup()
Înainte de a putea vedea rezultatele, haideți să codificăm parcelele. Pentru cei familiarizați cu ggplot2 vei putea observa cele câteva diferențe. Cred că ggiraph's pagina de pornire oferă o imagine de ansamblu clară, scurtă și simplă a diferențelor.
p <- ppp_top_3 |>
ggplot(aes(x = period, y = total_points, fill = player)) +
geom_col_interactive(position = position_dodge2()) +
labs(title = "Top 3 scoring Lakers players per period (2008-2009 Season)",
subtitle = "No Tooltip",
x = "Period",
y = "") +
theme(plot.title.position = "plot",
legend.position = "right",
legend.title = element_blank())
p_tooltip <- ppp_top_3 |>
ggplot(aes(x = period,
y = total_points,
fill = player,
tooltip = tooltip,
data_id = period)) +
geom_col_interactive(position = position_dodge2()) +
labs(subtitle = "With Tooltip",
x = "Period",
y = "") +
theme(plot.title.position = "plot",
legend.position = "right",
legend.title = element_blank())
plots <- p + p_tooltip + plot_layout(ncol = 2,
axes = "collect",
guides = "collect")
Încearcă-l!
girafe(
ggobj = plots,
options = list(
opts_hover_inv(css = "opacity:0.2"),
opts_toolbar(saveaspng = FALSE),
opts_zoom(max = 1),
opts_tooltip(
opacity = 0.8,
use_fill = TRUE,
use_stroke = FALSE,
css = "padding:5pt;color:white"
),
opts_selection(type = "none", only_shiny = FALSE),
opts_hover(css = girafe_css(
css = glue::glue("transition: all 0.5s ease;stroke: black; stroke-width: 1px;"),
text = glue::glue("fill-opacity:1;")
))
)
)
Ar putea chiar să funcționeze cu metoda de a vă crea sfatul instrument în cadrul de date înainte de timp plotly și vă oferă mai multă flexibilitate în proiectare.
Mulțumiri
r-bloggers.com pentru acoperire, platformă și conținut
Pachetele și întreținerii pachetelor:
- dplyr | Hadley Wickham
- lubrifiat | Vitalie Spinu
- stringr | Hadley Wickham
- mozaic | Thomas Lin Pedersen
- lipici | Jennifer Bryan
- ggplot2 | Thomas Lin Pedersen
- ggiraph | David Gohel
