# trackViewer Vignette: plot interaction data

#### Jianhong Ou, Lihua Julie Zhu

#### 17 May 2023

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.

# 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

Plot chromatin interactions tracks as heatmap.

    library(trackViewer)
    library(InteractionSet)
    gi <- readRDS(system.file("extdata", "nij.chr6.51120000.53200000.gi.rds", package="trackViewer"))
    head(gi)

    ## GInteractions object with 6 interactions and 1 metadata column:
    ##       seqnames1           ranges1     seqnames2           ranges2 |     score
    ##           <Rle>         <IRanges>         <Rle>         <IRanges> | <numeric>
    ##   [1]      chr6 51120000-51160000 ---      chr6 51120000-51160000 |   45.1227
    ##   [2]      chr6 51120000-51160000 ---      chr6 51160000-51200000 |   35.0006
    ##   [3]      chr6 51120000-51160000 ---      chr6 51200000-51240000 |   44.7322
    ##   [4]      chr6 51120000-51160000 ---      chr6 51240000-51280000 |   29.3507
    ##   [5]      chr6 51120000-51160000 ---      chr6 51280000-51320000 |   38.8417
    ##   [6]      chr6 51120000-51160000 ---      chr6 51320000-51360000 |   31.7063
    ##   -------
    ##   regions: 53 ranges and 0 metadata columns
    ##   seqinfo: 1 sequence from an unspecified genome; no seqlengths

    ## 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.
    range <- GRanges("chr6", IRanges(51120000, 53200000))
    tr <- gi2track(gi)
    ctcf <- readRDS(system.file("extdata", "ctcf.sample.rds", package="trackViewer"))
    #viewTracks(trackList(ctcf, tr, heightDist = c(1, 3)),
    #           gr=range, autoOptimizeStyle = TRUE)
    ## 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)

Plot chromatin interactions track as links.

    setTrackStyleParam(tr, "tracktype", "link")
    setTrackStyleParam(tr, "breaks",
                       c(seq(from=0, to=50, by=10), 200))
    setTrackStyleParam(tr, "color",
                       c("lightblue", "yellow", "red"))
    ## filter the links to simulate the real data
    keep <- distance(tr$dat, tr$dat2) > 5e5 & tr$dat$score>20
    tr$dat <- tr$dat[keep]
    tr$dat2 <- tr$dat2[keep]
    viewTracks(trackList(tr), gr=range, autoOptimizeStyle = TRUE)

To import interactions data from “.hic” (reference to the script of hic-straw and the documentation). The function `importGInteractions` (trackViewer version>=1.27.6) can be used to import data from `.hic` format file.

    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 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). The `importGInteractions` function can also be used to import data from `.cool` format (trackViewer version>=1.27.6).

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

Different from most of the available tools, plotGInteractions try to plot the data with the 2D structure. The nodes indicate the region with interactions and the edges indicates the interactions. The size of the nodes are relative to the width of the region. The features could be the enhancers, promoters or genes. The enhancer and promoter are shown as points with symbol 11 and 13.

    library(TxDb.Hsapiens.UCSC.hg19.knownGene)
    library(InteractionSet)
    gi <- readRDS(system.file("extdata", "gi.rds", package="trackViewer"))
    range <- GRanges("chr2", IRanges(234500000, 235000000))
    feature.gr <- suppressMessages(genes(TxDb.Hsapiens.UCSC.hg19.knownGene))
    feature.gr <- subsetByOverlaps(feature.gr, regions(gi))
    feature.gr$col <- sample(1:7, length(feature.gr), replace=TRUE)
    feature.gr$type <- sample(c("promoter", "enhancer", "gene"),
                              length(feature.gr), replace=TRUE,
                              prob=c(0.1, 0.2, 0.7))
    plotGInteractions(gi, range, feature.gr)

# Session Info

    sessionInfo()

R version 4.3.0 RC (2023-04-13 r84269 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows Server 2022 x64 (build 20348)

Matrix products: default

locale: [1] LC_COLLATE=C
[2] LC_CTYPE=English_United States.utf8
[3] LC_MONETARY=English_United States.utf8 [4] LC_NUMERIC=C
[5] LC_TIME=English_United States.utf8

time zone: America/New_York tzcode source: internal

attached base packages: [1] grid stats4 stats graphics grDevices utils datasets [8] methods base

other attached packages: [1] InteractionSet_1.28.0
[2] motifStack_1.44.1
[3] httr_1.4.6
[4] VariantAnnotation_1.46.0
[5] Rsamtools_2.16.0
[6] Biostrings_2.68.1
[7] XVector_0.40.0
[8] SummarizedExperiment_1.30.1
[9] MatrixGenerics_1.12.0
[10] matrixStats_0.63.0
[11] org.Hs.eg.db_3.17.0
[12] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2 [13] GenomicFeatures_1.52.0
[14] AnnotationDbi_1.62.1
[15] Biobase_2.60.0
[16] Gviz_1.44.0
[17] rtracklayer_1.60.0
[18] trackViewer_1.36.2
[19] GenomicRanges_1.52.0
[20] GenomeInfoDb_1.36.0
[21] IRanges_2.34.0
[22] S4Vectors_0.38.1
[23] BiocGenerics_0.46.0

loaded via a namespace (and not attached): [1] BiocIO_1.10.0 bitops_1.0-7
[3] filelock_1.0.2 R.oo_1.25.0
[5] tibble_3.2.1 graph_1.78.0
[7] XML_3.99-0.14 rpart_4.1.19
[9] DirichletMultinomial_1.42.0 lifecycle_1.0.3
[11] lattice_0.21-8 ensembldb_2.24.0
[13] MASS_7.3-60 backports_1.4.1
[15] magrittr_2.0.3 Hmisc_5.1-0
[17] sass_0.4.6 rmarkdown_2.21
[19] jquerylib_0.1.4 yaml_2.3.7
[21] plotrix_3.8-2 grImport2_0.2-0
[23] DBI_1.1.3 CNEr_1.36.0
[25] RColorBrewer_1.1-3 ade4_1.7-22
[27] zlibbioc_1.46.0 R.utils_2.12.2
[29] AnnotationFilter_1.24.0 biovizBase_1.48.0
[31] RCurl_1.98-1.12 nnet_7.3-19
[33] pracma_2.4.2 rappdirs_0.3.3
[35] GenomeInfoDbData_1.2.10 grImport_0.9-7
[37] seqLogo_1.66.0 BiocStyle_2.28.0
[39] annotate_1.78.0 codetools_0.2-19
[41] DelayedArray_0.26.2 xml2_1.3.4
[43] tidyselect_1.2.0 BiocFileCache_2.8.0
[45] base64enc_0.1-3 GenomicAlignments_1.36.0
[47] jsonlite_1.8.4 ellipsis_0.3.2
[49] Formula_1.2-5 tools_4.3.0
[51] progress_1.2.2 strawr_0.0.91
[53] TFMPvalue_0.0.9 Rcpp_1.0.10
[55] glue_1.6.2 gridExtra_2.3
[57] xfun_0.39 dplyr_1.1.2
[59] BiocManager_1.30.20 fastmap_1.1.1
[61] latticeExtra_0.6-30 rhdf5filters_1.12.1
[63] fansi_1.0.4 caTools_1.18.2
[65] digest_0.6.31 R6_2.5.1
[67] colorspace_2.1-0 Cairo_1.6-0
[69] GO.db_3.17.0 gtools_3.9.4
[71] poweRlaw_0.70.6 jpeg_0.1-10
[73] dichromat_2.0-0.1 biomaRt_2.56.0
[75] RSQLite_2.3.1 R.methodsS3_1.8.2
[77] utf8_1.2.3 generics_0.1.3
[79] data.table_1.14.8 prettyunits_1.1.1
[81] htmlwidgets_1.6.2 S4Arrays_1.0.4
[83] TFBSTools_1.38.0 pkgconfig_2.0.3
[85] gtable_0.3.3 blob_1.2.4
[87] htmltools_0.5.5 ProtGenerics_1.32.0
[89] scales_1.2.1 png_0.1-8
[91] knitr_1.42 rstudioapi_0.14
[93] tzdb_0.4.0 reshape2_1.4.4
[95] rjson_0.2.21 checkmate_2.2.0
[97] curl_5.0.0 cachem_1.0.8
[99] rhdf5_2.44.0 stringr_1.5.0
[101] parallel_4.3.0 foreign_0.8-84
[103] restfulr_0.0.15 pillar_1.9.0
[105] vctrs_0.6.2 dbplyr_2.3.2
[107] xtable_1.8-4 cluster_2.1.4
[109] htmlTable_2.4.1 Rgraphviz_2.44.0
[111] evaluate_0.21 readr_2.1.4
[113] cli_3.6.1 compiler_4.3.0
[115] rlang_1.1.1 crayon_1.5.2
[117] interp_1.1-4 plyr_1.8.8
[119] stringi_1.7.12 deldir_1.0-9
[121] BiocParallel_1.34.1 munsell_0.5.0
[123] lazyeval_0.2.2 Matrix_1.5-4
[125] BSgenome_1.68.0 hms_1.1.3
[127] bit64_4.0.5 ggplot2_3.4.2
[129] Rhdf5lib_1.22.0 KEGGREST_1.40.0
[131] highr_0.10 memoise_2.0.1
[133] bslib_0.4.2 bit_4.0.5