Beautify meta-analysis forest plots with customizable odds ratio points, confidence interval styles, and subgroup analysis support. Outputs PNG, PDF, or SVG.
77
72%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./scientific-skills/Data analysis/forest-plot-styler/SKILL.mdBeautifies meta-analysis or subgroup analysis forest plots, customizes Odds Ratio point sizes and confidence interval line styles.
This skill accepts: CSV or Excel files containing meta-analysis study data with OR values and confidence intervals, for the purpose of generating forest plots.
If the user's request does not involve forest plot generation or meta-analysis visualization — for example, asking to run statistical meta-analysis from scratch, perform systematic literature search, or generate other chart types — do not proceed with the workflow. Instead respond:
"forest-plot-styler is designed to beautify and generate forest plots from existing meta-analysis data. Your request appears to be outside this scope. Please provide a CSV/Excel file with study OR values and confidence intervals, or use a more appropriate tool for your task."
Do not continue the workflow when the request is out of scope, missing the required --input file, or would require unsupported assumptions. For missing inputs, state exactly which fields are missing.
python -m py_compile scripts/main.py
python scripts/main.py --help
python scripts/main.py --demo --output demo_forest_plot.pngpython scripts/main.py --input <data.csv> [options]| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--input, -i | string | - | Yes* | Input data file (CSV or Excel) |
--output, -o | string | forest_plot.png | No | Output file path |
--format, -f | string | png | No | Output format (png/pdf/svg) |
--point-size | int | 8 | No | OR point size |
--point-color | string | #2E86AB | No | OR point color |
--ci-color | string | #2E86AB | No | Confidence interval line color |
--ci-linewidth | int | 2 | No | Confidence interval line thickness |
--ci-capwidth | int | 5 | No | Confidence interval endpoint width |
--summary-color | string | #A23B72 | No | Pooled effect point color |
--summary-shape | string | diamond | No | Pooled effect point shape |
--subgroup | string | - | No | Subgroup analysis column name |
--title, -t | string | Forest Plot | No | Chart title |
--xlabel, -x | string | Odds Ratio (95% CI) | No | X-axis label |
--reference-line | float | 1.0 | No | Reference line position |
--width, -W | int | 12 | No | Image width (inches) |
--height, -H | int | auto | No | Image height (inches, auto-scales with study count) |
--dpi | int | 300 | No | Image resolution |
--font-size | int | 10 | No | Font size |
--style, -s | string | default | No | Preset style (default/minimal/dark) |
--demo | flag | - | No | Run with synthetic 5-study dataset |
*Required unless --demo is used.
CSV/Excel files must contain the following columns:
| Column Name | Description | Type |
|---|---|---|
study | Study name | Text |
or | Odds Ratio value | Numeric |
ci_lower | Confidence interval lower bound | Numeric |
ci_upper | Confidence interval upper bound | Numeric |
weight | Weight (optional, for point size) | Numeric |
subgroup | Subgroup label (optional) | Text |
study,or,ci_lower,ci_upper,weight,subgroup
Study A,0.85,0.65,1.12,15.2,Drug A
Study B,0.72,0.55,0.94,18.5,Drug A
Study C,1.15,0.88,1.50,12.3,Drug B
Study D,0.95,0.75,1.20,14.8,Drug Bpython scripts/main.py -i meta_data.csvpython scripts/main.py -i meta_data.csv \
--point-color="#E63946" \
--ci-color="#457B9D" \
--point-size=10 \
--ci-linewidth=3 \
-t "Meta-Analysis of Treatment Effects"python scripts/main.py -i meta_data.csv \
--subgroup subgroup_column \
--summary-color="#F4A261" \
-o subgroup_forest.pngpython scripts/main.py --demo --output demo_forest_plot.pngdefault — Blue color scheme, standard font size, white backgroundminimal — Clean lines, grayscale color scheme, no grid linesdark — Dark background (#1E1E1E), bright data points, suitable for presentationspip install -r requirements.txtIf scripts/main.py fails or required inputs are incomplete:
study, or, ci_lower, ci_upper) and re-run with --format png as the simplest output mode.Every final response must make these items explicit when relevant:
scripts/main.py fails, report the failure point, summarize what still can be completed safely, and provide a manual fallback.or value is ≤ 0, reject with: Error: OR values must be > 0 (found invalid values at rows: {indices}).ci_lower >= ci_upper, reject with: Error: ci_lower must be less than ci_upper (found invalid rows: {indices}).--subgroup is used, each subgroup summary diamond is labeled with the subgroup name on the y-axis. If subgroup labels are missing from the output, this is a known rendering gap — report it in the Risks section.--width to increase figure width if labels are cut off.SE = (log(ci_upper) - log(ci_lower)) / (2 * 1.96)Use the following fixed structure for non-trivial requests:
For stress/multi-constraint requests, also include:
If the request is simple, you may compress the structure, but still keep assumptions and limits explicit when they affect correctness.
ca9aaa4
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.