library(flexdashboard) library(shiny) library(TFutils) library(GenomicRanges) library(plotly) library(Gviz) library(ggplot2) library(EnsDb.Hsapiens.v75) library(GenomeInfoDb) library(utils) library(data.table) library(mongolite) library(DT) library(utils) library(gggmvis)
Visualization can often be the key to discovering patterns and distilling the massive amount of biological information that rise from the rapid growth of high throughput sequencing experiments. The R package visByGene is a preliminary attack on synthesizing available experiment and annotation data to understand mechanisms of disease using R/Bioconductor (www.bioconductor.org) interfaces to high-resolution genomic data assembled in MongoDB, Bioconductor annotation packages, and tabix indexed files. We developed visByGene to utilize R/Bioconductor packages such as ggplot2, plotly, ensembldb, AnnotationHub, mongolite, GenomicScores, and others to provide users with specialized interactive shiny based visualizations. These visualizations allow users to easily query hundreds of Gb of data in thousands of data resources such as eQTL studies, DNAse I hypersensitivity regions, and transcription factor binding site data and visualize the results as annotated gene models. These queries are gene based with a scalable window parameter. Additional annotations can be overlayed onto the gene model by selecting new experimental results, and the combined results can be easily downloaded as a csv for later use. Further work is being done to utilize the hover text and plot linking features of plotly graphics to enrich the user experience.
Effective visualization tools coupled with computational and statistical methodologies helps researchers, clinicians to extract useful knowledge from genomic data.
In our work, we have assembled hundreds of gigabytes of data from public genomic experiments and made a unified framework for querying this data to produce interactive web based graphics in a software package we call "visByGene".
When a user selects a gene and data source, the software queries our data resources, plots the gene model, and adds the annotation data.
Such tools help unravel rare genomic events essential to understanding the etiology of complex diseases and developing innovative technical clinical solutions.
# load data load("/Users/reshg/Documents/GITHUB/visByGene/data/encode690.rda") load("/Users/reshg/Documents/GITHUB/visByGene/data/named_tf.rda") load("/Users/reshg/Documents/GITHUB/visByGene/data/named_metadata_tf.rda") eQTLdata = read.csv("~/Documents/GITHUB/visByGene/inst/shinyApps/eQTL.csv") fpdata = read.csv("~/Documents/GITHUB/visByGene/inst/shinyApps/FP.csv") hsdata = read.csv("~/Documents/GITHUB/visByGene/inst/shinyApps/HS.csv") tfdata = read.csv("~/Documents/GITHUB/visByGene/inst/shinyApps/TF.csv")
######################## # Functions ######################## ggvisForSymbol = function (sym, resource = EnsDb.Hsapiens.v79::EnsDb.Hsapiens.v79, columnsKept = c("gene_id", "tx_id"), yval = 1, arrmm=1.5, viewtype="transcripts", ...) { exs = GenomicFeatures::exons(resource, filter = SymbolFilter(sym), columns = columnsKept, ...) if (viewtype == "exons") exs = unique(exs) rd = reduce(exs) fo = findOverlaps(rd, exs) gr = split(subjectHits(fo), queryHits(fo)) pp = function(n) (seq_len(n)-1)/n st = start(exs) en = end(exs) if (viewtype == "exons") { ys = lapply(gr, function(x) pp(length(x))) yvs = unlist(ys) #1+(0:(nel-1))/nel } else if (viewtype == "transcripts") { tnms = exs$tx_id ft = factor(tnms) yvs = (as.numeric(ft)-1)/length(levels(ft)) } else stop("viewtype not %in% c('exons', 'transcripts')") newdf = data.frame(st, en, yv = yvs, sym = sym) rng = range(exs) df = data.frame(range = c(start(rng), end(rng)), yval = rep(yval,2)) strn = as.character(strand(exs)[1]) ardir = ifelse(strn=="+", "last", "first") pl = ggplot(df, aes(x = range, y = yval)) + geom_segment(aes(x = st, y = yv, xend = en, yend = yv, colour = sym), data = newdf, arrow=arrow(ends=ardir, length=unit(arrmm, "mm"))) #ggplotly(pl) pl + xlab(as.character(seqnames(exs)[1])) } plotlyForSymbol = function (sym, resource = EnsDb.Hsapiens.v79::EnsDb.Hsapiens.v79, columnsKept = c("gene_id", "tx_id"), yval = 1, arrmm=1.5, viewtype="transcripts", ...) { require(plotly) exs = GenomicFeatures::exons(resource, filter = SymbolFilter(sym), columns = columnsKept, ...) if (viewtype == "exons") exs = unique(exs) rd = reduce(exs) fo = findOverlaps(rd, exs) gr = split(subjectHits(fo), queryHits(fo)) pp = function(n) (seq_len(n)-1)/n st = start(exs) en = end(exs) if (viewtype == "exons") { ys = lapply(gr, function(x) pp(length(x))) yvs = unlist(ys) #1+(0:(nel-1))/nel } else if (viewtype == "transcripts") { tnms = exs$tx_id ft = factor(tnms) yvs = (as.numeric(ft)-1)/length(levels(ft)) } else stop("viewtype not %in% c('exons', 'transcripts')") newdf = data.frame(st, en, yv = yvs, sym = sym) rng = range(exs) df = data.frame(range = c(start(rng), end(rng)), yval = rep(yval,2)) strn = as.character(strand(exs)[1]) ardir = ifelse(strn=="+", "start", "end") pl = plot_ly(df, x =~ range, y =~ yval, type = 'scatter', mode = 'markers',showlegend = FALSE) %>% add_segments(x=newdf$st,xend=newdf$en,y=newdf$yv,yend=newdf$yv, text=paste(names(exs),"start:",newdf$st,"end:",newdf$en),hoverinfo='text', showlegend = FALSE)%>% add_annotations(x = newdf$st, y = newdf$yv, showarrow = TRUE, arrowhead = 1, arrowsize=1, axref="x", ayref="y", ax=newdf$en, ay=newdf$yv, arrowside=ardir, text=rep("",nrow(newdf)),arrowcolor="blue",yanchor="top" )%>% layout( xaxis = list(title = as.character(seqnames(exs)[1]))) pl } edb = EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75 orm = GRanges("chr17", IRanges(38077296, 38083884), strand="-") # ORMDL3 l1 = enc690ByFactor("CEBPB") dd = lapply(l1, function(x) subsetByOverlaps(x, orm+10000)) lens = sapply(dd,length) cls = sapply(dd, function(x) metadata(x)$cell) cls = rep(cls, lens) ee = do.call(rbind, lapply(dd, as.data.frame)) ee$cell = factor(as.character(cls)) ee$yval = 1+(as.numeric(factor(as.character(cls)))-1)/length(unique(cls)) cellinfo=data.frame(cell=c("HepG2","A549","HeLa-S3","IMR90"), info=c("Human liver cancer cell line","Human lung cancer cell line", "Human cervical cancer cell line","Normal lung fibroblast"),stringsAsFactors=FALSE) ee=merge(ee,cellinfo) visByGene <- function(myeqtl, myfp, mytf, mysymbol){ require(Gviz) require(TFutils) require(GenomicRanges) require(mongolite) mygene = genemodForGviz(sym=mysymbol,resource= EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75) mychr = seqnames(mygene)[1] mygeneRange = GRanges(mychr, IRanges(start=min(start(mygene)),end=max(end(mygene)))) mystart = min(start(mygene)) myend = max(end(mygene)) gtrack <- GenomeAxisTrack() itrack <- IdeogramTrack(genome = "hg19", chromosome = mychr) biomtrack <- BiomartGeneRegionTrack(genome = "hg19", chromosome = mychr, symbol=mysymbol, name=mysymbol) #baseplot = plotTracks(list(gtrack,itrack,biomtrack), sizes=c(1,1,3)) #FOR TF data tfcoll = mongo(url="mongodb://172.27.105.48", collection = mytf, db = "txregnet" ) mytfquery=paste0('{', '"chr":"',mychr,'",', '"start" : {"$gte":',mystart,'},', '"end" : {"$lte":',myend,'}}') restf=tfcoll$find(mytfquery) mysubtf=GRanges(restf$chr, IRanges(restf$start, restf$end), mcols=restf) #tf = Rsamtools::TabixFile(paste0("/udd/reshg/tbifiles/tabix_all_tf_new/",mytf,".02_sort.bed.gz")) #mysub = importFIMO(tf, mygeneRange) genome(mysubtf)="hg19" atrack1 <- AnnotationTrack(mysubtf, name = mytf) dtrack1=DataTrack(data=mysubtf$mcols.pvalue, start=start(mysubtf), end=end(mysubtf), chromosome = mychr, genome = "hg19", name = "TF", background.panel = "#FFFEDB", background.title = "darkblue") #tfp = plotTracks(dtrack) # FOR FP data fpcoll = mongo(url="mongodb://172.27.105.48", collection = myfp, db = "txregnet" ) myfpquery=paste0('{', '"chr":"',mychr,'",', '"start" : {"$gte":',mystart,'},', '"end" : {"$lte":',myend,'}}') resfp=fpcoll$find(myfpquery) mysubfp=GRanges(resfp$chr, IRanges(resfp$start, resfp$end), mcols=resfp) #tf = Rsamtools::TabixFile(paste0("/udd/reshg/tbifiles/tabix_all_tf_new/",mytf,".02_sort.bed.gz")) #mysub = importFIMO(tf, mygeneRange) genome(mysubfp)="hg19" atrack1 <- AnnotationTrack(mysubfp, name = myfp) dtrack2=DataTrack(data=mysubfp$mcols.stat, start=start(mysubfp), end=end(mysubfp), chromosome = mychr, genome = "hg19", name = "FP") #fpp = plotTracks(dtrack) # FOR eQTL data eqtlcoll = mongo(url="mongodb://172.27.105.48", collection = myeqtl, db = "txregnet" ) mychr2=as.numeric(x=sub(mychr,pattern="chr",replacement="")) myeqtlquery=paste0('{', '"chr":',mychr2,',', '"snp_pos" : {"$gte":',mystart,'},', '"snp_pos" : {"$lte":',myend,'}}') reseqtl=eqtlcoll$find(myeqtlquery) mysubeqtl=GRanges(reseqtl$chr, IRanges(reseqtl$snp_pos, width = 1), mcols=reseqtl) #tf = Rsamtools::TabixFile(paste0("/udd/reshg/tbifiles/tabix_all_tf_new/",mytf,".02_sort.bed.gz")) #mysub = importFIMO(tf, mygeneRange) genome(mysubeqtl)="hg19" atrack1 <- AnnotationTrack(mysubeqtl, name = myeqtl) dtrack3=DataTrack(data=mysubeqtl$mcols.qvalue, start=start(mysubeqtl), end=end(mysubeqtl), chromosome = mychr, genome = "hg19", name = "eQTL", background.panel = "#FFFEDB", background.title = "darkblue") #eqtlp = plotTracks(dtrack) visplot = plotTracks(list(gtrack,biomtrack,dtrack1,dtrack2,dtrack3,itrack), sizes=c(3,7,5,5,5,10)) } plotTF <- function(mytf, mysymbol){ require(Gviz) require(TFutils) require(GenomicRanges) require(mongolite) mygene = genemodForGviz(sym=mysymbol,resource= EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75) mychr = seqnames(mygene)[1] mygeneRange = GRanges(mychr, IRanges(start=min(start(mygene)),end=max(end(mygene)))) mystart = min(start(mygene)) myend = max(end(mygene)) tfcoll = mongo(url="mongodb://172.27.105.48", collection = mytf, db = "txregnet" ) myquery=paste0('{', '"chr":"',mychr,'",', '"start" : {"$gte":',mystart,'},', '"end" : {"$lte":',myend,'}}') res=tfcoll$find(myquery) mysub=GRanges(res$chr, IRanges(res$start, res$end), mcols=res) #tf = Rsamtools::TabixFile(paste0("/udd/reshg/tbifiles/tabix_all_tf_new/",mytf,".02_sort.bed.gz")) #mysub = importFIMO(tf, mygeneRange) genome(mysub)="hg19" atrack1 <- AnnotationTrack(mysub, name = mytf) gtrack <- GenomeAxisTrack() itrack <- IdeogramTrack(genome = "hg19", chromosome = mychr) dtrack=DataTrack(data=mysub$mcols.pvalue, start=start(mysub), end=end(mysub), chromosome = mychr, genome = "hg19", name = mytf) biomtrack <- BiomartGeneRegionTrack(genome = "hg19", chromosome = mychr, symbol=mysymbol, name=mysymbol) tfp = plotTracks(list(dtrack, gtrack, biomtrack),sizes=c(1,1,2)) } plotFP <- function(myfp, mysymbol){ require(Gviz) require(TFutils) require(GenomicRanges) require(mongolite) mygene = genemodForGviz(sym=mysymbol,resource= EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75) mychr = seqnames(mygene)[1] mygeneRange = GRanges(mychr, IRanges(start=min(start(mygene)),end=max(end(mygene)))) mystart = min(start(mygene)) myend = max(end(mygene)) fpcoll = mongo(url="mongodb://172.27.105.48", collection = myfp, db = "txregnet" ) myquery=paste0('{', '"chr":"',mychr,'",', '"start" : {"$gte":',mystart,'},', '"end" : {"$lte":',myend,'}}') res=fpcoll$find(myquery) mysub=GRanges(res$chr, IRanges(res$start, res$end), mcols=res) #tf = Rsamtools::TabixFile(paste0("/udd/reshg/tbifiles/tabix_all_tf_new/",mytf,".02_sort.bed.gz")) #mysub = importFIMO(tf, mygeneRange) genome(mysub)="hg19" atrack1 <- AnnotationTrack(mysub, name = myfp) gtrack <- GenomeAxisTrack() itrack <- IdeogramTrack(genome = "hg19", chromosome = mychr) dtrack=DataTrack(data=mysub$mcols.stat, start=start(mysub), end=end(mysub), chromosome = mychr, genome = "hg19", name = myfp) biomtrack <- BiomartGeneRegionTrack(genome = "hg19", chromosome = mychr, symbol=mysymbol, name=mysymbol) fpp = plotTracks(list(dtrack, gtrack, biomtrack),sizes=c(1,1,2)) } ploteQTL <- function(myeqtl, mysymbol){ require(Gviz) require(TFutils) require(GenomicRanges) require(mongolite) mygene = genemodForGviz(sym=mysymbol,resource= EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75) mychr = seqnames(mygene)[1] mygeneRange = GRanges(mychr, IRanges(start=min(start(mygene)),end=max(end(mygene)))) mystart = min(start(mygene)) myend = max(end(mygene)) eqtlcoll = mongo(url="mongodb://172.27.105.48", collection = myeqtl, db = "txregnet" ) myquery=paste0('{', '"chr":',17,',', '"snp_pos" : {"$gte":',mystart,'},', '"snp_pos" : {"$lte":',myend,'}}') res=eqtlcoll$find(myquery) mysub=GRanges(res$chr, IRanges(res$snp_pos, width = 1), mcols=res) #tf = Rsamtools::TabixFile(paste0("/udd/reshg/tbifiles/tabix_all_tf_new/",mytf,".02_sort.bed.gz")) #mysub = importFIMO(tf, mygeneRange) genome(mysub)="hg19" atrack1 <- AnnotationTrack(mysub, name = myeqtl) gtrack <- GenomeAxisTrack() itrack <- IdeogramTrack(genome = "hg19", chromosome = mychr) dtrack=DataTrack(data=mysub$mcols.qvalue, start=start(mysub), end=end(mysub), chromosome = mychr, genome = "hg19", name = "eqtl") biomtrack <- BiomartGeneRegionTrack(genome = "hg19", chromosome = mychr, symbol=mysymbol, name=mysymbol) eqtlp = plotTracks(list(dtrack, gtrack, biomtrack), sizes=c(2,2,5)) } plotHS <- function(myhs, mysymbol){ require(Gviz) require(TFutils) require(GenomicRanges) require(mongolite) mygene = genemodForGviz(sym=mysymbol,resource= EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75) mychr = seqnames(mygene)[1] mygeneRange = GRanges(mychr, IRanges(start=min(start(mygene)),end=max(end(mygene)))) mystart = min(start(mygene)) myend = max(end(mygene)) hscoll = mongo(url="mongodb://172.27.105.48", collection = myhs, db = "txregnet" ) myquery=paste0('{', '"chrom":"',mychr,'",', '"chromStart" : {"$gte":',mystart,'},', '"chromEnd" : {"$lte":',myend,'}}') res=hscoll$find(myquery) mysub=GRanges(res$chrom, IRanges(res$chromStart, res$chromEnd), mcols=res) #tf = Rsamtools::TabixFile(paste0("/udd/reshg/tbifiles/tabix_all_tf_new/",mytf,".02_sort.bed.gz")) #mysub = importFIMO(tf, mygeneRange) genome(mysub)="hg19" atrack1 <- AnnotationTrack(mysub, name = myhs) gtrack <- GenomeAxisTrack() itrack <- IdeogramTrack(genome = "hg19", chromosome = mychr) dtrack=DataTrack(data=mysub$mcols.qValue, start=start(mysub), end=end(mysub), chromosome = mychr, genome = "hg19", name = myhs) biomtrack <- BiomartGeneRegionTrack(genome = "hg19", chromosome = mychr, symbol=mysymbol, name=mysymbol) hsp = plotTracks(list(dtrack, gtrack, biomtrack), sizes=c(2,2,5)) } enc690ByFactor = function (factor=myTF,sym=mysymbol,filtrange=NULL) { data(encode690) encode690 = as.data.frame(encode690) stopifnot(factor %in% encode690$target) tmp = dplyr::filter(encode690, target == factor)[, c("AHID", "cell")] ids = tmp[["AHID"]] cells = tmp[["cell"]] message(paste("retrieving", length(ids), "AnnotationHub elements.")) suppressWarnings({ suppressMessages({ l1 = lapply(seq_len(length(ids)), function(x) { cat(".") tmp = AnnotationHub::AnnotationHub()[[ids[x]]] if (!is.null(filtrange)) { seqlevelsStyle(filtrange) = seqlevelsStyle(tmp) tmp = subsetByOverlaps(tmp, filtrange) } metadata(tmp) = c(metadata(tmp), cell = cells[x]) tmp }) }) }) cat("\n") names(l1) = ids sapply(l1,length) #gm = GRanges("chr17", IRanges(38077296, 38083884)) #l2 = lapply(l1, function(x) subsetByOverlaps(x, gm+10000)) #l3 = enc690ByFactor(filtrange=gm+10000) mygene = genemodelDF(sym, EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75) mychr = paste0("chr",mygene$seqnames[[2]]) br = GRanges(mychr, IRanges(start=min(mygene$start),end=max(mygene$end))) #br = GRanges("chr13", IRanges(32889617, 32973809)) # BRCA2 dd = lapply(l1, function(x) subsetByOverlaps(x, br+10000)) lens = sapply(dd,length) cls = sapply(dd, function(x) metadata(x)$cell) cls = rep(cls, lens) ee = do.call(rbind, lapply(dd, as.data.frame)) ee$cell = factor(as.character(cls)) ee$yval = 1+(as.numeric(factor(as.character(cls)))-1)/length(unique(cls)) edb = EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75 ggvisForSymbol(sym, resource=edb) + geom_segment(aes(x=start, xend=end, y=yval, yend=yval, group=cell, colour=cell), data=ee, size=2.5) + theme(axis.text.y = element_blank(), axis.title.y=element_blank()) + ylim(-.5,2) + ggtitle(paste0(factor," binding near ", sym)) }
shinyApp( ui = fluidPage( titlePanel("visByGene"), sidebarLayout(position = "left", sidebarPanel(width=3, selectInput("eQTL", "Select eQTL Collection", eQTLdata), selectInput("fp", "Select FootPrint Collection", fpdata), #selectInput("hs", "Select Hypersensitivity Collection", hsdata), selectInput("transcriptionFactor", "Select FIMO Transcription Factor Collection", tfdata), selectInput("encodeTF", "Select Encode Transcription Factor",encode690$target ), textInput("geneName", "Enter Gene of interest", value="ORMDL3") #numericInput("windowSize", "Window Size", 1000), #textInput("downloadName", "Download Name"), #downloadButton("downloadData", "Download Data") ), mainPanel( tabsetPanel(id="inTabset", tabPanel("Gene Model", value="panel1", plotlyOutput("ggPlot")), tabPanel("eQTL Model", value="panel2", plotOutput("eqtlplot")), tabPanel("Footprint Model", value="panel3", plotOutput("fpplot")), #tabPanel("DNAse Hypersensitivity Model", value="panel3", plotOutput("hsplot")), tabPanel("FIMO TF Model", value="panel4", plotOutput("tfplot")), tabPanel("Encode TF Model", value="panel5", plotOutput("tfgenePlot")), tabPanel("CEBPB binding nead ORMDL3", value="panel5", plotlyOutput("plotlySymbol")), tabPanel("ggplot", value="panel9", plotlyOutput("ggplot")), tabPanel("visByGene", value="panel6", plotOutput("visByGene")), tabPanel("TF Metadata",value="panel7", DT::dataTableOutput("mytable2")), tabPanel("References",value="panel8",textOutput("text1")) ) )) ), server = function(input, output, session){ observeEvent(input$goButton, { # query FP from mongo and plot with gene model first plotFP <- function(myfp, mysymbol){ require(Gviz) require(TFutils) require(GenomicRanges) require(mongolite) mygene = genemodForGviz(sym=mysymbol,resource= EnsDb.Hsapiens.v75::EnsDb.Hsapiens.v75) mychr = seqnames(mygene)[1] mygeneRange = GRanges(mychr, IRanges(start=min(start(mygene)),end=max(end(mygene)))) mystart = min(start(mygene)) myend = max(end(mygene)) fpcoll = mongo(url="mongodb://172.27.105.48", collection = myfp, db = "txregnet" ) myquery=paste0('{', '"chr":"',mychr,'",', '"start" : {"$gte":',mystart,'},', '"end" : {"$lte":',myend,'}}') res=fpcoll$find(myquery) mysub=GRanges(res$chr, IRanges(res$start, res$end), mcols=res) #tf = Rsamtools::TabixFile(paste0("/udd/reshg/tbifiles/tabix_all_tf_new/",mytf,".02_sort.bed.gz")) #mysub = importFIMO(tf, mygeneRange) genome(mysub)="hg19" atrack1 <- AnnotationTrack(mysub, name = myfp) gtrack <- GenomeAxisTrack() itrack <- IdeogramTrack(genome = "hg19", chromosome = mychr) dtrack=DataTrack(data=mysub$mcols.stat, start=start(mysub), end=end(mysub), chromosome = mychr, genome = "hg19", name = myfp) biomtrack <- BiomartGeneRegionTrack(genome = "hg19", chromosome = mychr, symbol=mysymbol, name=mysymbol) fpp = plotTracks(list(dtrack, gtrack, biomtrack),sizes=c(1,1,2)) } output$plot <- renderPlot(plotFP(input$fp, inout$geneName)) }) #observeEvent(input$tfmodel, { # updateTabsetPanel(session, "inTabset", selected = "panel2") output$tfplot = renderPlot(plotTF(input$transcriptionFactor, input$geneName)) output$fpplot = renderPlot(plotFP(input$fp, input$geneName)) output$eqtlplot = renderPlot(ploteQTL(input$eQTL, input$geneName)) require(plotly) output$ggPlot = renderPlotly(ggvisForSymbol(input$geneName)) #output$hsplot = renderPlot(plotHS(input$hs, input$geneName)) #output$visByGene = renderPlot(plotHS(input$hs, input$geneName)) output$tfgenePlot = renderPlot(enc690ByFactor(input$encodeTF, input$geneName)) output$plotlySymbol = renderPlotly(plotlyForSymbol("ORMDL3", resource=edb) %>% add_segments(x=ee$start, xend=ee$end, y=ee$yval, yend=ee$yval, color=ee$cell,showlegend = TRUE, text=paste(ee$cell,":",ee$info),hoverinfo='text')%>% layout(title="CEBPB binding near ORMDL3",yaxis=list(title=""))) output$visByGene = renderPlot(visByGene(input$eQTL, input$fp, input$transcriptionFactor, input$geneName)) #require(plotly) output$ggPlot = renderPlotly(ggvisForSymbol(input$geneName)) output$mytable2 = renderDataTable(as.data.frame(metadata_tf), options=list(scrollX=TRUE,pageLength=25)) output$text1 <- renderText("Eric Tu, et al. Interactive Exploration on Large Genomic Datasets. 2016 Spring; 2016: UCB/EECS-2016-111, <br> Matteo Gabetta, et al. BigQ: a NoSQL based framework to handle genomic variants in i2b2. BMC Bioinformatics. 2015") } )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.