The ggiraph package let R users to make ggplot interactive. The package is an htmlwidget. Below an example:
It extends ggplot2 with new geom
functions:
Three arguments let you add interactivity:
tooltip
: column of dataset that contains tooltips to be displayed when mouse is over elements.onclick
: column of dataset that contains javascript function to be executed when elements are clicked.data_id
: column of dataset that contains id to be associated with elements.library(ggiraph)
dataset <- mtcars
head(dataset)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
dataset$tooltip <- row.names(dataset)
# geom_point_interactive example
gg_point_1 <- ggplot(dataset, aes(x = disp, y = qsec,
color = wt, tooltip = tooltip ) ) +
geom_point_interactive(size=3) + gg_th
# htmlwidget call
ggiraph(code = {print(gg_point_1)}, width = "400px", height = "400px")
data-id
When graphical elements are associated with data_id
attributes, a css string modifies rendering when mouse is over. Default value is hover_css = "fill:orange;"
.
dataset$data_id <- tolower(row.names(dataset))
# geom_point_interactive example
gg_point_2 <- ggplot(dataset, aes(x = disp, y = qsec,
color = wt, tooltip = tooltip, data_id = data_id ) ) +
geom_point_interactive(size=4) + gg_th
# htmlwidget call
ggiraph(code = {print(gg_point_2)},
hover_css = "fill:orange;r:6px;cursor:pointer;")
data-id
can also be reused within a shiny application.
crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)
crimes$onclick <- sprintf(
"window.open(\"%s%s\")",
"http://en.wikipedia.org/wiki/",
as.character(crimes$state)
)
gg_point_3 <- ggplot(crimes, aes(x = Murder, y = Assault, size = UrbanPop, colour = Rape )) +
geom_point_interactive(
aes( data_id = state, tooltip = state, onclick = onclick ) ) +
scale_colour_gradient(low = "#999999", high = "#FF3333") + gg_th
ggiraph(code = print(gg_point_3),
hover_css = "fill-opacity:.3;cursor:pointer;")