## ----include=FALSE------------------------------------------------------------ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup, message=FALSE, results="hide"------------------------------------- require(StructuralVariantAnnotation) require(ggbio) require(shiny) require(shiny.gosling) use_gosling() ## ----reading-data------------------------------------------------------------- colo829_vcf <- VariantAnnotation::readVcf( system.file( "extdata", "COLO829T.purple.sv.ann.vcf.gz", package = "StructuralVariantAnnotation" ) ) colo829_bpgr <- breakpointRanges(colo829_vcf) ## ----process-data------------------------------------------------------------- # In this line, a subset of genomic ranges is extracted from the object # colo829_bpgr. The subset is obtained by filtering based on the sequence # names (seqnames) present in colo829_bpgr that are also found in the # sequence levels (seqlevels) of the hg19sub reference genome from the # biovizBase package. colo829_bpgr is assumed to be a GenomicRanges object # containing genomic regions. gr_circos <- colo829_bpgr[seqnames(colo829_bpgr) %in% seqlevels(biovizBase::hg19sub)] # This line updates the sequence levels of the gr_circos object to match # those of the hg19sub reference genome. It ensures that the genomic ranges # in gr_circos align properly with the reference genome. seqlevels(gr_circos) <- seqlevels(biovizBase::hg19sub) # Here, the metadata columns (mcols) of the gr_circos object are updated # with additional information. Specifically, a new column called "to.gr" is # added, and its values are assigned using the granges function on the # partner genomic ranges of gr_circos. mcols(gr_circos)$to.gr <- granges(partner(gr_circos)) ## ----track-1------------------------------------------------------------------ track1 <- add_single_track( id = "track1", title = "Quality", data = track_data_gr( gr_circos, chromosomeField = "seqnames", genomicFields = c("start", "end") ), mark = "bar", x = visual_channel_x(field = "start", type = "genomic", axis = "bottom"), y = visual_channel_y(field = "QUAL", type = "quantitative", axis = "right"), color = visual_channel_color( value = "#BB3114" ), width = 700, height = 100 ) ## ----track-2------------------------------------------------------------------ track2 <- add_single_track( id = "track2", title = "REF", data = track_data_gr( gr_circos, chromosomeField = "seqnames", genomicFields = c("start", "end") ), mark = "rect", strokeWidth = visual_channel_stroke_width( value = 0.5 ), stroke = visual_channel_stroke( field = "REF", type = "nominal", domain = list("A", "C", "G", "T"), range = list("#73A97D", "#C1BB78", "#1F5E89", "#CF784B") ), x = visual_channel_x(field = "start", type = "genomic"), xe = visual_channel_x(field = "end", type = "genomic"), width = 700, height = 100 ) ## ----track-3------------------------------------------------------------------ track3 <- add_single_track( id = "track3", title = "Highlight similarities of Chr 10 with others", data = track_data_gr( gr_circos, chromosomeField = "to.gr.seqnames", genomicFields = c("to.gr.start", "to.gr.end"), longToWideId = "event" ), alignment = "overlay", opacity = visual_channel_opacity( value = 0.4 ), tracks = add_multi_tracks( add_single_track( dataTransform = track_data_transform( type = "filter", field = "to.gr.seqnames", oneOf = list("10"), not = TRUE ), mark = "withinLink", x = visual_channel_x( field = "to.gr.start", type = "genomic" ), xe = visual_channel_x( field = "to.gr.start_2", type = "genomic" ), x1 = visual_channel_x( field = "to.gr.end", type = "genomic" ), x1e = visual_channel_x( field = "to.gr.end_2", type = "genomic" ), stroke = visual_channel_stroke( value = "lightgray" ), strokeWidth = visual_channel_stroke_width( value = 1 ) ), add_single_track( dataTransform = track_data_transform( type = "filter", field = "to.gr.seqnames", oneOf = list("10") ), mark = "withinLink", x = visual_channel_x( field = "to.gr.start", type = "genomic" ), xe = visual_channel_x( field = "to.gr.start_2", type = "genomic" ), x1 = visual_channel_x( field = "to.gr.end", type = "genomic" ), x1e = visual_channel_x( field = "to.gr.end_2", type = "genomic" ), stroke = visual_channel_stroke( field = "to.gr.seqnames_2", type = "nominal", range = c( "#E79F00", "#029F73", "#0072B2", "#CB7AA7", "#D45E00", "#57B4E9", "#EFE441" ) ), strokeWidth = visual_channel_stroke_width( value = 1.5 ) ) ), width = 700, height = 200 ) ## ----single_composed_track---------------------------------------------------- single_composed_track <- compose_view( title = "Circos", subtitle = "http://circos.ca/intro/genomic_data/", layout = "circular", static = TRUE, spacing = 1, centerRadius = 0.3, alignment = "stack", multi = TRUE, tracks = add_multi_tracks(track1, track2, track3) ) ## ----run_app, results="hide"-------------------------------------------------- ui <- fluidPage( use_gosling(), fluidRow( column(6, goslingOutput("gosling_plot")), column( 1, br(), actionButton( "download_pdf", "PDF", icon = icon("cloud-arrow-down") ) ) ) ) server <- function(input, output, session) { output$gosling_plot <- renderGosling({ gosling( component_id = "component_1", single_composed_track ) }) observeEvent(input$download_pdf, { export_pdf(component_id = "component_1") }) } shinyApp(ui, server) ## ----session_info------------------------------------------------------------- sessionInfo()