--- title: "trackViewer Vignette: plot interaction data" author: "Jianhong Ou, Lihua Julie Zhu" date: "`r BiocStyle::doc_date()`" package: "`r BiocStyle::pkg_ver('trackViewer')`" abstract: > Visualize chromatin interactions along with annotation as track layers. The interactions can be compared by back to back heatmaps. The interactions can be plot as heatmap and links. vignette: > %\VignetteIndexEntry{trackViewer Vignette: plot interaction data} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} output: html_document: theme: simplex toc: true toc_float: true toc_depth: 4 fig_caption: true --- ```{r, echo=FALSE, results="hide", warning=FALSE} suppressPackageStartupMessages({ library(trackViewer) library(TxDb.Hsapiens.UCSC.hg19.knownGene) library(org.Hs.eg.db) library(InteractionSet) }) knitr::opts_chunk$set(warning=FALSE, message=FALSE) ``` # Introduction The chromatin interactions is involved in precise quantitative and spatiotemporal control of gene expression. The development of high-throughput experimental techniques, such as HiC-seq, HiCAR-seq, and InTAC-seq, for analyzing both the higher-order structure of chromatin and the interactions between protein and their nearby and remote regulatory elements has been developed to reveal how gene expression is controlled in genome-wide. The interaction data will be saved in the format of paired genome coordinates with the interaction score. The popular format are `.validPairs`, `.hic`, and `.cool`. The `trackViewer` package can be used to handle those data to plot the heatmap or the interaction links. # Plot chromatin interactions data in linear layout Plot chromatin interactions tracks as heatmap. ```{r plotback2back} library(trackViewer) library(InteractionSet) gi <- readRDS(system.file("extdata", "nij.chr6.51120000.53200000.gi.rds", package="trackViewer")) head(gi) ## hicexplorer:hicConvertFormat tool can be used to convert other formats into GInteractions ## eg: hicConvertFormat -m mESC_rep.hic --inputFormat hic --outputFormat cool -o mESC_rep.mcool ## hicConvertFormat -m mESC_rep.mcool::resolutions/10000 --inputFormat cool --outputFormat ginteractions -o mESC_rep.ginteractions --resolutions 10000 ## please note that metadata:score is used for plot. gi$border_color <- NA ## highlight some regions gi$border_color[sample(seq_along(gi), 20)] <- sample(1:7, 20, replace=TRUE) ## The TADs will be drawn as lines at points start(first), center point, end(second). tads <- GInteractions( GRanges("chr6", IRanges(c(51130001, 51130001, 51450001, 52210001), width = 20000)), GRanges("chr6", IRanges(c(51530001, 52170001, 52210001, 53210001), width = 20000))) range <- GRanges("chr6", IRanges(51120000, 53200000)) heatmap <- gi2track(gi) ctcf <- readRDS(system.file("extdata", "ctcf.sample.rds", package="trackViewer")) viewTracks(trackList(ctcf, heatmap, heightDist = c(1, 3)), gr=range, autoOptimizeStyle = TRUE) ## add TAD information addInteractionAnnotation(tads, "heatmap", grid.lines, gp=gpar(col="#E69F00", lwd=3, lty=3)) ## add highlight interested regions gi_sub <- gi[order(gi$score, decreasing = TRUE)] gi_sub <- head(gi_sub[distance(first(gi_sub), second(gi_sub))>200000], n=5) start(regions(gi_sub)) <- start(regions(gi_sub))-40000 end(regions(gi_sub)) <- end(regions(gi_sub))+40000 addInteractionAnnotation(gi_sub, "heatmap", grid.polygon, gp=gpar(col="red", lwd=2, lty=2, fill=NA)) ## add interesting anchor at giving coordinate. addInteractionAnnotation(52900000, "heatmap", gp=gpar(col="blue", lwd=3)) addInteractionAnnotation(-52900000, "heatmap", gp=gpar(col="cyan", lwd=3, lty=4)) ## view the interaction data back to back. ## Please make sure the data are normalized. gi2 <- gi set.seed(123) gi2$score <- gi$score + rnorm(length(gi), sd = sd(gi$score)) back2back <- gi2track(gi, gi2) ## change the color setTrackStyleParam(back2back, "breaks", c(seq(from=0, to=50, by=10), 200)) setTrackStyleParam(back2back, "color", c("lightblue", "yellow", "red")) ## chang the lim of y-axis (by default, [0, 1]) setTrackStyleParam(back2back, "ylim", c(0, .5)) viewTracks(trackList(ctcf, back2back, heightDist=c(1, 5)), gr=range, autoOptimizeStyle = TRUE) addInteractionAnnotation(tads, "back2back", grid.lines, gp=gpar(col="cyan", lwd=3, lty=2)) addInteractionAnnotation(-52208000, "back2back", gp=gpar(col="blue", lwd=3), panel="top") addInteractionAnnotation(51508000, "back2back", gp=gpar(col="gray", lwd=3, lty=2), panel="bottom") ``` Plot chromatin interactions track as links. ```{r plotLinks, fig.width=6, fig.height=3} setTrackStyleParam(heatmap, "tracktype", "link") setTrackStyleParam(heatmap, "breaks", c(seq(from=0, to=50, by=10), 200)) setTrackStyleParam(heatmap, "color", c("lightblue", "yellow", "red")) ## filter the links to simulate the real data keep <- distance(heatmap$dat, heatmap$dat2) > 5e5 & heatmap$dat$score>20 heatmap$dat <- heatmap$dat[keep] heatmap$dat2 <- heatmap$dat2[keep] viewTracks(trackList(heatmap), gr=range, autoOptimizeStyle = TRUE) ``` Plot links with heatmap. ```{r plotHeatmapLink, fig.width=6, fig.height=4} heatmapLinks <- gi2track(gi, gi2[keep]) ## change the color setTrackStyleParam(heatmapLinks, "breaks", c(seq(from=0, to=50, by=10), 200)) setTrackStyleParam(heatmapLinks, "color", c("lightblue", "yellow", "red")) ## chang the lim of y-axis (by default, [0, 1]) setTrackStyleParam(heatmapLinks, "ylim", c(0, .5)) setTrackStyleParam(heatmapLinks, "tracktype", c("heatmap", "link")) setTrackStyleParam(heatmapLinks, "ysplit", 0.75) # heatmap space 75% of height viewTracks(trackList(heatmapLinks), gr=range, autoOptimizeStyle = TRUE) addInteractionAnnotation(tads, "heatmapLinks", grid.lines, gp=gpar(col="cyan", lwd=3, lty=2), panel='top') addInteractionAnnotation(-52208000, "heatmapLinks", gp=gpar(col="blue", lwd=3), panel="top") ``` To import interactions data from ".hic" (reference to the script of [hic-straw](https://github.com/aidenlab/straw) and the [documentation](https://www.cell.com/cms/10.1016/j.cels.2016.07.002/attachment/ce39448c-9a11-4b4e-a03f-45882b7b1d9d/mmc2.xlsx)). The function `importGInteractions` (trackViewer version>=1.27.6) can be used to import data from `.hic` format file. ```{r inportHic} hic <- system.file("extdata", "test_chr22.hic", package = "trackViewer", mustWork=TRUE) if(.Platform$OS.type!="windows"){ importGInteractions(file=hic, format="hic", ranges=GRanges("22", IRanges(50000000, 100000000)), out = "GInteractions") } ``` Another widely used genomic interaction data format is `.cool` files and the [cooler index](ftp://cooler.csail.mit.edu/coolers) contains analyzed HiC data for hg19 and mm9 from many different sources. Those files can be used as data resources for visualizations and annotations (see [ChIPpeakAnno::findEnhancers](https://rdrr.io/bioc/ChIPpeakAnno/man/findEnhancers.html)). The `importGInteractions` function can also be used to import data from `.cool` format (trackViewer version>=1.27.6). ```{r importCool, eval=FALSE} cool <- system.file("extdata", "test.mcool", package = "trackViewer", mustWork=TRUE) importGInteractions(file=cool, format="cool", resolution = 2, ranges=GRanges("chr1", IRanges(10, 28)), out = "GInteractions") ``` # Session Info ```{r sessionInfo, results='asis'} sessionInfo() ```