Aggregate results from bioinformatics analyses across many samples into a single report.
Added a new plot type: box plot. It's useful to visualise a distribution when you have a set of values for each sample.
from multiqc.plots import box
self.add_section(
...,
plot=box.plot(
{
"sample 1": [4506, 4326, 3137, 1563, 1730, 3254, 2259, 3670, 2719, ...],
"sample 2": [2145, 2011, 3368, 2132, 1673, 1993, 6635, 1635, 4984, ...],
"sample 3": [1560, 1845, 3247, 1701, 2829, 2775, 3179, 1724, 1828, ...],
},
pconfig={
"title": "Iso-Seq: Insert Length",
},
)
)
Note the difference with the violin plot: the box plot visualises the distributions of many values within one sample, whereas the violin plot shows the distribution of one metric across many samples.
The setup.py
file has been superseded by pyproject.toml
for the build configuration.
Note that now for new modules, an entry point should be added to pyproject.toml
instead of setup.py
, e.g.:
[project.entry-points."multiqc.modules.v1"]
afterqc = "multiqc.modules.afterqc:MultiqcModule"
The heatmap plot now supports passing a dict as input data, and also supports a zlab
parameter to set the label for the z-axis:
from multiqc.plots import heatmap
self.add_section(
...,
plot=heatmap.plot(
{
"sample 1": {"sample 2": 0, "sample 3": 1},
"sample 2": {"sample 1": 0, "sample 3": 0},
"sample 3": {"sample 1": 1, "sample 2": 0, "sample 3": 1},
},
pconfig={
"title": "Sample comparison",
"zlab": "Match",
},
)
)
setup.py
with pyproject.toml
(#2353)zlab
config parameter. Show xlab
, ylab
, zlab
in tooltip (#2387)run_modules
contains a non-existent module (#2322)nowrap
instead of
before suffixes in table cells (#2395)Fixes:
Inf
values (#2380)no_violin
(ex-no_beeswarm
) table config flag (#2376)full_figure_for_development
to avoid Kaleido errors (#2359)id
when pconfig=None
(#2337)dmax
or dmin
fail JSON dump load in JavaScript (#2354)pconfig
for MegaQC (#2344)cluster
and refine
commands are supported.gvcf_metrics
(#2327).parquet
files (#2364)'scale': False
as a default (#2350)Expected
statuswarn
status for Inconclusive
version
column (#2366)coverage
command (#2356)extract
command (#2296)Full Changelog: https://github.com/MultiQC/MultiQC/compare/v1.20...v1.21
MultiQC v1.20 comes with totally new plotting code for MultiQC reports. This is a huge change to the report output. We've done our best to maintain feature parity with the previous plotting code, but please do let us know if you spot any bugs or changes in behaviour by creating a GitHub issue.
This change comes with many improvements and new features, and paves the way for more in the future. To find out more, read the associated blog post.
For now, you can revert to the previous plotting code by using the highcharts
report template (multiqc --template highcharts
). This will be removed in v1.21.
Note that there are several plotting configuration options which have been removed:
click_func
cursor
tt_percentages
(use tt_suffix: "%"
)use_legend
(automatically hidden if there is only 1 category)labelSize
xDecimals
, yDecimals
(automatic if all values can be cast to int)xLabelFormat
, yLabelFormat
(use tt_label
)pointFormat
datalabel_colour
borderWidth
The v1.20 release is also the first release we've had since we moved the MultiQC repositories. Please note that the code is now at MultiQC/MultiQC (formerly ewels/MultiQC) and the same for the Docker repository. The GitHub repo should automatically redirect, but it's still good to update any references you may have.
violin
(replaces beeswarm
)highcharts
(#2292)MultiQC
organisation (#2243)future
library (#2258)v
prefix in docker image tags (#2273)filesearch_file_shared
config option, remove unnecessary per-module shared
flags in search patterns (#2227)config.output_dir
in MegaQC JSON (#2287)Pillow
package, wrap add_logo in try-except (#2312)self.ignore_samples
in stats (#2288)yield
for 3.9.3+ when the yield is provided explicitly in Quality_Metrics (#2253)module.anchor
to self.find_log_files
(#2255)Full Changelog: https://github.com/MultiQC/MultiQC/compare/v1.19...v1.20
An early Christmas present 🎁 Happy holidays everyone! 🎄
This release is mostly bugfixes and minor additions, whilst we lay the groundwork for some bigger updates coming in the new year. Still, there are plenty of goodies in here. Enjoy!
See the full changes in this release here: https://github.com/ewels/MultiQC/compare/v1.18...v1.19
id
in DRAGEN modules, and require id
in plot configs in strict mode (#2228)table_columns_visible
and table_columns_name
: support flat config and table_id
as a group (#2191)sort_samples: false
config option for bar graphs (#2210).format()
calls (#2224)defaultsort
(#1667).cram
to sample name cleaning defaults (#2209)run
into the multiqc
namespace (#2202)"square": True
flag to scatter plot to actually make the plot square (#2189)--no-report
flag (#2212)plotProfile
(#2229)BaseRecalibrator
scatter plot (#2189)UnboundLocalError
(#2230)BamQC
for global-only stats (#2207)MarkDuplicates
, including MarkDuplicatesSpark
(#2226)library_types
, compatible_fragment_ratio
, strand_mapping_bias
to the general stats table (#1485)Full Changelog: https://github.com/ewels/MultiQC/compare/v1.18...v1.19
As of this release, you can now set all of your config variables via environment variables! (see docs).
Better still, YAML config files can now use string interpolation to parse environment variables within strings (see docs), eg:
report_header_info:
- Contact E-mail: !ENV "${NAME:info}@${DOMAIN:example.com}"
In this release, there was a significant refactoring of the Picard module. It has been generalized for better code sharing with other Picard-based software, like Sentieon and Parabricks. As a result of this, the standalone Sentieon module was removed: Sentieon QC files will be interpreted directly as Picard QC files.
If you were using the Sentieon module in your pipelines, make sure to update any places that reference the module name:
--module sentieon
with --module picard
).sentieon
with picard
in options like run_modules
, exclude_modules
, module_order
).multiqc_data
or multiqc_plots
saves (e.g., multiqc_data/multiqc_sentieon_AlignmentSummaryMetrics.txt
becomes multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt
).multiqc_data/multiqc_data.json
.#sentieon_aligned_reads
becomes #picard_AlignmentSummaryMetrics
).# net.sf.picard.analysis.CollectMultipleMetrics INPUT=Szabo_160930_SN583_0215_AC9H20ACXX.bam ...
-> Szabo_160930_SN583_0215_AC9H20ACXX
), whereas the removed Sentieon module prioritized the QC file names. To revert to the old Sentieon approach, use the use_filename_as_sample_name
config flag.~/.config
or $XDG_CONFIG_HOME
(#2183)scale
is set (#2176)position:absolute
CSS from table values (#2169)--in1
/--in2
in bash command. Prefer file name if not fastp.json
; fallback to file name when error (#2139)division by zero
error (#2179)v1.41+
search pattern (#2155)-m sentieon
will no longer workpicard
instead of sentieon
, etc.use_filename_as_sample_name
config flagHighlights:
--require-logs
to fail if expected tool outputs are not found--lint
to --strict
ModuleNotFoundError
instead of UserWarning
when no logs are found@multiqc-bot changelog
(#2025, #2102, #2115)UserWarning
when no samples are found. (#2049)self.add_software_version
(#2081)config.lint
to config.strict
, crash early on module or template error. Add MULTIQC_STRICT=1
(#2101)xLog: True
and yLog: True
in config (#1632)xmax
<
xmin
in config (#2124)--require-logs
flag to error out if requested modules not used (#2109)shutil.copytree
when overriding existing template files in tmp_dir
(#2133)0
(#2083, #2094)New in v1.16 - software version information can now automatically parsed from log output where available, and added to MultiQC in a standardised manner. It's shown in the MultiQC report next to section headings and in a dedicated report section, as well as being saved to multiqc_data
. Where version information is not available in logs, it can be submitted manually by using a new special file type with filename pattern *_mqc_versions.yml
. There's the option of representing groups of versions, useful for a tool that uses sub-tools, or pipelines that want to report version numbers per analysis step.
There are a handful of new config scopes to control behaviour: software_versions
, skip_versions_section
, disable_version_detection
, versions_table_group_header
.
See the documentation for more (writing modules, supplying stand-alone)
Huge thanks to @pontushojer for the contribution (#1927). This idea goes way back to issue #290, made in 2016! 🎉
simplejson
unused dependency (#1973)custom_plot_config
priority over column-specific settings set by modulesplot_type: "html"
data
in json custom contentpkg_resources
general_stats_addcols
. Namespace is now always appended to the module name in the general stats (2037).sys.exit()
in the multiqc.run()
function, to avoid breaking interactive environments. #2055
multiqc_data
to include more than just the MultiQC paper (#2058)fn_clean_exts
instead of hardcoded file names. Fixes working with arbitrary file names (#1994)UnicodeDecodeError
when parsing fastqc_data.txt
: try latin-1 or fail gracefully (#2024)UnboundLocalError
on outputs when Kanju was run with the -e
flag (#2023)perchrom_fraction_cutoff
option into the config to help avoid clutter in contig-level plotsregion
and global
coverage histograms for a sample are available (i.e. when mosdepth was run with --by
, see mosdepth docs). In this case, data was effectively merged. Instead, summarise it separately and add a separate report section for the region-based coverage data.% On Target
in General Stats table (#2019)Full Changelog: https://github.com/ewels/MultiQC/compare/v1.15...v1.16
This release of MultiQC introduces speed improvements to the file search (~5-7x fold improvement) 🎉
One way it does this is by limiting the number of lines loaded by each search pattern. For the vast majority of users, this should have no effect except faster searches. However, in some edge cases it may introduce some breaking changes. Hypothetically, for example:
See the troubleshooting docs for more information.
log_filesize_limit
default (to skip large files in the search) from 10MB to 50MB.multiqc_data
, same as tables (#1861)OrderedDict
- regular dicts are fine in Py3 (#1866).
as a thousands separator (#1843)mosdepth_cumcov_dist.txt
and mosdepth_cov_dist.txt
(#1868){prefix}.mosdepth.summary.txt
(#1868)multiqc_sources.txt
(#1868)*_dist.txt
file causing a distorted Coverage distribution plot (#1960)ZeroDivisionError
error for bam_stat
results when there are 0 reads (#1735)Dockerfile
to build multi-arch images (amd64 + arm), run through a non-privileged user and build tools for non precompiled python binaries (#1541, #1541)from __future__
imports#!/usr/bin/env python
hashbangs from module filesconfig.data_format
work again (#1722)>=3.0.0
(#1642)--quiet
or --no-ansi
(#1638)prinseq-lite.pl
program for filtering, reformating or trimming genomic and metagenomic sequence data.create_unknown_barcode_barplots
with False
as default) (#1709)ZeroDivisionError
when a sample has zero reads (#1746)KeyError
- don't assume all fields present in logs (#1778)HsMetrics_genstats_table_cols
and HsMetrics_genstats_table_cols_hidden
geneBody_coverage
to plot normalized coverages using a similar formula to that used by RSeQC itself (#1792)flagstat
that displays percentage of mapped reads in a bam (hidden by default) (#1733)ValueError
if there are zero variants (#1681)custom_table_header_config
to override any config for any table headerdescription
that doesn't terminate in .
gave duplicate section descriptions.General Statistics
have a value of -
(#1656)nan
values in the report. (#1725)Version 1.12 of MultiQC brings with it a modest number of new modules, a few new core features and a swathe of bugfixes and general improvements. I hope that everyone continues to find it useful! You can see the full changes in this release here: https://github.com/ewels/MultiQC/compare/v1.11...v1.12
Special thanks to the 13 people who had their first MultiQC contributions in this release:
--no-report
flag to skip report generation (#1462)--custom-css-file
/ config.custom_css_files
option to include custom CSS in the final report (#1573)labelSize
to customise font size for axis labels in flat MatPlotLib charts (#1576).github/workflows/code_checks.py
), runs on GitHub actions CImultiqc_data.json
(#1598)path_filters
is a list, convert to list if a string is supplied (#1539)qchist
output (#1021)Quality_Metrics.csv
file (#1563)ZeroDivisionError
if no bins are found (#1586)--replace-names
into the General Statistics table (#1483)ExtractIlluminaBarcodes
to recognise more log patterns in newer versions of Picard (#1611)ZeroDivisionError
in QM_RNASeq
and skip genomic origins plot if no aligned reads are found (#1492)sambamba markdup
0.8.1 (#1617)ZeroDivisionError
if no available reads are found (#1622)-
instead of numbers (#1597)