Interactive plots in R using plotly

I found out about plotly a couple of months ago via R-bloggers:

I finally gave it a go when a friend asked me for help making a Gantt chart and I was impressed with plotly's interactivity and ease of use. Since I use scatter plots a lot, this post will be about making interactive scatter plots in R using plotly.

Six years ago I learned of rggobi and that was my means of creating interactive scatter plots. However, since switching from Windows to OS X, I couldn't get rggobi working on OS X. I settled with using R's identify() function to identify points and used different colours to highlight points of interest.

Creating interactive plots in R using plotly is incredibly simple; the syntax is similar to qplot() from the ggplot2 package. I'll use ExAC's functional gene constraint data to create a scatter plot; if you are interested in the data, check out ExAC's FAQ.

# download data

# always compress flat files
gzip fordist_cleaned_exac_r03_march16_z_pli_rec_null_data.txt

Now to create the plot.

# install if necessary

# load library

# store as data frame
df <- read.table("fordist_cleaned_exac_r03_march16_z_pli_rec_null_data.txt.gz",
                 header = TRUE,
                 sep = "\t",
                 stringsAsFactors = FALSE

# remove single outlier
no_ttn <- df[df$gene!='TTN',]

# plot
plot_ly(data = no_ttn, x = exp_lof, y = n_lof, mode = "markers", text = gene, color = pLI)

exp_count_lofExpected number of loss of function mutations (x-axis) versus actual number of loss of function mutations (y-axis) per gene.

The above plot doesn't show the interactivity but I uploaded the plot to RPubs and you can interact with it at If you hover over a specific point, you can find out the corresponding gene; you can also zoom into specific regions and pan around. You can find out more about plotly at their site.

Print Friendly, PDF & Email

Creative Commons License
This work is licensed under a Creative Commons
Attribution 4.0 International License

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.