Skip to main content

abriplot

Publication-quality AMR and Virulence gene heatmap with phylogenetic tree from abricate output.

PyPI version License: MIT Python 3.8+


What it does

abriplot takes the TSV files produced by abricate (CARD and VFDB databases) and a Newick phylogenetic tree, and produces a single publication-ready figure with:

  • Phylogenetic tree — branch lengths proportional, samples ordered by topology
  • AMR gene heatmap — presence/absence matrix from CARD, genes sorted by prevalence
  • Drug-class annotation strip — one row per resistance class above the AMR block; multi-class genes appear in all relevant rows; classes auto-detected from your data
  • Virulence gene heatmap — presence/absence matrix from VFDB
  • PDF + PNG exported automatically

Example figure


Installation

pip install abriplot

No Biopython required — pure Python Newick parser included.


Quick start

abriplot \
    --input_dir  /path/to/abricate_results/ \
    --tree       /path/to/tree.nwk \
    --output     figure.pdf

This produces figure.pdf and figure.png in the current directory.


All options

usage: abriplot [-h] --input_dir DIR --tree FILE [--output FILE] [--title TEXT]
                [--min_identity FLOAT] [--min_coverage FLOAT]
                [--top_amr INT] [--top_vf INT]

required arguments:
  --input_dir DIR       Directory containing *__card.tsv and *__vfdb.tsv files
  --tree FILE           Newick tree file (.nwk / .tree)

output:
  --output FILE         Output path — pdf, png, or svg [default: abriplot_figure.pdf]
  --title TEXT          Figure title [default: 'Phylogenetic Distribution of AMR
                        and Virulence Genes']

filtering:
  --min_identity FLOAT  Minimum % identity threshold [default: 80]
  --min_coverage FLOAT  Minimum % coverage threshold [default: 80]
  --top_amr INT         Keep only the N most prevalent AMR genes [default: all]
  --top_vf INT          Keep only the N most prevalent virulence genes [default: all]

Examples

# Custom title for a publication
abriplot --input_dir results/ --tree tree.nwk --output fig1.pdf \
         --title "AMR gene distribution in V. cholerae (2002–2019)"

# Tighter figure — top 40 AMR genes, top 25 VF genes
abriplot --input_dir results/ --tree tree.nwk --output fig1.pdf \
         --top_amr 40 --top_vf 25

# Stricter filtering
abriplot --input_dir results/ --tree tree.nwk --output fig1.pdf \
         --min_identity 95 --min_coverage 90

Input file format

abricate output files must follow the naming convention:

<sample>__card.tsv
<sample>__vfdb.tsv

These are produced automatically when you run abricate with the --db card and --db vfdb flags. Example abricate command:

abricate --db card  assembly.fasta > sample__card.tsv
abricate --db vfdb  assembly.fasta > sample__vfdb.tsv

Use as a library

from abriplot.io     import load_all
from abriplot.newick import tip_order
from abriplot.plot   import (build_matrix, order_by_tree,
                              sort_genes_by_prevalence, make_figure)

with open("tree.nwk") as f:
    ordered_tips, root, leaves = tip_order(f.read())

amr_records, vf_records = load_all("results/", min_id=80, min_cov=80)

amr_mat, amr_meta = build_matrix(amr_records)
vf_mat,  _        = build_matrix(vf_records)

amr_mat = order_by_tree(amr_mat, ordered_tips)
vf_mat  = order_by_tree(vf_mat,  ordered_tips).reindex(amr_mat.index, fill_value=0)

amr_mat = sort_genes_by_prevalence(amr_mat)
vf_mat  = sort_genes_by_prevalence(vf_mat)

make_figure(amr_mat, vf_mat, amr_meta, root, leaves,
            amr_mat.index.tolist(), "figure.pdf",
            title="My custom title")

Requirements

  • Python ≥ 3.8
  • numpy ≥ 1.21
  • pandas ≥ 1.3
  • matplotlib ≥ 3.5

License

MIT © [Sushant Nimbhokar]

Metadata

Release files for abriplot 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for abriplot 0.1.4
File Size Uploaded Provenance
abriplot-0.1.4.tar.gz 14.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for abriplot 0.1.4
File Interpreter ABI Platform
abriplot-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 27.6 kB

Release files / abriplot-0.1.4.tar.gz

Download URL abriplot-0.1.4.tar.gz
Size 14.6 kB
Tags Source
SHA-256 checksum
How to use checksums
34f86aa44e6e2a480a2fc12b3cc847ebeb32befe3a5c6b92ed506030ea6c7398
BLAKE2b-256 checksum
How to use checksums
8ba627f2820571d17d91fa6c0dc4ff34eee484118769c76cc09e406fd2a09059
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / abriplot-0.1.4-py3-none-any.whl

Download URL abriplot-0.1.4-py3-none-any.whl
Size 13.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3db3167afb12abc22f25535e55960eed80375a31bed5b6e99629f694dde5fd50
BLAKE2b-256 checksum
How to use checksums
cf04a606fdc41a865b1ac6afd90e2b3fee5c59543b33cef191a27253d8db69f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Security for abriplot 0.1.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page