Install
openclaw skills install nature-figureGenerate publication-quality figures for Nature-series journals using Python (matplotlib) or R (ggplot2). Trigger when user wants to create, polish, or redesign scientific figures for high-impact journals. Handles multi-panel layouts, Nature color palettes, correct typography, and exports SVG/PDF/PNG.
openclaw skills install nature-figureGenerate multi-panel scientific figures that meet Nature portfolio visual standards: correct typography, semantic colour palette, accessible design, and editable SVG output.
Activate when user mentions:
| Format | Width | Resolution |
|---|---|---|
| Single column | 89 mm (3.5 in) | 300 DPI min |
| 1.5 column | 120 mm (4.7 in) | 300 DPI min |
| Double column | 183 mm (7.2 in) | 300 DPI min |
| Line art | any | 600 DPI |
| Final submission | PDF or TIFF | vector preferred |
NATURE_COLORS = {
"blue": "#4878CF",
"red": "#D65F5F",
"green": "#6ACC65",
"orange": "#EE854A",
"purple": "#956CB4",
"teal": "#82C6E2",
"brown": "#D5BB67",
"gray": "#8C8C8C",
# Colorblind-safe primary pair:
"cb_blue": "#0072B2",
"cb_orange":"#E69F00",
}
If user provides a CSV, Excel, or JSON data file:
python3 ~/.openclaw/workspace/skills/nature-paper-hub/scripts/auto_figure.py \
--input <data_file> \
--output ~/Downloads/figure_<date>.pdf \
--title "[figure title]" \
--xlabel "X axis label" \
--ylabel "Y axis label" \
--type [auto|line|bar|scatter|heatmap|box]
The script auto-detects column types, chooses appropriate chart type, applies Nature style, and saves PDF + PNG.
Ask the user:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
# --- Nature style settings ---
plt.rcParams.update({
'font.family': 'Arial',
'font.size': 8,
'axes.linewidth': 0.8,
'axes.spines.top': False,
'axes.spines.right': False,
'xtick.major.width': 0.8,
'ytick.major.width': 0.8,
'xtick.major.size': 3,
'ytick.major.size': 3,
'xtick.direction': 'out',
'ytick.direction': 'out',
'figure.dpi': 300,
'savefig.dpi': 300,
'savefig.bbox': 'tight',
'savefig.pad_inches': 0.05,
'pdf.fonttype': 42, # editable text in PDF
'ps.fonttype': 42,
})
COLORS = {
"blue": "#4878CF", "red": "#D65F5F", "green": "#6ACC65",
"orange": "#EE854A", "purple": "#956CB4", "teal": "#82C6E2",
"cb_blue": "#0072B2", "cb_orange": "#E69F00",
}
# --- Figure layout ---
fig = plt.figure(figsize=(7.2, 4.0)) # double column, adjust height
gs = gridspec.GridSpec(1, 3, figure=fig, wspace=0.4, hspace=0.4)
ax_a = fig.add_subplot(gs[0])
ax_b = fig.add_subplot(gs[1])
ax_c = fig.add_subplot(gs[2])
# --- Panel labels ---
for ax, label in zip([ax_a, ax_b, ax_c], ['a', 'b', 'c']):
ax.text(-0.15, 1.05, label, transform=ax.transAxes,
fontsize=8, fontweight='bold', va='top', ha='right')
# --- YOUR DATA GOES HERE ---
# ax_a: ...
# ax_b: ...
# ax_c: ...
plt.savefig('figure1.pdf', format='pdf')
plt.savefig('figure1.png', dpi=300)
print("Saved: figure1.pdf, figure1.png")
library(ggplot2)
library(patchwork)
# Nature theme
theme_nature <- function() {
theme_classic(base_size = 8, base_family = "Arial") +
theme(
axis.line = element_line(linewidth = 0.5),
axis.ticks = element_line(linewidth = 0.5),
axis.ticks.length = unit(2, "pt"),
strip.background = element_blank(),
legend.key.size = unit(3, "mm"),
plot.margin = margin(2, 2, 2, 2, "mm")
)
}
nature_colors <- c(
blue = "#4878CF", red = "#D65F5F", green = "#6ACC65",
orange = "#EE854A", purple = "#956CB4", teal = "#82C6E2"
)
# --- YOUR PLOTS ---
# p1 <- ggplot(...) + theme_nature()
# p2 <- ggplot(...) + theme_nature()
# combined <- p1 | p2
# ggsave("figure1.pdf", combined, width = 183, height = 80, units = "mm", dpi = 300)
Before outputting, check:
Generate the corresponding figure legend text:
Use solid lines with markers; different line styles + colours for groups.
Prefer horizontal bars for many categories; overlay individual data points.
Use plt.bar() with edgecolor='black', linewidth=0.5.
Include regression line with 95% CI if showing correlation. State Pearson/Spearman r and p-value on plot.
Use diverging colourmap (e.g., RdBu_r) for correlation; sequential for intensity.
Always include colourbar with label and units.
Always overlay individual data points (stripplot or geom_jitter).
State n per group.
Recommend using BioRender (biorender.com) or Inkscape for schematics. Export as SVG and embed in figure.
Provide the user with: