# Interactive Q-Q Plots in R using Plotly

### Introduction

In a recent blog post, I introduced the new R package, manhattanly, which creates interactive manhattan plots using the plotly.js engine.

In this post, I describe how to create interactive Q-Q plots using the manhattanly package. Q-Q plots tell us about the distributional assumptions of the observed test statistics and are common visualisation tools in statistical analyses.

Visit the package website for full details and example usage.

### Quick Start

The following three lines of code will produce the Q-Q plot below

Notice that we have added two annotations (the SNP and nearest GENE), that are revealed when hovering the mouse over a point. This feature of interactive Q-Q plots adds a great deal of information to the plot without cluttering it with text.

### The Data

Inspired by the heatmaply package by Tal Galili, we split the tasks into data pre-processing and plot rendering. Therefore, we can use the `manhattanly::qqr` function to get the data used to produce a Q-Q plot. This allows flexibility in the rendering of the plot, since any graphics package, such as `plot` in base R can make used to create the plot.

The plot data is derived using the `manhattanly::qqr` function:

``` ## List of 6 ## \$ data :'data.frame': 14412 obs. of 3 variables: ## ..\$ P : num [1:14412] 6.75e-10 3.41e-09 3.95e-09 4.71e-09 5.02e-09 ... ## ..\$ OBSERVED: num [1:14412] 9.17 8.47 8.4 8.33 8.3 ... ## ..\$ EXPECTED: num [1:14412] 4.46 3.98 3.76 3.61 3.51 ... ## \$ pName : chr "P" ## \$ snpName : logi NA ## \$ geneName : logi NA ## \$ annotation1Name: logi NA ## \$ annotation2Name: logi NA ## - attr(*, "class")= chr "qqr" ```

``` ## P OBSERVED EXPECTED ## 4346 6.75010e-10 9.170690 4.459754 ## 4347 3.41101e-09 8.467117 3.982633 ## 4344 3.95101e-09 8.403292 3.760784 ## 4338 4.70701e-09 8.327255 3.614656 ## 4342 5.02201e-09 8.299122 3.505512 ## 4341 6.22801e-09 8.205651 3.418362 ```

This `qqrObject` which is of class `qqr` can also be passed to the `manhattanly::qqly` function to produce the inteactive Q-Q plot above:

### Related Work

This work is based on the qqman package by Stephen Turner. It produces similar manhattan and Q-Q plots as the `qqman::manhattan` and `qqman::qq` functions; the main difference here is being able to interact with the plot, including extra annotation information and seamless integration with HTML. ### Sahir Bhatnagar

Data Science blogger