Ggterm Markdown
by shandley
Generate markdown reports with embedded ggterm visualizations. Use when creating analysis reports, documenting results, exporting findings, or when the user wants plots in markdown format for sharing or documentation.
Skill Details
Repository Files
2 files in this skill directory
name: ggterm-markdown description: Generate markdown reports with embedded ggterm visualizations. Use when creating analysis reports, documenting results, exporting findings, or when the user wants plots in markdown format for sharing or documentation. allowed-tools: Write, Read, Bash(bun:), Bash(npx:)
Markdown Reports with ggterm
Generate analysis reports with embedded terminal visualizations and reproducible plot specifications.
Report Structure
A well-structured analysis report includes:
- Title and Overview - What was analyzed and why
- Data Summary - Shape, columns, key statistics
- Visualizations - Embedded plots with interpretations
- Findings - Key insights from the analysis
- Appendix - Plot specifications for reproducibility
Basic Report Template
import { gg, geom_point, geom_line } from '@ggterm/core'
import { writeFileSync } from 'fs'
// Create plots
const scatterPlot = gg(data)
.aes({ x: 'x', y: 'y', color: 'category' })
.geom(geom_point())
.labs({ title: 'Relationship Analysis' })
const trendPlot = gg(data)
.aes({ x: 'time', y: 'value' })
.geom(geom_line())
.labs({ title: 'Trend Over Time' })
// Render plots to strings
const scatter = scatterPlot.render({ width: 72, height: 18 })
const trend = trendPlot.render({ width: 72, height: 18 })
// Build markdown report
const report = `# Analysis Report: ${datasetName}
## Overview
This report analyzes ${data.length} observations across ${Object.keys(data[0]).length} variables.
## Data Summary
| Metric | Value |
|--------|-------|
| Rows | ${data.length} |
| Columns | ${Object.keys(data[0]).length} |
| Date Range | ${minDate} to ${maxDate} |
## Visualizations
### Scatter Plot
\`\`\`
${scatter}
\`\`\`
**Interpretation**: The scatter plot shows [describe the relationship observed].
### Trend Analysis
\`\`\`
${trend}
\`\`\`
**Interpretation**: The trend indicates [describe the pattern observed].
## Key Findings
1. **Finding 1**: Description of first key insight
2. **Finding 2**: Description of second key insight
3. **Finding 3**: Description of third key insight
## Appendix: Plot Specifications
<details>
<summary>Scatter Plot Spec (JSON)</summary>
\`\`\`json
${JSON.stringify(scatterPlot.spec(), null, 2)}
\`\`\`
</details>
<details>
<summary>Trend Plot Spec (JSON)</summary>
\`\`\`json
${JSON.stringify(trendPlot.spec(), null, 2)}
\`\`\`
</details>
---
*Generated with ggterm*
`
writeFileSync('analysis-report.md', report)
console.log('Report saved to analysis-report.md')
Embedding Multiple Plots
For reports with many visualizations:
interface PlotSection {
title: string
plot: GGPlot
interpretation: string
}
function generateReport(
title: string,
overview: string,
sections: PlotSection[],
findings: string[]
): string {
const plotSections = sections.map(({ title, plot, interpretation }) => `
### ${title}
\`\`\`
${plot.render({ width: 72, height: 16 })}
\`\`\`
**Interpretation**: ${interpretation}
`).join('\n')
const findingsList = findings
.map((f, i) => `${i + 1}. ${f}`)
.join('\n')
const specs = sections.map(({ title, plot }) => `
<details>
<summary>${title} Spec</summary>
\`\`\`json
${JSON.stringify(plot.spec(), null, 2)}
\`\`\`
</details>
`).join('\n')
return `# ${title}
## Overview
${overview}
## Visualizations
${plotSections}
## Key Findings
${findingsList}
## Appendix: Reproducibility
${specs}
---
*Generated with ggterm*
`
}
Width Guidelines
Choose plot width based on target context:
| Context | Width | Height | Notes |
|---|---|---|---|
| GitHub README | 72-80 | 16-20 | Standard terminal width |
| GitHub Issues | 72 | 14-18 | Compact for discussions |
| Documentation | 80-100 | 20-24 | More detail |
| Presentations | 60-70 | 12-16 | Readable at distance |
Including Data Tables
function markdownTable(data: Record<string, unknown>[], columns?: string[]): string {
const cols = columns || Object.keys(data[0])
const header = `| ${cols.join(' | ')} |`
const separator = `| ${cols.map(() => '---').join(' | ')} |`
const rows = data.map(row =>
`| ${cols.map(c => String(row[c] ?? '')).join(' | ')} |`
).join('\n')
return `${header}\n${separator}\n${rows}`
}
// Usage
const summaryTable = markdownTable([
{ metric: 'Mean', value: mean.toFixed(2) },
{ metric: 'Median', value: median.toFixed(2) },
{ metric: 'Std Dev', value: std.toFixed(2) },
])
Full Example: EDA Report
import { gg, geom_histogram, geom_boxplot, geom_point, facet_wrap } from '@ggterm/core'
import { writeFileSync } from 'fs'
// Assume data is loaded
const numericCols = ['age', 'income', 'score']
const categoricalCols = ['region', 'segment']
// Generate distribution plots
const distributions = numericCols.map(col => ({
title: `Distribution of ${col}`,
plot: gg(data).aes({ x: col }).geom(geom_histogram({ bins: 20 })),
interpretation: `Shows the distribution of ${col} values.`
}))
// Generate comparison plots
const comparisons = categoricalCols.map(cat => ({
title: `Score by ${cat}`,
plot: gg(data).aes({ x: cat, y: 'score' }).geom(geom_boxplot()),
interpretation: `Compares score across ${cat} groups.`
}))
// Correlation scatter
const correlation = {
title: 'Age vs Income',
plot: gg(data)
.aes({ x: 'age', y: 'income', color: 'region' })
.geom(geom_point({ alpha: 0.6 })),
interpretation: 'Shows relationship between age and income by region.'
}
const report = generateReport(
'Exploratory Data Analysis',
`Analysis of ${data.length} customer records.`,
[...distributions, ...comparisons, correlation],
[
'Income is right-skewed with median $X',
'Region A shows significantly higher scores',
'Age and income show moderate positive correlation'
]
)
writeFileSync('eda-report.md', report)
Tips
- Keep plots compact - Use 16-20 lines height for readability
- Include interpretations - Don't just show plots, explain them
- Save specs - Always include PlotSpec JSON for reproducibility
- Use collapsible sections -
<details>tags keep reports clean - Match audience - Adjust technical depth to readers
For report templates, see templates/.
Related Skills
Dbt Transformation Patterns
Master dbt (data build tool) for analytics engineering with model organization, testing, documentation, and incremental strategies. Use when building data transformations, creating data models, or implementing analytics engineering best practices.
Clinical Decision Support
Generate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug develo
Scientific Schematics
Create publication-quality scientific diagrams using Nano Banana Pro AI with smart iterative refinement. Uses Gemini 3 Pro for quality review. Only regenerates if quality is below threshold for your document type. Specialized in neural network architectures, system diagrams, flowcharts, biological pathways, and complex scientific visualizations.
Mermaid Diagrams
Comprehensive guide for creating software diagrams using Mermaid syntax. Use when users need to create, visualize, or document software through diagrams including class diagrams (domain modeling, object-oriented design), sequence diagrams (application flows, API interactions, code execution), flowcharts (processes, algorithms, user journeys), entity relationship diagrams (database schemas), C4 architecture diagrams (system context, containers, components), state diagrams, git graphs, pie charts,
Diagram Generation
Mermaid diagram generation for architecture visualization, data flow diagrams, and component relationships. Use for documentation, PR descriptions, and architectural analysis.
Scientific Schematics
Create publication-quality scientific diagrams using Nano Banana Pro AI with smart iterative refinement. Uses Gemini 3 Pro for quality review. Only regenerates if quality is below threshold for your document type. Specialized in neural network architectures, system diagrams, flowcharts, biological pathways, and complex scientific visualizations.
Clinical Decision Support
Generate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug develo
Materialize Docs
Materialize documentation for SQL syntax, data ingestion, concepts, and best practices. Use when users ask about Materialize queries, sources, sinks, views, or clusters.
Dbt Transformation Patterns
Master dbt (data build tool) for analytics engineering with model organization, testing, documentation, and incremental strategies. Use when building data transformations, creating data models, or implementing analytics engineering best practices.
Mermaidjs V11
Create diagrams and visualizations using Mermaid.js v11 syntax. Use when generating flowcharts, sequence diagrams, class diagrams, state diagrams, ER diagrams, Gantt charts, user journeys, timelines, architecture diagrams, or any of 24+ diagram types. Supports JavaScript API integration, CLI rendering to SVG/PNG/PDF, theming, configuration, and accessibility features. Essential for documentation, technical diagrams, project planning, system architecture, and visual communication.
