beautiful-data-viz — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited beautiful-data-viz (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Create polished, publication-ready visualizations in Python/Jupyter with strong typography, clean layout, accessible color choices, and high data-ink. The default style is restrained: show the data, remove non-data decoration, label directly when possible, and add only the context needed to interpret the finding.
| Task | Action |
|---|---|
| Apply style | Use assets/beautiful_style.py helpers |
| Pick palette | See references/palettes.md |
| QA checklist | See references/checklist.md |
| Plot recipes | See examples/recipes.md |
| Tufte finish | Use direct_label, annotate_point, apply_range_frame, or sparkline from assets/beautiful_style.py |
from assets.beautiful_style import set_beautiful_style, finalize_axes
set_beautiful_style(medium="paper", background="light")
# build plot here
finalize_axes(ax, xlabel="Time (days)", ylabel="Value", tight=True)from assets.beautiful_style import apply_range_frame, direct_label
ax.plot(x, y, color="#666666", linewidth=1.5)
apply_range_frame(ax, x, y)
direct_label(ax, x, y, "Observed", color="#666666")Issue: Labels overlap or are unreadable Solution: Reduce tick count, rotate labels, or increase figure width.
Issue: Colors are hard to distinguish Solution: Use a colorblind-safe categorical palette and limit categories.
Issue: A chart needs a legend, many colors, and a second y-axis to fit Solution: Split it into small multiples with shared scales and direct labels.
Issue: Every figure appears twice in the executed Jupyter notebook Solution: The matplotlib inline backend's flush_figures post-execute hook auto-displays every open figure as display_data, and the cell's fig return value produces a second copy as execute_result. Fix by unregistering the hook in the preamble cell:
plt.ioff()
try:
from matplotlib_inline.backend_inline import flush_figures
get_ipython().events.unregister("post_execute", flush_figures)
except Exception:
passWith this fix, only the cell's final fig expression produces output. For figures created inside if/else blocks (where fig is not a top-level expression), use display(fig) explicitly instead of bare fig.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.