| """Shared ACM double-column paper style for the figures_paper package. |
| |
| Column widths follow ACM sigconf: single-column 3.25 in, double-column 6.75 in. |
| Fonts tuned for two-column legibility. pdf.fonttype=42 embeds TrueType (venue-safe). |
| """ |
| from pathlib import Path |
| import matplotlib as mpl |
| import matplotlib.pyplot as plt |
| import seaborn as sns |
|
|
| COL1 = 3.25 |
| COL2 = 6.75 |
|
|
| |
| PALETTE = list(sns.color_palette("deep")) |
| MUTED = list(sns.color_palette("muted")) |
| COLORBLIND = list(sns.color_palette("colorblind")) |
|
|
|
|
| def apply(): |
| sns.set_theme(style="whitegrid", context="paper", font_scale=1.0) |
| mpl.rcParams.update({ |
| "font.size": 8.5, |
| "axes.labelsize": 9.0, |
| "axes.titlesize": 9.5, |
| "axes.titleweight": "bold", |
| "xtick.labelsize": 8.0, |
| "ytick.labelsize": 8.0, |
| "legend.fontsize": 7.5, |
| "legend.frameon": False, |
| "figure.dpi": 150, |
| "savefig.dpi": 300, |
| "savefig.format": "pdf", |
| "savefig.bbox": "tight", |
| "savefig.pad_inches": 0.02, |
| "pdf.fonttype": 42, |
| "ps.fonttype": 42, |
| "font.family": "DejaVu Sans", |
| "axes.spines.top": False, |
| "axes.spines.right": False, |
| "axes.grid": True, |
| "grid.alpha": 0.35, |
| "grid.linewidth": 0.5, |
| "lines.linewidth": 1.6, |
| }) |
|
|
|
|
| def ensure_dirs(root): |
| root = Path(root) |
| out = {} |
| for sub in ("pdf", "png", "svg", "data"): |
| d = root / "figures_paper" / sub |
| d.mkdir(parents=True, exist_ok=True) |
| out[sub] = d |
| return out |
|
|
|
|
| def save(fig, name, out): |
| """Write PDF (vector), PNG (300 dpi preview), SVG. Closes the figure.""" |
| fig.savefig(out["pdf"] / f"{name}.pdf") |
| fig.savefig(out["png"] / f"{name}.png", dpi=300) |
| fig.savefig(out["svg"] / f"{name}.svg") |
| plt.close(fig) |
|
|
|
|
| def stat_box(ax, x, y, s, fs=8): |
| ax.text(x, y, s, transform=ax.transAxes, fontsize=fs, color="dimgray") |
|
|