This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Tool: trackplot: Fast and minimal dependency standalone R script to generate IGV style locus tracks from bigWig files

If you are working with chip-seq or atac-seq or any assays resulting in bigWig files, one of the common visualizations is to generate track plots displaying signal intensities across genomic loci. Libraries in R like Gviz facilitates such visualization but they are slow, complicated, and come with a large number of dependencies, not to mention R versions themselves.

Introducing trackplot - a fast and minimal dependency standalone R script to generate IGV style locus tracks from bigWig files in R. trackplot has only two depdencies namely data.table R package, and bwtool CLI tool.

Features:

  • Its fast since most of the heavy lifting is done by bwtool
  • Plots are generated using pure base graphics (no ggplot2 or tidyverse dependencies)
  • Automatically queries UCSC genome browser for gene models.
  • Supports GTF and standard UCSC gene formats as well.
  • Customization: Each track can be customized for color, scale, height/width.
  • Region highlighting, gene track collapsing, etc

Usage:

trackplot is a standalone R script and requires no installation. Just source it and you're good to go!

Source code on Github. Comments and suggestions are always welcome :)

# download and source the script  
> download.file(url = "https://raw.githubusercontent.com/PoisonAlien/trackplot/master/trackplot.R", destfile = "trackplot.R") 
> source('trackplot.R') 

> trackplot(bigWigs = c("CD34.bw", "EC.bw", "LC.bw", "CD4p.bw", "CD8p.bw"),   
          loci = "chr3:187,715,903-187,752,003",   
          draw_gene_track = TRUE, build = "hg38", mark_regions = markregions,   
          custom_names = c("CD34", "EC", "LC", "CD4+", "CD8+") )

edit: Answering the comments, bwtool pre-built binaries are now included as part of the trackplot repository. Just make them executable and start using them.

visualization igv chip-seq r bigwigs

Try these instructions for bwtool compilation. It should work. Copied below as well.

git clone 'https://github.com/CRG-Barcelona/bwtool'
git clone 'https://github.com/CRG-Barcelona/libbeato'
git clone https://github.com/madler/zlib

cd libbeato/
git checkout 0c30432af9c7e1e09ba065ad3b2bc042baa54dc2
./configure
make
cd ..

cd zlib
./configure
make
cd ..

cd bwtool/
./configure CFLAGS='-I../libbeato -I../zlib' LDFLAGS='-L../libbeato/jkweb -L../libbeato/beato -L../zlib'
make

# copy/move the binary to PATH or to a directory under PATH
sudo cp bwtool /usr/local/bin

Yes, I tried that already. Fine for CentOS, but on macOS 10.14 I keep getting errors, please see this link for the make errors. I can also open a separate issue over at libbeato if you like.

I have tested quite throroughly on Ubuntu and CentOS. It works with no issues. Also, I do have a compiled version of bwtool on my mac (10.15.2), and I could not reproduce your errors. I guess opening an issue on libbeato might help to speed up debugging. edit: I am happy to share the bwtool mac binary if you would like.

Thanks, I could compile it on another Mac I had around, took the binary from there and now it works fine. Here is the binary if anyone wants to use it. Maybe you want to put a binary for both Linux and macOS on the Git of your tool so users can use it directly.

Tried trackplot in the meantime, awesomely fast and easy, thank you for creating it. Have been looking for something that is more intuitive than gviz for quite some time, this is very promising.

Thanks for testing and I am glad that you were able to make it work. I will make available the binaries soon :) edit: centOS and macOS binaries for bwtool are included in the repository. Thanks for the suggestion.

Bundling the binaries together in one tar may prove confusing to novice users. Perhaps you can consider making them available independently and linking them in the text when you mention their availability independently.

There is a typo in the binary README's, it is currently chmod +X rather than +x to make them executable.

Thanks, @genomax and @ATpoint I have updated the repository.

Hi I tried your script to make the plots but got an error

Parsing loci..
Queried region: chr1:202717141-202817514 [100373 bps]
Checking for files..
 Error in .check_bwtool() : 
Could not locate bwtool. Download it from here: https://github.com/CRG-Barcelona/bwtool/releases

The bwtool installed using the same lines above.

git clone 'https://github.com/CRG-Barcelona/bwtool'
git clone 'https://github.com/CRG-Barcelona/libbeato'
git clone https://github.com/madler/zlib

cd libbeato/
git checkout 0c30432af9c7e1e09ba065ad3b2bc042baa54dc2
./configure
make
cd ..

cd zlib
./configure
make
cd ..

cd bwtool/
./configure CFLAGS='-I../libbeato -I../zlib' LDFLAGS='-L../libbeato/jkweb -L../libbeato/beato -L../zlib'
make

R session

R version 3.6.2 (2019-12-12)
Platform: x86_64-pc-linux-gnu (64-bit)

Running under: Ubuntu 18.04.5 LTS

Matrix products: default

BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1

LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

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



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

loaded via a namespace (and not attached):
[1] compiler_3.6.2    parallel_3.6.2    tools_3.6.2       tinytex_0.27      data.table_1.13.2 xfun_0.19

Did you add it to PATH or to a folder in PATH?

I just added it to PATH. Still I get the same error.

You are almost there. You just need to copy/move the binary to a PATH (e.g; /usr/local/bin) or to a directory under PATH.

Getting this error on MacOS 10.14.6

gcc -DHAVE_CONFIG_H -I. -I..    -I.. -Wall -Wformat -Wimplicit -Wreturn-type -Wuninitialized -fno-strict-aliasing -g -O0 -I/Users/kopardevn/SandBox/bwtool/libbeato/include -MT metaBigBam.o -MD -MP -MF .deps/metaBigBam.Tpo -c -o metaBigBam.o metaBigBam.c
metaBigBam.c:485:12: warning: 'cigar_tab' is deprecated: Use bam_cigar_table[] instead
      [-Wdeprecated-declarations]
    if (h->cigar_tab == 0)
           ^
/usr/local/include/htslib/sam.h:77:29: note: 'cigar_tab' has been explicitly marked deprecated here
    const int8_t *cigar_tab HTS_DEPRECATED("Use bam_cigar_table[] instead");
                            ^
/usr/local/include/htslib/hts_defs.h:75:49: note: expanded from macro 'HTS_DEPRECATED'
#define HTS_DEPRECATED(message) __attribute__ ((__deprecated__ (message)))
                                                ^
metaBigBam.c:487:5: warning: 'cigar_tab' is deprecated: Use bam_cigar_table[] instead
      [-Wdeprecated-declarations]
        h->cigar_tab = (int8_t*)calloc(128, sizeof(int8_t));
           ^
/usr/local/include/htslib/sam.h:77:29: note: 'cigar_tab' has been explicitly marked deprecated here
    const int8_t *cigar_tab HTS_DEPRECATED("Use bam_cigar_table[] instead");
                            ^
/usr/local/include/htslib/hts_defs.h:75:49: note: expanded from macro 'HTS_DEPRECATED'
#define HTS_DEPRECATED(message) __attribute__ ((__deprecated__ (message)))
                                                ^
metaBigBam.c:489:9: warning: 'cigar_tab' is deprecated: Use bam_cigar_table[] instead
      [-Wdeprecated-declarations]
            h->cigar_tab[(int)BAM_CIGAR_STR[i]] = i;
               ^
/usr/local/include/htslib/sam.h:77:29: note: 'cigar_tab' has been explicitly marked deprecated here
    const int8_t *cigar_tab HTS_DEPRECATED("Use bam_cigar_table[] instead");
                            ^
/usr/local/include/htslib/hts_defs.h:75:49: note: expanded from macro 'HTS_DEPRECATED'
#define HTS_DEPRECATED(message) __attribute__ ((__deprecated__ (message)))
                                                ^
metaBigBam.c:489:42: error: read-only variable is not assignable
            h->cigar_tab[(int)BAM_CIGAR_STR[i]] = i;
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
metaBigBam.c:502:35: warning: 'cigar_tab' is deprecated: Use bam_cigar_table[] instead
      [-Wdeprecated-declarations]
        op = (uint8_t)*q >= 128? -1 : h->cigar_tab[(int)*q];
                                         ^
/usr/local/include/htslib/sam.h:77:29: note: 'cigar_tab' has been explicitly marked deprecated here
    const int8_t *cigar_tab HTS_DEPRECATED("Use bam_cigar_table[] instead");
                            ^
/usr/local/include/htslib/hts_defs.h:75:49: note: expanded from macro 'HTS_DEPRECATED'
#define HTS_DEPRECATED(message) __attribute__ ((__deprecated__ (message)))
                                                ^
4 warnings and 1 error generated.
make[2]: *** [metaBigBam.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

Any idea whats going on? Also seems like others are running into the same problem ( https://github.com/CRG-Barcelona/libbeato/issues/9 ). A solution will be appreciated.

0 answers

No answers yet.

Log in to answer this question.