7 Useful Interactive Charts in R

[This article was first published on R Statistics Blog, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.


An interactive chart gives a lot of freedom to both presenter and the audience. Interactive graphs allow you to share complex ideas in a more engaging way. Using interactive charts allows users to perform actions like choosing a variable, zoom-in, zoom-out, hover to get tooltip, take a snapshot, and more. In this section, I will walk you through some of the packages and functions which we can use to plot different types of interactive plots.

Interactive dendrogram with collapsible tree

A collapsible dendrogram is an interactive tree-like chart where when you can click on a node to either reveal the following branch or collapse the current node. Click the button to see an example.

You can use the collapsibleTree package to generate hierarchical visualization from a data frame object without worrying about the nested lists or JSON objects. Here we will use geography data from data.world.


geo <- read.csv("M:/DSB/datasets/Machine-Learning/Geography.csv")
dendo  <- collapsibleTree(
    hierarchy = c("region", "sub_region"),
    width = 700,
    zoomable = TRUE

Interactive time series charts

I find interactive time series charts of particular interest. The Time series graphs provide information about the evolution of one or multiple variables through time. Here we will use the dygraphs package to generate impressive time series charts.

chart <- dygraph(AirPassengers)

Encourage you to select a section of the chart and zoom in

Due to some technical challenges for some charts, I am sharing video clippings for now.

Interactive scatter plot

The best way to build an interactive scatter plot from plotly in R is through the use of plot_ly function. Here we are using iris data for creating a scatter plot between Sepal.Length and Petal.width variables.

fig <- plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length)

Interactive area plot

An area chart is very close to a line plot. We can build an interactive area plot in plotly using two different functions, plot_ly() and ggplotyly(). Here we will build an area chart showing the density of AirPassengers data using plot_ly() function.

density <- density(AirPassengers)
fig <- plot_ly(x = ~density$x, y = ~density$y ,
               type = 'scatter', mode = 'lines', fill = "tozeroy)
Interactive Area Plot Using plotly

Once again, we will draw an interactive area chart using the ggplotly() function from the plotly package. The ggplotly() function is a special one as it turns a ggplot2 design version interactive. So if you have a ggplot2 graph already created, the ggplotly() can be very handy. Now, we will first create a static area chart using ggplot function and then will add interactive features to it using ggplotly().

fig <- ggplot(diamonds, aes(x=carat)) +
  geom_area(stat = "bin") +

# Turn figure interactive with ggplotly
fig <- ggplotly(fig)
Interactive Area Plot Converted From ggplot2

Interactive bubble plot

Again, the easiest way to draw an interactive bubble plot would be first to use geom_point() function from ggplot2 package to draw the chart and then render the graph to get the interactive version of it.


mtcars$cyl <- as.factor(mtcars$cyl)
fig  <- ggplot(mtcars ,aes(mpg, wt, size = disp, color=cyl)) +
  geom_point() +

fig <- ggplotly(fig)
Interactive Bubble Plot

Interactive heatmaps

Heatmaps are a great visualization tool to show the magnitude of information. The graph uses colors to depict the information stored in a matrix. Here we will see how we can use plotly and d3heatmap package to generate heatmaps. The d3heatmap package creates a D3.js-based heatmap widget.

fig <- d3heatmap(mtcars, scale = "column", colors = "Greens")
Example Interactive Heatmap Using d3heatmap

To generate heatmap with plotly is simple. Generate heatmap using ggplot2 and render that to the interactive version using ggplotly function. Here we first generate the correlation matrix using cor function. We then use the melt() function from the reshape2 package to bring the correlation matrix into the desired format. It’s a little tricky, but worth the shot.

matrix <- cor(mtcars)
melted_cor_mat <- melt(matrix)

fig <- ggplot(melted_cor_mat,
              aes(x=Var1, y=Var2, fill=value))+

fig <- ggplotly(fig + theme(legend.position = "none"))


Interactive network graphs

Building a network graph is kind of complicated. The primary reason for complexity comes from the fact that there can be many different input formats. There are also other parameters that you should be aware of, like whether the network you are trying to build is weighted or unweighted, and if it is directed or undirected. We will have a dedicated article on the input formats and talk more about it. Here we will use one of the rather simple forms of data where we have just two columns – Source and Target. Now to build the network graph, we will use the simpleNetwork() function from the networkD3 package in R.

network <- read.csv("M:/DSB/datasets/Machine-Learning/network_dummy.csv")

# create the network object
# Plot
p <- simpleNetwork(network, height="200px", width="200px",        
                   Source = 1,
                   Target = 2,
                   fontSize = 18,                    
                   linkColour = "#777",   
                   nodeColour = "#F47E5E",    
                   opacity = 0.7,             
                   zoom = T)
Interactive Network Plot

We hope you learned something new with this article. If so, please leave a comment, like or share. You can also let us know what topics you would like us to write and share.

To leave a comment for the author, please follow the link and comment on their blog: R Statistics Blog.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)