Author: Jianhong Ou, Lihua Julie Zhu

# trackViewer Vignette: dandelionPlot

# Dandelion Plot

Sometimes, there are as many as hundreds of SNPs invoved in one gene. Dandelion plot can be used to depict such dense SNPs. Please note that the height of the dandelion indicates the density of the SNPs.

    library(trackViewer)
    library(TxDb.Hsapiens.UCSC.hg19.knownGene)
    library(org.Hs.eg.db)
    library(rtracklayer)
    methy <- import(system.file("extdata", "methy.bed", package="trackViewer"), "BED")
    gr <- GRanges("chr22", IRanges(50968014, 50970514, names="TYMP"))
    trs <- geneModelFromTxdb(TxDb.Hsapiens.UCSC.hg19.knownGene,
                             org.Hs.eg.db,
                             gr=gr)
    features <- c(range(trs[[1]]$dat), range(trs[[5]]$dat))
    names(features) <- c(trs[[1]]$name, trs[[5]]$name)
    features$fill <- c("lightblue", "mistyrose")
    features$height <- c(.02, .04)
    dandelion.plot(methy, features, ranges=gr, type="pin")

## Change the type of Dandelion plot

There are one more type for dandelion plot, i.e., type “fan”. The area of the fan indicates the percentage of methylation or rate of mutation.

    methy$color <- 3
    methy$border <- "gray"
    ## Score info is required and the score must be a number in [0, 1]
    m <- max(methy$score)
    methy$score <- methy$score/m
    dandelion.plot(methy, features, ranges=gr, type="fan")

    methy$color <- rep(list(c(3, 5)), length(methy))
    methy$score2 <- (max(methy$score) - methy$score)/m
    legends <- list(list(labels=c("s1", "s2"), fill=c(3, 5)))
    dandelion.plot(methy, features, ranges=gr, type="pie", legend=legends)

## Change the number of dandelions

    ## Less dandelions
    dandelion.plot(methy, features, ranges=gr, type="circle", maxgaps=1/10)

    ## More dandelions
    dandelion.plot(methy, features, ranges=gr, type="circle", maxgaps=1/100)

Users can also specify the maximum distance between neighboring dandelions by setting the maxgaps as a GRanges object.

    maxgaps <- tile(gr, n = 10)[[1]]
    dandelion.plot(methy, features, ranges=gr, type="circle", maxgaps=maxgaps)

## Add y-axis (yaxis)

Set yaxis to TRUE to add y-axis, and set `heightMethod`=`mean` to use the mean score as the height.

    dandelion.plot(methy, features, ranges=gr, type="pie",
                   maxgaps=1/100, yaxis = TRUE, heightMethod = mean,
                   ylab='mean of methy scores')

    yaxis = c(0, 0.5, 1)
    dandelion.plot(methy, features, ranges=gr, type="pie",
                   maxgaps=1/100, yaxis = yaxis, heightMethod = mean,
                   ylab='mean of methy scores')

    # subset the data to test when all values smaller than 1
    methy <- methy[methy$score<1]
    dandelion.plot(methy, features, ranges=gr, type="pie",
                   maxgaps=1/100, yaxis = TRUE, heightMethod = mean,
                   ylab='mean of methy scores')

# Session Info

    sessionInfo()

R version 4.6.0 (2026-04-24) Platform: x86_64-pc-linux-gnu Running under: Ubuntu 24.04.4 LTS

Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0

locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

time zone: Etc/UTC tzcode source: system (glibc)

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

other attached packages: [1] httr_1.4.8
[2] VariantAnnotation_1.59.0
[3] Rsamtools_2.29.0
[4] Biostrings_2.81.2
[5] XVector_0.53.0
[6] SummarizedExperiment_1.43.0
[7] MatrixGenerics_1.25.0
[8] matrixStats_1.5.0
[9] org.Hs.eg.db_3.23.1
[10] TxDb.Hsapiens.UCSC.hg19.knownGene_3.22.1 [11] GenomicFeatures_1.65.0
[12] AnnotationDbi_1.75.0
[13] Biobase_2.73.1
[14] Gviz_1.57.0
[15] rtracklayer_1.73.0
[16] trackViewer_1.49.0
[17] GenomicRanges_1.65.0
[18] Seqinfo_1.3.0
[19] IRanges_2.47.2
[20] S4Vectors_0.51.3
[21] BiocGenerics_0.59.6
[22] generics_0.1.4

loaded via a namespace (and not attached): [1] strawr_0.0.92 RColorBrewer_1.1-3 sys_3.4.3
[4] rstudioapi_0.18.0 jsonlite_2.0.0 magrittr_2.0.5
[7] farver_2.1.2 rmarkdown_2.31 BiocIO_1.23.3
[10] vctrs_0.7.3 memoise_2.0.1 RCurl_1.98-1.18
[13] base64enc_0.1-6 htmltools_0.5.9 S4Arrays_1.13.0
[16] BiocBaseUtils_1.15.1 progress_1.2.3 curl_7.1.0
[19] Rhdf5lib_2.1.0 SparseArray_1.13.2 Formula_1.2-5
[22] rhdf5_2.57.1 sass_0.4.10 bslib_0.11.0
[25] htmlwidgets_1.6.4 httr2_1.2.2 cachem_1.1.0
[28] buildtools_1.0.0 GenomicAlignments_1.49.0 lifecycle_1.0.5
[31] pkgconfig_2.0.3 Matrix_1.7-5 R6_2.6.1
[34] fastmap_1.2.0 digest_0.6.39 colorspace_2.1-2
[37] Hmisc_5.2-5 RSQLite_3.53.1 filelock_1.0.3
[40] abind_1.4-8 compiler_4.6.0 bit64_4.8.2
[43] htmlTable_2.5.0 S7_0.2.2 backports_1.5.1
[46] BiocParallel_1.47.0 DBI_1.3.0 biomaRt_2.69.0
[49] rappdirs_0.3.4 DelayedArray_0.39.3 rjson_0.2.23
[52] tools_4.6.0 foreign_0.8-91 nnet_7.3-20
[55] glue_1.8.1 restfulr_0.0.16 InteractionSet_1.41.0
[58] rhdf5filters_1.25.0 checkmate_2.3.4 cluster_2.1.8.2
[61] gtable_0.3.6 BSgenome_1.81.0 ensembldb_2.37.1
[64] data.table_1.18.4 hms_1.1.4 pillar_1.11.1
[67] stringr_1.6.0 dplyr_1.2.1 BiocFileCache_3.3.0
[70] lattice_0.22-9 bit_4.6.0 deldir_2.0-4
[73] biovizBase_1.61.0 tidyselect_1.2.1 maketools_1.3.2
[76] knitr_1.51 gridExtra_2.3 ProtGenerics_1.45.0
[79] xfun_0.57 stringi_1.8.7 UCSC.utils_1.9.0
[82] lazyeval_0.2.3 yaml_2.3.12 evaluate_1.0.5
[85] codetools_0.2-20 cigarillo_1.3.0 interp_1.1-6
[88] tibble_3.3.1 BiocManager_1.30.27 cli_3.6.6
[91] rpart_4.1.27 jquerylib_0.1.4 dichromat_2.0-0.1
[94] Rcpp_1.1.1-1.1 GenomeInfoDb_1.49.1 grImport_0.9-7
[97] dbplyr_2.5.2 png_0.1-9 XML_3.99-0.23
[100] parallel_4.6.0 ggplot2_4.0.3 blob_1.3.0
[103] prettyunits_1.2.0 latticeExtra_0.6-31 jpeg_0.1-11
[106] AnnotationFilter_1.37.0 bitops_1.0-9 txdbmaker_1.9.0
[109] scales_1.4.0 crayon_1.5.3 BiocStyle_2.41.0
[112] rlang_1.2.0 KEGGREST_1.53.0