BioSkills bio-reporting-quarto-reports

Build reproducible scientific documents, presentations, and websites with Quarto supporting R, Python, Julia, and Observable JS. Use when creating reproducible reports with Quarto.

install
source · Clone the upstream repo
git clone https://github.com/GPTomics/bioSkills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/GPTomics/bioSkills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/reporting/quarto-reports" ~/.claude/skills/gptomics-bioskills-bio-reporting-quarto-reports && rm -rf "$T"
manifest: reporting/quarto-reports/SKILL.md
source content

Version Compatibility

Reference examples tested with: Quarto 1.4+, DESeq2 1.42+, ggplot2 3.5+, matplotlib 3.8+, scanpy 1.10+

Before using code patterns, verify installed versions match. If versions differ:

  • CLI:
    <tool> --version
    then
    <tool> --help
    to confirm flags

If code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.

Quarto Reports

"Create a Quarto analysis report" → Write reproducible documents mixing code (Python/R), narrative, and figures that render to HTML/PDF/Word.

  • CLI:
    quarto render report.qmd --to html

Basic Document

---
title: "Analysis Report"
author: "Your Name"
date: today
format:
  html:
    toc: true
    code-fold: true
    theme: cosmo
---

Python Document

---
title: "scRNA-seq Analysis"
format: html
jupyter: python3
---

```{python}
import scanpy as sc
import matplotlib.pyplot as plt

adata = sc.read_h5ad('data.h5ad')
sc.pl.umap(adata, color='leiden')
```

R Document

---
title: "DE Analysis"
format: html
---

```{r}
library(DESeq2)
dds <- DESeqDataSetFromMatrix(counts, metadata, ~ condition)
dds <- DESeq(dds)
```

Multiple Formats

---
title: "Multi-format Report"
format:
  html:
    toc: true
  pdf:
    documentclass: article
  docx:
    reference-doc: template.docx
---
# Render all formats
quarto render report.qmd

# Render specific format
quarto render report.qmd --to pdf

Parameters

---
title: "Parameterized Report"
params:
  sample: "sample1"
  threshold: 0.05
---
# Render with parameters
quarto render report.qmd -P sample:sample2 -P threshold:0.01

Tabsets

::: {.panel-tabset}

## PCA
```{r}
plotPCA(vsd)
```

## Heatmap
```{r}
pheatmap(mat)
```

:::

Callouts

::: {.callout-note}
This is an important note about the analysis.
:::

::: {.callout-warning}
Check your input data format before proceeding.
:::

::: {.callout-tip}
Use caching for long computations.
:::

Cross-References

See @fig-volcano for the volcano plot.

```{r}
#| label: fig-volcano
#| fig-cap: "Volcano plot showing DE genes"
ggplot(res, aes(log2FC, -log10(pvalue))) + geom_point()
```

Results are summarized in @tbl-summary.

```{r}
#| label: tbl-summary
#| tbl-cap: "Summary statistics"
knitr::kable(summary_df)
```

Code Cell Options

```{python}
#| echo: true
#| warning: false
#| fig-width: 10
#| fig-height: 6
#| cache: true

import scanpy as sc
sc.pl.umap(adata, color='leiden')
```

Inline Code

We found `{python} len(sig_genes)` significant genes.
We found `{r} nrow(sig)` significant genes.

Presentations

---
title: "Analysis Results"
format: revealjs
---

## Slide 1

Content here

## Slide 2 {.smaller}

More content with smaller text

Quarto Projects

# _quarto.yml
project:
  type: website
  output-dir: docs

website:
  title: "Analysis Portal"
  navbar:
    left:
      - href: index.qmd
        text: Home
      - href: methods.qmd
        text: Methods
      - href: results.qmd
        text: Results

Bibliography

---
bibliography: references.bib
csl: nature.csl
---
Gene expression analysis was performed using DESeq2 [@love2014].

## References

Freeze Computations

# _quarto.yml
execute:
  freeze: auto  # Only re-run when source changes

Include Files

{{< include _methods.qmd >}}

Diagrams with Mermaid

```{mermaid}
flowchart LR
    A[Raw Data] --> B[QC]
    B --> C[Alignment]
    C --> D[Quantification]
    D --> E[DE Analysis]
```

Multi-Language Document

---
title: "R + Python Analysis"
---

Load in R:
```{r}
library(reticulate)
counts <- read.csv('counts.csv')
```

Process in Python:
```{python}
import pandas as pd
counts_py = r.counts  # Access R object
```

Related Skills

  • reporting/rmarkdown-reports - R-focused alternative
  • data-visualization/ggplot2-fundamentals - R visualizations
  • workflow-management/snakemake-workflows - Pipeline integration