Overview
NanoQuRe provides quality control tools for Oxford Nanopore sequencing data. Starting from a sequencing summary file produced by ONT basecallers (Guppy or Dorado), NanoQuRe generates interactive plots and summary tables — and can bundle everything into a self-contained HTML report with a single function call.
Input data
NanoQuRe expects a data frame with the columns produced by ONT basecallers. The minimum required columns are:
| Column | Type | Description |
|---|---|---|
sample_id |
character | Sample identifier |
run_id |
character | Run identifier |
channel |
integer | Pore channel number |
start_time |
numeric | Read start time in seconds |
duration |
numeric | Read duration in seconds |
sequence_length_template |
numeric | Read length in bases |
mean_qscore_template |
numeric | Mean Q score of the read |
passes_filtering |
logical | Whether the read passed basecaller filters |
Loading your own file is straightforward:
seq_summary <- read.csv("sequencing_summary.txt", sep = "\t")
# passes_filtering comes in as a string from some basecallers — coerce if needed
seq_summary$passes_filtering <- as.logical(seq_summary$passes_filtering)For this vignette we use the example dataset bundled with the package:
Generating a full QC report
The main entry point is generate_report(). It inspects
how many unique sample_id values are in your data and
automatically picks the right template — single-sample or multi-sample —
then renders a self-contained HTML file.
generate_report(sample_data, output_file = "my_QC_report.html")The rendered file will open in your browser automatically and contains all plots and summary tables covering read quality, yield, throughput, and pore activity.
Multi-sample reports
If you have multiple samples, bind their data frames together before
calling generate_report(). The function detects more than
one unique sample_id and switches to the multi-sample
template automatically:
generate_report(sample_data_A, sample_data_B, output_file = "multi_QC_report.html")What the report contains
The report bundles the output of all individual NanoQuRe functions. If you want to explore or customise any single plot, the Using Individual Functions vignette covers each one in detail.
| Function | What it shows |
|---|---|
sequencing_stats() |
Run-level summary table |
quality_stats() |
Quality metrics table (N50, mean Q, longest read) |
plot_cumulative_yield() |
Cumulative bases over time, pass vs fail |
plot_seq_throughput() |
Yield per hour over time |
plot_average_speed() |
Translocation speed (bp/s) over time |
plot_read_lengths() |
Read length distribution with mean and N50 lines |
plot_quality_distribution() |
Q score distribution with pass/fail split |
plot_active_channels() |
Channel activity decay over time |
pore_activity_heatmap() |
Per-channel activity heatmap on flowcell layout |
Session info
sessionInfo()
#> R version 4.6.1 (2026-06-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=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
#> [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
#> [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
#> [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C
#>
#> time zone: UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] NanoQuRe_1.0
#>
#> loaded via a namespace (and not attached):
#> [1] gtable_0.3.6 jsonlite_2.0.0 dplyr_1.2.1 compiler_4.6.1
#> [5] tidyselect_1.2.1 tidyr_1.3.2 jquerylib_0.1.4 scales_1.4.0
#> [9] systemfonts_1.3.2 textshaping_1.0.5 yaml_2.3.12 fastmap_1.2.0
#> [13] ggplot2_4.0.3 R6_2.6.1 generics_0.1.4 knitr_1.51
#> [17] htmlwidgets_1.6.4 tibble_3.3.1 desc_1.4.3 RColorBrewer_1.1-3
#> [21] bslib_0.11.0 pillar_1.11.1 rlang_1.2.0 DT_0.34.0
#> [25] cachem_1.1.0 xfun_0.59 S7_0.2.2 fs_2.1.0
#> [29] sass_0.4.10 lazyeval_0.2.3 otel_0.2.0 viridisLite_0.4.3
#> [33] plotly_4.12.0 cli_3.6.6 pkgdown_2.2.0 magrittr_2.0.5
#> [37] digest_0.6.39 grid_4.6.1 lifecycle_1.0.5 vctrs_0.7.3
#> [41] evaluate_1.0.5 glue_1.8.1 data.table_1.18.4 farver_2.1.2
#> [45] ragg_1.5.2 purrr_1.2.2 httr_1.4.8 rmarkdown_2.31
#> [49] tools_4.6.1 pkgconfig_2.0.3 htmltools_0.5.9