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:

Simple example

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")

animate elements with 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.

Click actions

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;")