Region and score plots

In addition to matrix-based plots, FAN-C provides a number of plots to plot genomic tracks alongside Hi-C data (although they can certainly also be used independently). The main plots in this category are

  • LinePlot, which plots (ideally continuous) scores associated with genomic regions as a line plot.
  • BarPlot, which plots genomic region scores as bars
  • GenomicVectorArrayPlot, which plots multiple scores associated with the same regions, such as insulation scores at different window sizes, as a heatmap
  • FeatureLayerPlot, which plots the location of features as blocks, grouped by user-specified attributes, such as the location TAD boundaries in different matrices
  • GenePlot, which, as the name suggests, can plot gene and transcript annotations, including exon-intron structures.

Line plot

LinePlot accepts a RegionBased object as input. These can be created very easily from any compatible genomic regions format, including BED, GFF/GTF, BigWig, Tabix, and more. So let’s load some BED files:

insulation_scores_1mb = fanc.load("architecture/domains/fanc_example_100kb.insulation_1mb.bed")
insulation_scores_2mb = fanc.load("architecture/domains/fanc_example_100kb.insulation_2mb.bed")
boundaries_1mb = fanc.load("architecture/domains/fanc_example_100kb.insulation_boundaries_1mb.bed")
boundaries_2mb = fanc.load("architecture/domains/fanc_example_100kb.insulation_boundaries_2mb.bed")

We can then use that directly as input:

hp = fancplot.LinePlot(insulation_scores_1mb)
hp.plot('chr18:6mb-10mb')
hp.show()
../../_images/plot_line.png

By default, FAN-C fills the area between the X axis and the curve. We can disable that using fill=False:

hp = fancplot.LinePlot(insulation_scores_1mb, fill=False)
hp.plot('chr18:6mb-10mb')
hp.show()
../../_images/plot_line_nofill.png

Instead of the step-wise style of the line, we can only connect points at each midpoint of the genomic regions:

hp = fancplot.LinePlot(insulation_scores_1mb, style='mid')
hp.plot('chr18:6mb-10mb')
hp.show()
../../_images/plot_line_mid.png

We can change the color of the line with colors. Other plot aspects affecting the line drawing, passed to the internal matplotlib ax.plot function, can be controlled through the plot_kwargs dictionary, as shown here for transparency:

hp = fancplot.LinePlot(insulation_scores_1mb, style='mid', colors='cyan',
                       plot_kwargs={'alpha': 0.5})
hp.plot('chr18:6mb-10mb')
hp.show()
../../_images/plot_line_col.png

Finally, we can control the y axis limits with ylim (or you can use a custom axis.

hp = fancplot.LinePlot(insulation_scores_1mb, style='mid', colors='cyan',
                       plot_kwargs={'alpha': 0.5}, ylim=(-1, 1))
hp.plot('chr18:6mb-10mb')
hp.show()
../../_images/plot_line_ylim.png

It is also possible to add multiple score tracks to the same LinePlot:

hp = fancplot.LinePlot((insulation_scores_1mb, insulation_scores_2mb),
                       style='mid', colors=('cyan', 'magenta'),
                       plot_kwargs={'alpha': 0.5}, ylim=(-1, 1),
                       labels=('1mb', '2mb'))
hp.plot('chr18:6mb-10mb')
hp.show()
../../_images/plot_line_multi.png

Bar plot

The BarPlot works in virtually the same way as the LinePlot:

hp = fancplot.BarPlot((insulation_scores_1mb, insulation_scores_2mb),
                      colors=('cyan', 'magenta'),
                      plot_kwargs={'alpha': 0.5}, ylim=(-1, 1),
                      labels=('1mb', '2mb'))
hp.plot('chr18:6mb-10mb')
hp.show()
../../_images/plot_bar.png

In addition, it also works very well for non-continuous data, such as shown here for domain boundaries in a larger interval:

hp = fancplot.BarPlot(boundaries_1mb, colors='cyan')
hp.plot('chr18:20mb-30mb')
hp.show()
../../_images/plot_bar_boundaries.png

Score heatmaps

Layer plots

Gene plots