[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6QMSQYZ8KCTVCMRZ30FBCAM":3,"skill-same:01M6QMSQYZ8KCTVCMRZ30FBCAM":113},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":52,"linkOnly":53,"markdownContent":54,"markdownBody":55,"frontMatter":56,"refName":76,"commitSha":77,"skillDirectory":78,"forksCount":14,"repositoryHtmlUrl":79,"repositoryHomepageUrl":80,"ownerHtmlUrl":81,"ownerBlogUrl":82,"ownerDescription":83,"updatedAt":84,"install":85,"resources":98},"01M6QMSQYZ8KCTVCMRZ30FBCAM","academic-plotting",null,"Generates publication-quality figures for ML papers from research context. Given a paper section or description, extracts system components and relationships to generate architecture diagrams via Gemini. Given experiment results or data, auto-selects chart type and generates data-driven figures via matplotlib\u002Fseaborn. Use when creating any figure for a conference paper.","Tashima-Tarsh\u002FDisha6.6","Tashima-Tarsh","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F269906498?v=4","01M6PBH98X03XERH0HFT4PFB1P","NITISH KUMAR","01M6PBH9DA0M6KM3Z12P848F0K",0,"MIT","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-academic-plotting\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"academic plotting","plotting","Academic","numpy","section","data-driven","for","generate architecture","figures","chart","writing","auto","use","context","system","generate","architecture","components","gemini","google","2026-11-10 10:12:30",false,"---\nname: academic-plotting\ndescription: Generates publication-quality figures for ML papers from research context. Given a paper section or description, extracts system components and relationships to generate architecture diagrams via Gemini. Given experiment results or data, auto-selects chart type and generates data-driven figures via matplotlib\u002Fseaborn. Use when creating any figure for a conference paper.\nversion: 1.0.0\nauthor: Orchestra Research\nlicense: MIT\ntags: [Academic Writing, Visualization, Matplotlib, Seaborn, Plotting, Figures, Diagrams, NeurIPS, ICML, ICLR, LaTeX]\ndependencies: [matplotlib>=3.8.0, seaborn>=0.13.0, numpy, google-genai>=1.0.0]\ncategory: \"ai-research\"\n---\n\n# Academic Plotting for ML Papers\n\nGenerate publication-quality figures for ML\u002FAI conference papers. Two distinct workflows:\n\n1. **Diagram figures** (architecture, system design, workflows, pipelines) — AI image generation via Gemini\n2. **Data figures** (line charts, bar charts, scatter plots, heatmaps, ablations) — matplotlib\u002Fseaborn\n\n## When to Use Which Workflow\n\n| Figure Type | Tool | Why |\n|-------------|------|-----|\n| Architecture \u002F system diagram | Gemini (Workflow 1) | Complex spatial layouts with boxes, arrows, labels |\n| Workflow \u002F pipeline \u002F lifecycle | Gemini (Workflow 1) | Multi-step processes with connections |\n| Bar chart, line plot, scatter | matplotlib (Workflow 2) | Precise numerical data, reproducible |\n| Heatmap, confusion matrix | matplotlib\u002Fseaborn (Workflow 2) | Structured grid data |\n| Ablation table as chart | matplotlib (Workflow 2) | Grouped bars or line comparisons |\n| Pie \u002F donut chart | matplotlib (Workflow 2) | Proportional data (use sparingly in ML papers) |\n| Training curves | matplotlib (Workflow 2) | Loss\u002Faccuracy over steps\u002Fepochs |\n\n**Rule of thumb**: If the figure has numerical axes, use matplotlib. If the figure has boxes and arrows, use Gemini.\n\n---\n\n## Step 0: Context Analysis & Extraction\n\nThe user will typically provide one of these inputs — not a ready-made specification:\n\n| Input Type | Example | What to Extract |\n|-----------|---------|-----------------|\n| Full paper \u002F section draft | \"Here's our method section...\" | System components, their relationships, data flow |\n| Description paragraph | \"Our system has three layers that...\" | Key entities, hierarchy, connections |\n| Raw results \u002F data table | \"MMLU: 85.2, HumanEval: 72.1...\" | Metrics, methods, comparison structure |\n| CSV \u002F JSON data | Experiment log files | Variables, trends, grouping dimensions |\n| Vague request | \"Make a figure for the overview\" | Read surrounding paper context to infer content |\n\n### Extraction Workflow\n\n**For diagrams** (research context → architecture figure):\n\n1. **Read the provided context** — paper section, abstract, or description paragraph\n2. **Identify visual entities** — What are the main components\u002Fmodules\u002Fstages?\n   - Look for: nouns that represent system parts, named modules, layers, stages\n   - Count them: if >8 top-level entities, consider grouping into sections\n3. **Identify relationships** — How do components connect?\n   - Look for: verbs describing data flow (\"sends to\", \"queries\", \"feeds into\")\n   - Classify: data flow (solid arrow), control flow (gray), error path (dashed red)\n4. **Determine layout pattern**:\n   - Sequential pipeline → left-to-right flow\n   - Layered architecture → horizontal bands stacked vertically\n   - Hub-and-spoke → central node with radiating connections\n   - Hierarchical → top-down tree\n5. **Assign colors** — One accent color per logical group\u002Flayer\n6. **Write every label exactly** — Extract exact terminology from the paper text\n\n**For data charts** (results → figure):\n\n1. **Read the provided data** — table, paragraph with numbers, CSV, or JSON\n2. **Identify dimensions**:\n   - What is being compared? (methods, models, configurations) → categorical axis\n   - What is the metric? (accuracy, loss, latency, F1) → value axis\n   - Is there a time\u002Fstep dimension? → line plot\n   - Are there multiple metrics? → multi-panel or grouped bars\n3. **Choose chart type** automatically using this priority:\n   - Has a step\u002Ftime axis → **line plot**\n   - Comparing N methods on M benchmarks → **grouped bar chart**\n   - Single ranking → **horizontal bar** (leaderboard)\n   - Correlation between two continuous variables → **scatter plot**\n   - Square matrix of values → **heatmap**\n   - Proportional breakdown → **stacked bar** (avoid pie charts)\n4. **Determine figure sizing** — Single column vs full width based on data density\n5. **Highlight \"our method\"** — Identify which entry is the paper's contribution and give it a distinct color\n\n### Auto-Detection Examples\n\n**Context → Diagram**: \"Our system has a Planner, Executor, and Verifier. Planner sends plans to Executor, Executor returns results to Verifier, Verifier feeds back to Planner on failure.\"\n→ 3 entities, cycle layout, dashed feedback arrow → **Workflow 1 (Gemini)**\n\n**Data → Chart**: \"GPT-4: MMLU 86.4, HumanEval 67.0. Ours: 88.1, 71.2. Llama-3: 79.3, 62.1.\"\n→ 3 methods × 2 benchmarks → **Workflow 2 (grouped bar)**, highlight \"Ours\" in coral\n\n---\n\n## Workflow 1: Architecture & System Diagrams (AI Image Generation)\n\nUse Gemini 3 Pro Image Preview to generate diagrams. **Choose a visual style first** — this is the single biggest factor in whether the figure looks professional or generic.\n\n### Visual Styles\n\nPick one style per paper (all figures should be consistent):\n\n#### Style A: \"Sketch \u002F 简笔画\" (Hand-Drawn)\n\nWarm, approachable, memorable. Ideal for overview figures and system introductions. Looks like a whiteboard sketch refined by a designer.\n\n```\nVISUAL STYLE — HAND-DRAWN SKETCH:\n- Slightly irregular, hand-drawn line quality — lines wobble gently, not perfectly straight\n- Rounded, soft shapes with visible pen strokes (like drawn with a thick felt-tip marker)\n- Warm off-white background (#FAFAF7), NOT pure white\n- Fill colors are soft watercolor-like washes: muted blue (#D6E4F0), soft peach (#F5DEB3),\n  light sage (#D4E6D4), pale lavender (#E6DFF0)\n- Borders are dark charcoal (#2C2C2C) with 2-3px line weight, slightly uneven\n- Arrows are hand-drawn with slight curves, ending in simple open arrowheads (not filled triangles)\n- Text uses a rounded sans-serif font (like Comic Neue or Architects Daughter feel)\n- Small doodle-style icons inside boxes: a tiny gear ⚙ for processing, a lightbulb ? for ideas,\n  a magnifying glass ? for search — rendered as simple line drawings, NOT emoji\n- Overall feel: a carefully drawn whiteboard diagram, clean but with personality\n- NO clip art, NO stock icons, NO photorealistic elements\n```\n\n#### Style B: \"Modern Minimal\" (Clean & Bold)\n\nConfident, authoritative. Best for method figures where precision matters.\n\n```\nVISUAL STYLE — MODERN MINIMAL:\n- Ultra-clean geometric shapes with crisp edges\n- Bold color blocks as backgrounds for sections — NOT just accent bars, but full section fills\n  using desaturated tones: slate blue (#E8EDF2), warm sand (#F5F0E8), cool mint (#E8F2EE)\n- Component boxes have ROUNDED CORNERS (12px radius), NO visible border — they float on\n  the section background using subtle shadow (1px, 4px blur, rgba(0,0,0,0.06))\n- ONE accent color per section used sparingly on key elements: Deep blue (#2563EB),\n  Emerald (#059669), Amber (#D97706), Rose (#E11D48)\n- Arrows are thin (1.5px), dark gray (#6B7280), with small filled circle at source\n  and clean arrowhead at target — NOT thick colored arrows\n- Typography: Inter or system sans-serif, title 600 weight, body 400 weight\n- Labels INSIDE boxes, not beside them\n- Generous whitespace — at least 24px between elements\n- NO decorative elements, NO icons — let the structure speak\n```\n\n#### Style C: \"Illustrated Technical\" (Icon-Rich)\n\nEngaging, explanatory. Good for tutorial-style papers and figures that need to be self-explanatory.\n\n```\nVISUAL STYLE — ILLUSTRATED TECHNICAL:\n- Each major component has a small MEANINGFUL ICON drawn in a consistent line-art style\n  (single color, 2px stroke, ~24x24px): brain icon for reasoning, database cylinder for storage,\n  arrow-loop for iteration, network nodes for communication\n- Components sit inside soft rounded rectangles with a LEFT COLOR STRIP (4px wide)\n- Background is pure white, but each logical group has a very faint colored region behind it\n  (#F8FAFC for blue group, #FFF8F0 for orange group)\n- Connections use CURVED bezier paths (not straight lines), colored by SOURCE component\n- Key data flows are THICKER (3px) than secondary flows (1px, dashed)\n- Small annotation badges on arrows: \"×N\" for repeated operations, \"optional\" in italics\n- Title labels are ABOVE each section in small caps, letter-spaced\n- Overall: like a well-designed API documentation diagram\n```\n\n#### Style D: \"Accent Bar\" (Classic Academic)\n\nThe default academic style. Safe for any venue, works well in grayscale.\n\n```\nVISUAL STYLE — CLASSIC ACCENT BAR:\n- Horizontal section bands stacked vertically, pale gray (#F7F7F5) fill\n- Thick colored LEFT ACCENT BAR (8px) distinguishes each section\n- Content boxes: white fill, thin #DDD border, 4px rounded corners\n- Section palette: Blue #4A90D9, Teal #5BA58B, Amber #D4A252, Slate #7B8794\n- Sans-serif typography (Helvetica\u002FArial), bold titles, regular body\n- Colored arrows match their SOURCE section\n- Clean, flat, zero decoration\n```\n\n### Curated Color Palettes\n\n**\"Ocean Dusk\"** (professional, calming — default recommendation):\n`#264653` deep teal, `#2A9D8F` teal, `#E9C46A` gold, `#F4A261` sandy orange, `#E76F51` burnt coral\n\n**\"Ink & Wash\"** (for 简笔画 style):\n`#2C2C2C` charcoal ink, `#D6E4F0` washed blue, `#F5DEB3` washed wheat, `#D4E6D4` washed sage, `#E6DFF0` washed lavender\n\n**\"Nord\"** (for modern minimal):\n`#2E3440` polar night, `#5E81AC` frost blue, `#A3BE8C` aurora green, `#EBCB8B` aurora yellow, `#BF616A` aurora red\n\n**\"Okabe-Ito\"** (universal colorblind-safe, required for data charts):\n`#E69F00` orange, `#56B4E9` sky blue, `#009E73` green, `#F0E442` yellow, `#0072B2` blue, `#D55E00` vermillion, `#CC79A7` pink\n\n### Checklist\n\n- [ ] **Extract from context**: Read paper\u002Fdescription, identify entities and relationships\n- [ ] **Choose visual style** (A\u002FB\u002FC\u002FD) — match the paper's tone and venue\n- [ ] **Choose color palette** — or use one consistent with existing paper figures\n- [ ] Obtain Gemini API key (`GEMINI_API_KEY` env var)\n- [ ] Write a detailed prompt: style block + layout + connections + constraints\n- [ ] Generate script at `figures\u002Fgen_fig_\u003Cname>.py`, run for 3 attempts\n- [ ] Review, select best, save as `figures\u002Ffig_\u003Cname>.png`\n\n### Prompt Structure (6 Sections)\n\nEvery Gemini prompt must include these sections in order:\n\n```\n1. FRAMING (5 lines): \"Create a [STYLE_NAME]-style technical diagram for a\n   [VENUE] paper. The diagram should feel [ADJECTIVES]...\"\n\n2. VISUAL STYLE (20-30 lines): Copy the full style block from above (A\u002FB\u002FC\u002FD).\n   This is the most important section — it determines the entire visual character.\n\n3. COLOR PALETTE (10 lines): Exact hex codes for every color used.\n\n4. LAYOUT (50-150 lines): Every component, box, section — exact text, spatial\n   arrangement, and grouping. Be exhaustively specific.\n\n5. CONNECTIONS (30-80 lines): Every arrow individually — source, target, style,\n   label, routing direction.\n\n6. CONSTRAINTS (10 lines): What NOT to include. Adapt per style — e.g., sketch\n   style allows slight irregularity but still no clip art.\n```\n\n### Generation Script Template\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Generate [FIGURE_NAME] diagram using Gemini image generation.\"\"\"\nimport os, sys, time\nfrom google import genai\n\nAPI_KEY = os.environ.get(\"GEMINI_API_KEY\")\nif not API_KEY:\n    print(\"ERROR: Set GEMINI_API_KEY environment variable.\")\n    print(\"  Get a key at: https:\u002F\u002Faistudio.google.com\u002Fapikey\")\n    sys.exit(1)\n\nMODEL = \"gemini-3-pro-image-preview\"\nOUTPUT_DIR = os.path.dirname(os.path.abspath(__file__))\nclient = genai.Client(api_key=API_KEY)\n\nPROMPT = \"\"\"\n[PASTE YOUR 6-SECTION PROMPT HERE]\n\"\"\"\n\ndef generate_image(prompt_text, attempt_num):\n    print(f\"\\n{'='*60}\\nAttempt {attempt_num}\\n{'='*60}\")\n    try:\n        response = client.models.generate_content(\n            model=MODEL,\n            contents=prompt_text,\n            config=genai.types.GenerateContentConfig(\n                response_modalities=[\"IMAGE\", \"TEXT\"],\n            ),\n        )\n        output_path = os.path.join(OUTPUT_DIR, f\"fig_NAME_attempt{attempt_num}.png\")\n        for part in response.candidates[0].content.parts:\n            if part.inline_data:\n                with open(output_path, \"wb\") as f:\n                    f.write(part.inline_data.data)\n                print(f\"Saved: {output_path} ({os.path.getsize(output_path):,} bytes)\")\n                return output_path\n            elif part.text:\n                print(f\"Text: {part.text[:300]}\")\n        print(\"WARNING: No image in response\")\n        return None\n    except Exception as e:\n        print(f\"ERROR: {e}\")\n        return None\n\ndef main():\n    results = []\n    for i in range(1, 4):\n        if i > 1:\n            time.sleep(2)\n        path = generate_image(PROMPT, i)\n        if path:\n            results.append(path)\n    if not results:\n        print(\"All attempts failed!\")\n        sys.exit(1)\n    print(f\"\\nGenerated {len(results)} attempts. Review and pick the best.\")\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Key Rules\n\n- **Always 3 attempts** — quality varies significantly between runs\n- **Style block is mandatory** — without it, Gemini defaults to generic corporate look\n- **Never hardcode API keys** — use `os.environ.get(\"GEMINI_API_KEY\")`\n- **Save generation scripts** — reproducibility is critical\n- **Specify every label exactly** — Gemini may misspell or rearrange text\n\n**Full prompt examples per style**: See [references\u002Fdiagram-generation.md](references\u002Fdiagram-generation.md)\n\n---\n\n## Workflow 2: Data-Driven Charts (matplotlib\u002Fseaborn)\n\nFor any figure with numerical data, axes, or quantitative comparisons.\n\n### Checklist\n\n- [ ] **Extract from context**: Parse results\u002Fdata, identify methods, metrics, and comparison structure\n- [ ] **Auto-select chart type** based on data dimensions (see decision guide below)\n- [ ] Prepare data (CSV, dict, or inline arrays)\n- [ ] Apply publication styling (fonts, colors, sizes)\n- [ ] Highlight \"our method\" with a distinct color\n- [ ] Export as both PDF (vector) and PNG (300 DPI)\n- [ ] Verify LaTeX font compatibility\n- [ ] Save script at `figures\u002Fgen_fig_\u003Cname>.py`\n\n### Chart Type Decision Guide\n\n| Data Pattern | Best Chart | Notes |\n|-------------|------------|-------|\n| Trend over time\u002Fsteps | Line plot | Training curves, scaling laws |\n| Comparing categories | Grouped bar chart | Model comparisons, ablations |\n| Distribution | Violin \u002F box plot | Score distributions across methods |\n| Correlation | Scatter plot | Embedding analysis, metric correlation |\n| Grid of values | Heatmap | Attention maps, confusion matrices |\n| Part of whole | Stacked bar (not pie) | Prefer stacked bar over pie in ML papers |\n| Many methods, one metric | Horizontal bar | Leaderboard-style comparisons |\n\n### Publication Styling Template\n\n```python\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# --- Publication defaults (polished, not generic) ---\nplt.rcParams.update({\n    \"font.family\": \"serif\", \"font.serif\": [\"Times New Roman\", \"DejaVu Serif\"],\n    \"font.size\": 10, \"axes.titlesize\": 11, \"axes.titleweight\": \"bold\",\n    \"axes.labelsize\": 10, \"legend.fontsize\": 8.5, \"legend.frameon\": False,\n    \"figure.dpi\": 300, \"savefig.dpi\": 300, \"savefig.bbox\": \"tight\",\n    \"axes.spines.top\": False, \"axes.spines.right\": False,\n    \"axes.grid\": True, \"grid.alpha\": 0.15, \"grid.linestyle\": \"-\",\n    \"lines.linewidth\": 1.8, \"lines.markersize\": 5,\n})\n\n# --- \"Ocean Dusk\" palette (professional, distinctive, colorblind-safe) ---\nCOLORS = [\"#264653\", \"#2A9D8F\", \"#E9C46A\", \"#F4A261\", \"#E76F51\",\n          \"#0072B2\", \"#56B4E9\", \"#8C8C8C\"]\nOUR_COLOR = \"#E76F51\"       # coral — warm, stands out\nBASELINE_COLOR = \"#B0BEC5\"  # cool gray — recedes\nFIG_SINGLE, FIG_FULL = (3.25, 2.5), (6.75, 2.8)\n```\n\n### Common Chart Patterns\n\n**Line plot (training curves)** — with markers and confidence bands:\n\n```python\nfig, ax = plt.subplots(figsize=FIG_SINGLE)\nmarkers = [\"o\", \"s\", \"^\", \"D\", \"v\"]\nfor i, (method, (mean, std)) in enumerate(results.items()):\n    color = OUR_COLOR if method == \"Ours\" else COLORS[i]\n    ax.plot(steps, mean, label=method, color=color,\n            marker=markers[i % 5], markevery=max(1, len(steps)\u002F\u002F8),\n            markersize=4, zorder=3)\n    ax.fill_between(steps, mean - std, mean + std, color=color, alpha=0.12)\nax.set_xlabel(\"Training Steps\")\nax.set_ylabel(\"Accuracy (%)\")\nax.legend(loc=\"lower right\")\nfig.savefig(\"figures\u002Ffig_training.pdf\")\nfig.savefig(\"figures\u002Ffig_training.png\", dpi=300)\n```\n\n**Grouped bar chart (ablation)** — with value labels:\n\n```python\nfig, ax = plt.subplots(figsize=FIG_FULL)\nx = np.arange(len(categories))\nn = len(methods)\nwidth = 0.7 \u002F n\nfor i, (method, scores) in enumerate(methods.items()):\n    color = OUR_COLOR if method == \"Ours\" else COLORS[i]\n    offset = (i - n \u002F 2 + 0.5) * width\n    bars = ax.bar(x + offset, scores, width * 0.9, label=method, color=color,\n                  edgecolor=\"white\", linewidth=0.5)\n    for bar, s in zip(bars, scores):\n        ax.text(bar.get_x() + bar.get_width()\u002F2, bar.get_height() + 0.3,\n                f\"{s:.1f}\", ha=\"center\", va=\"bottom\", fontsize=7, color=\"#444\")\nax.set_xticks(x)\nax.set_xticklabels(categories)\nax.set_ylabel(\"Score\")\nax.legend(ncol=min(n, 4))\nfig.savefig(\"figures\u002Ffig_ablation.pdf\")\n```\n\n**Heatmap** — with diverging colormap and clean borders:\n\n```python\nimport seaborn as sns\nfig, ax = plt.subplots(figsize=(4, 3.5))\nsns.heatmap(matrix, annot=True, fmt=\".2f\", cmap=\"YlOrRd\", ax=ax,\n            cbar_kws={\"shrink\": 0.75, \"aspect\": 20},\n            linewidths=1.5, linecolor=\"white\",\n            annot_kws={\"size\": 8, \"weight\": \"medium\"})\nax.set_xlabel(\"Predicted\")\nax.set_ylabel(\"Actual\")\nfig.savefig(\"figures\u002Ffig_confusion.pdf\")\n```\n\n**Horizontal bar (leaderboard)** — with \"our method\" highlight:\n\n```python\nfig, ax = plt.subplots(figsize=FIG_SINGLE)\ny_pos = np.arange(len(models))\ncolors = [BASELINE_COLOR] * len(models)\ncolors[our_idx] = OUR_COLOR\nbars = ax.barh(y_pos, scores, color=colors, height=0.55,\n               edgecolor=\"white\", linewidth=0.5)\nax.set_yticks(y_pos)\nax.set_yticklabels(models)\nax.set_xlabel(\"Accuracy (%)\")\nax.invert_yaxis()\nfor bar, s in zip(bars, scores):\n    ax.text(bar.get_width() + 0.3, bar.get_y() + bar.get_height()\u002F2,\n            f\"{s:.1f}\", va=\"center\", fontsize=8, color=\"#444\")\nfig.savefig(\"figures\u002Ffig_leaderboard.pdf\")\n```\n\n**Full pattern library** (scaling laws, violin plots, multi-panel, radar): See [references\u002Fdata-visualization.md](references\u002Fdata-visualization.md)\n\n---\n\n## Publication Style Quick Reference\n\n| Venue | Single Col | Full Width | Font |\n|-------|-----------|------------|------|\n| NeurIPS | 5.5 in | 5.5 in | Times |\n| ICML | 3.25 in | 6.75 in | Times |\n| ICLR | 5.5 in | 5.5 in | Times |\n| ACL | 3.3 in | 6.8 in | Times |\n| AAAI | 3.3 in | 7.0 in | Times |\n\n**Always export PDF** for vector quality. PNG only for AI-generated diagrams.\n\n**Venue-specific details, LaTeX integration, font matching, accessibility checklist**: See [references\u002Fstyle-guide.md](references\u002Fstyle-guide.md)\n\n---\n\n## Common Issues\n\n| Issue | Solution |\n|-------|----------|\n| Fonts look wrong in LaTeX | Export PDF, set `text.usetex=True`, or use `font.family=serif` |\n| Figure too large for column | Check venue width limits, use `figsize` in inches |\n| Colors indistinguishable in print | Use colorblind-safe palette + different line styles\u002Fmarkers |\n| Gemini misspells labels | Spell out every label exactly in prompt, add \"SPELL EXACTLY\" constraint |\n| Gemini ignores style | Add more negative constraints, be more specific about hex colors |\n| Blurry figures in PDF | Export as PDF (vector), not PNG; or use 300+ DPI for PNG |\n| Legend overlaps data | Use `bbox_to_anchor`, `loc=\"upper left\"`, or external legend |\n| Too many tick labels | Use `ax.xaxis.set_major_locator(MaxNLocator(5))` |\n\n## When to Use vs Alternatives\n\n| Need | This Skill | Alternative |\n|------|-----------|-------------|\n| Architecture diagrams | Gemini generation | TikZ (manual), draw.io (interactive), Mermaid (simple) |\n| Data charts | matplotlib\u002Fseaborn | Plotly (interactive), R\u002Fggplot2 (statistics-heavy) |\n| Full paper writing | Use with `ml-paper-writing` | — |\n| Poster figures | Larger fonts, wider | `latex-posters` skill |\n| Presentation figures | Larger text, fewer details | PowerPoint\u002FKeynote export |\n\n---\n\n## Quick Reference: File Naming Convention\n\n```\nfigures\u002F\n├── gen_fig_\u003Cname>.py      # Generation script (always save for reproducibility)\n├── fig_\u003Cname>.pdf         # Final vector output (for LaTeX)\n├── fig_\u003Cname>.png         # Raster output (300 DPI, for AI-generated or fallback)\n└── fig_\u003Cname>_attempt*.png # Gemini attempts (keep for comparison)\n```\n","# Academic Plotting for ML Papers\n\nGenerate publication-quality figures for ML\u002FAI conference papers. Two distinct workflows:\n\n1. **Diagram figures** (architecture, system design, workflows, pipelines) — AI image generation via Gemini\n2. **Data figures** (line charts, bar charts, scatter plots, heatmaps, ablations) — matplotlib\u002Fseaborn\n\n## When to Use Which Workflow\n\n| Figure Type | Tool | Why |\n|-------------|------|-----|\n| Architecture \u002F system diagram | Gemini (Workflow 1) | Complex spatial layouts with boxes, arrows, labels |\n| Workflow \u002F pipeline \u002F lifecycle | Gemini (Workflow 1) | Multi-step processes with connections |\n| Bar chart, line plot, scatter | matplotlib (Workflow 2) | Precise numerical data, reproducible |\n| Heatmap, confusion matrix | matplotlib\u002Fseaborn (Workflow 2) | Structured grid data |\n| Ablation table as chart | matplotlib (Workflow 2) | Grouped bars or line comparisons |\n| Pie \u002F donut chart | matplotlib (Workflow 2) | Proportional data (use sparingly in ML papers) |\n| Training curves | matplotlib (Workflow 2) | Loss\u002Faccuracy over steps\u002Fepochs |\n\n**Rule of thumb**: If the figure has numerical axes, use matplotlib. If the figure has boxes and arrows, use Gemini.\n\n---\n\n## Step 0: Context Analysis & Extraction\n\nThe user will typically provide one of these inputs — not a ready-made specification:\n\n| Input Type | Example | What to Extract |\n|-----------|---------|-----------------|\n| Full paper \u002F section draft | \"Here's our method section...\" | System components, their relationships, data flow |\n| Description paragraph | \"Our system has three layers that...\" | Key entities, hierarchy, connections |\n| Raw results \u002F data table | \"MMLU: 85.2, HumanEval: 72.1...\" | Metrics, methods, comparison structure |\n| CSV \u002F JSON data | Experiment log files | Variables, trends, grouping dimensions |\n| Vague request | \"Make a figure for the overview\" | Read surrounding paper context to infer content |\n\n### Extraction Workflow\n\n**For diagrams** (research context → architecture figure):\n\n1. **Read the provided context** — paper section, abstract, or description paragraph\n2. **Identify visual entities** — What are the main components\u002Fmodules\u002Fstages?\n   - Look for: nouns that represent system parts, named modules, layers, stages\n   - Count them: if >8 top-level entities, consider grouping into sections\n3. **Identify relationships** — How do components connect?\n   - Look for: verbs describing data flow (\"sends to\", \"queries\", \"feeds into\")\n   - Classify: data flow (solid arrow), control flow (gray), error path (dashed red)\n4. **Determine layout pattern**:\n   - Sequential pipeline → left-to-right flow\n   - Layered architecture → horizontal bands stacked vertically\n   - Hub-and-spoke → central node with radiating connections\n   - Hierarchical → top-down tree\n5. **Assign colors** — One accent color per logical group\u002Flayer\n6. **Write every label exactly** — Extract exact terminology from the paper text\n\n**For data charts** (results → figure):\n\n1. **Read the provided data** — table, paragraph with numbers, CSV, or JSON\n2. **Identify dimensions**:\n   - What is being compared? (methods, models, configurations) → categorical axis\n   - What is the metric? (accuracy, loss, latency, F1) → value axis\n   - Is there a time\u002Fstep dimension? → line plot\n   - Are there multiple metrics? → multi-panel or grouped bars\n3. **Choose chart type** automatically using this priority:\n   - Has a step\u002Ftime axis → **line plot**\n   - Comparing N methods on M benchmarks → **grouped bar chart**\n   - Single ranking → **horizontal bar** (leaderboard)\n   - Correlation between two continuous variables → **scatter plot**\n   - Square matrix of values → **heatmap**\n   - Proportional breakdown → **stacked bar** (avoid pie charts)\n4. **Determine figure sizing** — Single column vs full width based on data density\n5. **Highlight \"our method\"** — Identify which entry is the paper's contribution and give it a distinct color\n\n### Auto-Detection Examples\n\n**Context → Diagram**: \"Our system has a Planner, Executor, and Verifier. Planner sends plans to Executor, Executor returns results to Verifier, Verifier feeds back to Planner on failure.\"\n→ 3 entities, cycle layout, dashed feedback arrow → **Workflow 1 (Gemini)**\n\n**Data → Chart**: \"GPT-4: MMLU 86.4, HumanEval 67.0. Ours: 88.1, 71.2. Llama-3: 79.3, 62.1.\"\n→ 3 methods × 2 benchmarks → **Workflow 2 (grouped bar)**, highlight \"Ours\" in coral\n\n---\n\n## Workflow 1: Architecture & System Diagrams (AI Image Generation)\n\nUse Gemini 3 Pro Image Preview to generate diagrams. **Choose a visual style first** — this is the single biggest factor in whether the figure looks professional or generic.\n\n### Visual Styles\n\nPick one style per paper (all figures should be consistent):\n\n#### Style A: \"Sketch \u002F 简笔画\" (Hand-Drawn)\n\nWarm, approachable, memorable. Ideal for overview figures and system introductions. Looks like a whiteboard sketch refined by a designer.\n\n```\nVISUAL STYLE — HAND-DRAWN SKETCH:\n- Slightly irregular, hand-drawn line quality — lines wobble gently, not perfectly straight\n- Rounded, soft shapes with visible pen strokes (like drawn with a thick felt-tip marker)\n- Warm off-white background (#FAFAF7), NOT pure white\n- Fill colors are soft watercolor-like washes: muted blue (#D6E4F0), soft peach (#F5DEB3),\n  light sage (#D4E6D4), pale lavender (#E6DFF0)\n- Borders are dark charcoal (#2C2C2C) with 2-3px line weight, slightly uneven\n- Arrows are hand-drawn with slight curves, ending in simple open arrowheads (not filled triangles)\n- Text uses a rounded sans-serif font (like Comic Neue or Architects Daughter feel)\n- Small doodle-style icons inside boxes: a tiny gear ⚙ for processing, a lightbulb ? for ideas,\n  a magnifying glass ? for search — rendered as simple line drawings, NOT emoji\n- Overall feel: a carefully drawn whiteboard diagram, clean but with personality\n- NO clip art, NO stock icons, NO photorealistic elements\n```\n\n#### Style B: \"Modern Minimal\" (Clean & Bold)\n\nConfident, authoritative. Best for method figures where precision matters.\n\n```\nVISUAL STYLE — MODERN MINIMAL:\n- Ultra-clean geometric shapes with crisp edges\n- Bold color blocks as backgrounds for sections — NOT just accent bars, but full section fills\n  using desaturated tones: slate blue (#E8EDF2), warm sand (#F5F0E8), cool mint (#E8F2EE)\n- Component boxes have ROUNDED CORNERS (12px radius), NO visible border — they float on\n  the section background using subtle shadow (1px, 4px blur, rgba(0,0,0,0.06))\n- ONE accent color per section used sparingly on key elements: Deep blue (#2563EB),\n  Emerald (#059669), Amber (#D97706), Rose (#E11D48)\n- Arrows are thin (1.5px), dark gray (#6B7280), with small filled circle at source\n  and clean arrowhead at target — NOT thick colored arrows\n- Typography: Inter or system sans-serif, title 600 weight, body 400 weight\n- Labels INSIDE boxes, not beside them\n- Generous whitespace — at least 24px between elements\n- NO decorative elements, NO icons — let the structure speak\n```\n\n#### Style C: \"Illustrated Technical\" (Icon-Rich)\n\nEngaging, explanatory. Good for tutorial-style papers and figures that need to be self-explanatory.\n\n```\nVISUAL STYLE — ILLUSTRATED TECHNICAL:\n- Each major component has a small MEANINGFUL ICON drawn in a consistent line-art style\n  (single color, 2px stroke, ~24x24px): brain icon for reasoning, database cylinder for storage,\n  arrow-loop for iteration, network nodes for communication\n- Components sit inside soft rounded rectangles with a LEFT COLOR STRIP (4px wide)\n- Background is pure white, but each logical group has a very faint colored region behind it\n  (#F8FAFC for blue group, #FFF8F0 for orange group)\n- Connections use CURVED bezier paths (not straight lines), colored by SOURCE component\n- Key data flows are THICKER (3px) than secondary flows (1px, dashed)\n- Small annotation badges on arrows: \"×N\" for repeated operations, \"optional\" in italics\n- Title labels are ABOVE each section in small caps, letter-spaced\n- Overall: like a well-designed API documentation diagram\n```\n\n#### Style D: \"Accent Bar\" (Classic Academic)\n\nThe default academic style. Safe for any venue, works well in grayscale.\n\n```\nVISUAL STYLE — CLASSIC ACCENT BAR:\n- Horizontal section bands stacked vertically, pale gray (#F7F7F5) fill\n- Thick colored LEFT ACCENT BAR (8px) distinguishes each section\n- Content boxes: white fill, thin #DDD border, 4px rounded corners\n- Section palette: Blue #4A90D9, Teal #5BA58B, Amber #D4A252, Slate #7B8794\n- Sans-serif typography (Helvetica\u002FArial), bold titles, regular body\n- Colored arrows match their SOURCE section\n- Clean, flat, zero decoration\n```\n\n### Curated Color Palettes\n\n**\"Ocean Dusk\"** (professional, calming — default recommendation):\n`#264653` deep teal, `#2A9D8F` teal, `#E9C46A` gold, `#F4A261` sandy orange, `#E76F51` burnt coral\n\n**\"Ink & Wash\"** (for 简笔画 style):\n`#2C2C2C` charcoal ink, `#D6E4F0` washed blue, `#F5DEB3` washed wheat, `#D4E6D4` washed sage, `#E6DFF0` washed lavender\n\n**\"Nord\"** (for modern minimal):\n`#2E3440` polar night, `#5E81AC` frost blue, `#A3BE8C` aurora green, `#EBCB8B` aurora yellow, `#BF616A` aurora red\n\n**\"Okabe-Ito\"** (universal colorblind-safe, required for data charts):\n`#E69F00` orange, `#56B4E9` sky blue, `#009E73` green, `#F0E442` yellow, `#0072B2` blue, `#D55E00` vermillion, `#CC79A7` pink\n\n### Checklist\n\n- [ ] **Extract from context**: Read paper\u002Fdescription, identify entities and relationships\n- [ ] **Choose visual style** (A\u002FB\u002FC\u002FD) — match the paper's tone and venue\n- [ ] **Choose color palette** — or use one consistent with existing paper figures\n- [ ] Obtain Gemini API key (`GEMINI_API_KEY` env var)\n- [ ] Write a detailed prompt: style block + layout + connections + constraints\n- [ ] Generate script at `figures\u002Fgen_fig_\u003Cname>.py`, run for 3 attempts\n- [ ] Review, select best, save as `figures\u002Ffig_\u003Cname>.png`\n\n### Prompt Structure (6 Sections)\n\nEvery Gemini prompt must include these sections in order:\n\n```\n1. FRAMING (5 lines): \"Create a [STYLE_NAME]-style technical diagram for a\n   [VENUE] paper. The diagram should feel [ADJECTIVES]...\"\n\n2. VISUAL STYLE (20-30 lines): Copy the full style block from above (A\u002FB\u002FC\u002FD).\n   This is the most important section — it determines the entire visual character.\n\n3. COLOR PALETTE (10 lines): Exact hex codes for every color used.\n\n4. LAYOUT (50-150 lines): Every component, box, section — exact text, spatial\n   arrangement, and grouping. Be exhaustively specific.\n\n5. CONNECTIONS (30-80 lines): Every arrow individually — source, target, style,\n   label, routing direction.\n\n6. CONSTRAINTS (10 lines): What NOT to include. Adapt per style — e.g., sketch\n   style allows slight irregularity but still no clip art.\n```\n\n### Generation Script Template\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Generate [FIGURE_NAME] diagram using Gemini image generation.\"\"\"\nimport os, sys, time\nfrom google import genai\n\nAPI_KEY = os.environ.get(\"GEMINI_API_KEY\")\nif not API_KEY:\n    print(\"ERROR: Set GEMINI_API_KEY environment variable.\")\n    print(\"  Get a key at: https:\u002F\u002Faistudio.google.com\u002Fapikey\")\n    sys.exit(1)\n\nMODEL = \"gemini-3-pro-image-preview\"\nOUTPUT_DIR = os.path.dirname(os.path.abspath(__file__))\nclient = genai.Client(api_key=API_KEY)\n\nPROMPT = \"\"\"\n[PASTE YOUR 6-SECTION PROMPT HERE]\n\"\"\"\n\ndef generate_image(prompt_text, attempt_num):\n    print(f\"\\n{'='*60}\\nAttempt {attempt_num}\\n{'='*60}\")\n    try:\n        response = client.models.generate_content(\n            model=MODEL,\n            contents=prompt_text,\n            config=genai.types.GenerateContentConfig(\n                response_modalities=[\"IMAGE\", \"TEXT\"],\n            ),\n        )\n        output_path = os.path.join(OUTPUT_DIR, f\"fig_NAME_attempt{attempt_num}.png\")\n        for part in response.candidates[0].content.parts:\n            if part.inline_data:\n                with open(output_path, \"wb\") as f:\n                    f.write(part.inline_data.data)\n                print(f\"Saved: {output_path} ({os.path.getsize(output_path):,} bytes)\")\n                return output_path\n            elif part.text:\n                print(f\"Text: {part.text[:300]}\")\n        print(\"WARNING: No image in response\")\n        return None\n    except Exception as e:\n        print(f\"ERROR: {e}\")\n        return None\n\ndef main():\n    results = []\n    for i in range(1, 4):\n        if i > 1:\n            time.sleep(2)\n        path = generate_image(PROMPT, i)\n        if path:\n            results.append(path)\n    if not results:\n        print(\"All attempts failed!\")\n        sys.exit(1)\n    print(f\"\\nGenerated {len(results)} attempts. Review and pick the best.\")\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Key Rules\n\n- **Always 3 attempts** — quality varies significantly between runs\n- **Style block is mandatory** — without it, Gemini defaults to generic corporate look\n- **Never hardcode API keys** — use `os.environ.get(\"GEMINI_API_KEY\")`\n- **Save generation scripts** — reproducibility is critical\n- **Specify every label exactly** — Gemini may misspell or rearrange text\n\n**Full prompt examples per style**: See [references\u002Fdiagram-generation.md](references\u002Fdiagram-generation.md)\n\n---\n\n## Workflow 2: Data-Driven Charts (matplotlib\u002Fseaborn)\n\nFor any figure with numerical data, axes, or quantitative comparisons.\n\n### Checklist\n\n- [ ] **Extract from context**: Parse results\u002Fdata, identify methods, metrics, and comparison structure\n- [ ] **Auto-select chart type** based on data dimensions (see decision guide below)\n- [ ] Prepare data (CSV, dict, or inline arrays)\n- [ ] Apply publication styling (fonts, colors, sizes)\n- [ ] Highlight \"our method\" with a distinct color\n- [ ] Export as both PDF (vector) and PNG (300 DPI)\n- [ ] Verify LaTeX font compatibility\n- [ ] Save script at `figures\u002Fgen_fig_\u003Cname>.py`\n\n### Chart Type Decision Guide\n\n| Data Pattern | Best Chart | Notes |\n|-------------|------------|-------|\n| Trend over time\u002Fsteps | Line plot | Training curves, scaling laws |\n| Comparing categories | Grouped bar chart | Model comparisons, ablations |\n| Distribution | Violin \u002F box plot | Score distributions across methods |\n| Correlation | Scatter plot | Embedding analysis, metric correlation |\n| Grid of values | Heatmap | Attention maps, confusion matrices |\n| Part of whole | Stacked bar (not pie) | Prefer stacked bar over pie in ML papers |\n| Many methods, one metric | Horizontal bar | Leaderboard-style comparisons |\n\n### Publication Styling Template\n\n```python\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# --- Publication defaults (polished, not generic) ---\nplt.rcParams.update({\n    \"font.family\": \"serif\", \"font.serif\": [\"Times New Roman\", \"DejaVu Serif\"],\n    \"font.size\": 10, \"axes.titlesize\": 11, \"axes.titleweight\": \"bold\",\n    \"axes.labelsize\": 10, \"legend.fontsize\": 8.5, \"legend.frameon\": False,\n    \"figure.dpi\": 300, \"savefig.dpi\": 300, \"savefig.bbox\": \"tight\",\n    \"axes.spines.top\": False, \"axes.spines.right\": False,\n    \"axes.grid\": True, \"grid.alpha\": 0.15, \"grid.linestyle\": \"-\",\n    \"lines.linewidth\": 1.8, \"lines.markersize\": 5,\n})\n\n# --- \"Ocean Dusk\" palette (professional, distinctive, colorblind-safe) ---\nCOLORS = [\"#264653\", \"#2A9D8F\", \"#E9C46A\", \"#F4A261\", \"#E76F51\",\n          \"#0072B2\", \"#56B4E9\", \"#8C8C8C\"]\nOUR_COLOR = \"#E76F51\"       # coral — warm, stands out\nBASELINE_COLOR = \"#B0BEC5\"  # cool gray — recedes\nFIG_SINGLE, FIG_FULL = (3.25, 2.5), (6.75, 2.8)\n```\n\n### Common Chart Patterns\n\n**Line plot (training curves)** — with markers and confidence bands:\n\n```python\nfig, ax = plt.subplots(figsize=FIG_SINGLE)\nmarkers = [\"o\", \"s\", \"^\", \"D\", \"v\"]\nfor i, (method, (mean, std)) in enumerate(results.items()):\n    color = OUR_COLOR if method == \"Ours\" else COLORS[i]\n    ax.plot(steps, mean, label=method, color=color,\n            marker=markers[i % 5], markevery=max(1, len(steps)\u002F\u002F8),\n            markersize=4, zorder=3)\n    ax.fill_between(steps, mean - std, mean + std, color=color, alpha=0.12)\nax.set_xlabel(\"Training Steps\")\nax.set_ylabel(\"Accuracy (%)\")\nax.legend(loc=\"lower right\")\nfig.savefig(\"figures\u002Ffig_training.pdf\")\nfig.savefig(\"figures\u002Ffig_training.png\", dpi=300)\n```\n\n**Grouped bar chart (ablation)** — with value labels:\n\n```python\nfig, ax = plt.subplots(figsize=FIG_FULL)\nx = np.arange(len(categories))\nn = len(methods)\nwidth = 0.7 \u002F n\nfor i, (method, scores) in enumerate(methods.items()):\n    color = OUR_COLOR if method == \"Ours\" else COLORS[i]\n    offset = (i - n \u002F 2 + 0.5) * width\n    bars = ax.bar(x + offset, scores, width * 0.9, label=method, color=color,\n                  edgecolor=\"white\", linewidth=0.5)\n    for bar, s in zip(bars, scores):\n        ax.text(bar.get_x() + bar.get_width()\u002F2, bar.get_height() + 0.3,\n                f\"{s:.1f}\", ha=\"center\", va=\"bottom\", fontsize=7, color=\"#444\")\nax.set_xticks(x)\nax.set_xticklabels(categories)\nax.set_ylabel(\"Score\")\nax.legend(ncol=min(n, 4))\nfig.savefig(\"figures\u002Ffig_ablation.pdf\")\n```\n\n**Heatmap** — with diverging colormap and clean borders:\n\n```python\nimport seaborn as sns\nfig, ax = plt.subplots(figsize=(4, 3.5))\nsns.heatmap(matrix, annot=True, fmt=\".2f\", cmap=\"YlOrRd\", ax=ax,\n            cbar_kws={\"shrink\": 0.75, \"aspect\": 20},\n            linewidths=1.5, linecolor=\"white\",\n            annot_kws={\"size\": 8, \"weight\": \"medium\"})\nax.set_xlabel(\"Predicted\")\nax.set_ylabel(\"Actual\")\nfig.savefig(\"figures\u002Ffig_confusion.pdf\")\n```\n\n**Horizontal bar (leaderboard)** — with \"our method\" highlight:\n\n```python\nfig, ax = plt.subplots(figsize=FIG_SINGLE)\ny_pos = np.arange(len(models))\ncolors = [BASELINE_COLOR] * len(models)\ncolors[our_idx] = OUR_COLOR\nbars = ax.barh(y_pos, scores, color=colors, height=0.55,\n               edgecolor=\"white\", linewidth=0.5)\nax.set_yticks(y_pos)\nax.set_yticklabels(models)\nax.set_xlabel(\"Accuracy (%)\")\nax.invert_yaxis()\nfor bar, s in zip(bars, scores):\n    ax.text(bar.get_width() + 0.3, bar.get_y() + bar.get_height()\u002F2,\n            f\"{s:.1f}\", va=\"center\", fontsize=8, color=\"#444\")\nfig.savefig(\"figures\u002Ffig_leaderboard.pdf\")\n```\n\n**Full pattern library** (scaling laws, violin plots, multi-panel, radar): See [references\u002Fdata-visualization.md](references\u002Fdata-visualization.md)\n\n---\n\n## Publication Style Quick Reference\n\n| Venue | Single Col | Full Width | Font |\n|-------|-----------|------------|------|\n| NeurIPS | 5.5 in | 5.5 in | Times |\n| ICML | 3.25 in | 6.75 in | Times |\n| ICLR | 5.5 in | 5.5 in | Times |\n| ACL | 3.3 in | 6.8 in | Times |\n| AAAI | 3.3 in | 7.0 in | Times |\n\n**Always export PDF** for vector quality. PNG only for AI-generated diagrams.\n\n**Venue-specific details, LaTeX integration, font matching, accessibility checklist**: See [references\u002Fstyle-guide.md](references\u002Fstyle-guide.md)\n\n---\n\n## Common Issues\n\n| Issue | Solution |\n|-------|----------|\n| Fonts look wrong in LaTeX | Export PDF, set `text.usetex=True`, or use `font.family=serif` |\n| Figure too large for column | Check venue width limits, use `figsize` in inches |\n| Colors indistinguishable in print | Use colorblind-safe palette + different line styles\u002Fmarkers |\n| Gemini misspells labels | Spell out every label exactly in prompt, add \"SPELL EXACTLY\" constraint |\n| Gemini ignores style | Add more negative constraints, be more specific about hex colors |\n| Blurry figures in PDF | Export as PDF (vector), not PNG; or use 300+ DPI for PNG |\n| Legend overlaps data | Use `bbox_to_anchor`, `loc=\"upper left\"`, or external legend |\n| Too many tick labels | Use `ax.xaxis.set_major_locator(MaxNLocator(5))` |\n\n## When to Use vs Alternatives\n\n| Need | This Skill | Alternative |\n|------|-----------|-------------|\n| Architecture diagrams | Gemini generation | TikZ (manual), draw.io (interactive), Mermaid (simple) |\n| Data charts | matplotlib\u002Fseaborn | Plotly (interactive), R\u002Fggplot2 (statistics-heavy) |\n| Full paper writing | Use with `ml-paper-writing` | — |\n| Poster figures | Larger fonts, wider | `latex-posters` skill |\n| Presentation figures | Larger text, fewer details | PowerPoint\u002FKeynote export |\n\n---\n\n## Quick Reference: File Naming Convention\n\n```\nfigures\u002F\n├── gen_fig_\u003Cname>.py      # Generation script (always save for reproducibility)\n├── fig_\u003Cname>.pdf         # Final vector output (for LaTeX)\n├── fig_\u003Cname>.png         # Raster output (300 DPI, for AI-generated or fallback)\n└── fig_\u003Cname>_attempt*.png # Gemini attempts (keep for comparison)\n```\n",{"name":5,"tags":57,"author":69,"license":15,"version":70,"category":71,"description":7,"dependencies":72},[58,59,60,61,62,63,64,65,66,67,68],"Academic Writing","Visualization","Matplotlib","Seaborn","Plotting","Figures","Diagrams","NeurIPS","ICML","ICLR","LaTeX","Orchestra Research","1.0.0","ai-research",[73,74,35,75],"matplotlib>=3.8.0","seaborn>=0.13.0","google-genai>=1.0.0","main","0da4485785ee599388900be50db1635489d53056",".agents\u002Fskills\u002Fqc-academic-plotting","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6","https:\u002F\u002Fdisha6.6.thenitishkr.in\u002F","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh","www.thenitishkr","thenitishkr | AI • Cyber-security • Research\r\n","2026-11-08 03:33:25",{"source":8,"skillName":5,"commands":86,"prompt":96,"zipAvailable":97},[87,90,93],{"tool":88,"command":89},"npx","npx skills add Tashima-Tarsh\u002FDisha6.6 --skill academic-plotting",{"tool":91,"command":92},"bunx","bunx skills add Tashima-Tarsh\u002FDisha6.6 --skill academic-plotting",{"tool":94,"command":95},"pnpm","pnpm dlx skills add Tashima-Tarsh\u002FDisha6.6 --skill academic-plotting","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-academic-plotting\u002FSKILL.md",true,[99,105,109],{"path":100,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Fdata-visualization.md","REFERENCE","参考文档",15393,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-academic-plotting\u002Freferences\u002Fdata-visualization.md",{"path":106,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Fdiagram-generation.md",15426,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-academic-plotting\u002Freferences\u002Fdiagram-generation.md",{"path":110,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Fstyle-guide.md",8652,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-academic-plotting\u002Freferences\u002Fstyle-guide.md",[114,143,167,194,218,241],{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":123,"publishedAt":52},"01M6QRD07D4TGNDK6VJ4EHF8BV","youtube-full","Use when the user needs YouTube transcripts, video search, channel browsing, playlist extraction, or content monitoring. Trigger phrases: 'get the transcript for', 'search YouTube for', 'what are the latest videos on', 'list this playlist', 'monitor this channel', or any request involving a YouTube URL, video ID, or @handle. Do NOT use for downloading video or audio files, YouTube engagement data (likes, comments), or private\u002Fage-restricted videos.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fyoutube-full\u002FSKILL.md",[120],{"categoryNo":121,"categoryName":122,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,38,140,141,142],"youtube full","youtube","full","transcript","search","monitoring","data","Video","Audio","list","files","do","get","age","trigger","URL","browsing","request","youtube transcripts",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":52},"01M6QRCJ3112VYPA97YG7KGMC2","x-twitter-growth","X\u002FTwitter growth engine for building audience, crafting viral content, and analyzing engagement. Use when the user wants to grow on X\u002FTwitter, write tweets or threads, analyze their X profile, research competitors on X, plan a posting strategy, or optimize engagement. Complements social-content (generic multi-platform) with X-specific depth: algorithm mechanics, thread engineering, reply strategy, profile optimization, and competitive intelligence via web search.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fx-twitter-growth\u002FSKILL.md",[],[150,151,152,153,128,154,155,156,157,158,159,160,161,162,44,163,164,165,166,38],"twitter","x twitter growth","growth","research","content","engineering","plan","web search","competitors","analyze","engine","write","strategy","platform","grow","posting","competitive",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":176,"publishedAt":52},"01M6QRBN3EHQNJY42RERP7A149","write-a-skill","Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, build, or author a new skill.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwrite-a-skill\u002FSKILL.md",[173],{"categoryNo":174,"categoryName":175,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[177,161,178,179,180,181,182,183,44,184,185,76,186,187,188,189,190,191,192,193],"write a skill","github","create","https","productivity","matt pocock","direct","example","build","new skill","structure","new agent","resources","with","tree","progressive disclosure","author",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":200,"publishedAt":52},"01M6QRB6G8P33PNGAF9Y69EJ9T","wrap-up","Close out a launched Claude Managed Agent — recap every primitive the founder now owns, regenerate the single-file overview page, and suggest the next 1-2 upgrades. Use when the user says \"wrap up\", \"close this out\", \"what do I own now\", \"give me the summary\", \"recap the agent\", or when the orchestrator routes phase=wrap-up. primitives_inventory.py tables everything owned (agent, environment, session, memory, outcome, deployment); overview_page.py regenerates a self-contained .\u002Fmy-agent\u002Fagent-overview.html; upgrade_suggester.py ranks the next moves from recorded deferrals plus standing hardening steps. Companion to run-without-you; the last stop before phase=done.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwrap-up\u002FSKILL.md",[],[201,202,203,50,204,205,206,207,208,44,209,135,210,211,212,213,214,215,216,217],"wrap up","up","wrap","deployment","run","file","hardening","closeout","stop","upgrade","founder","close","companion","you","tables","directions","phase",{"skillNo":219,"name":220,"nameZh":6,"description":221,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":222,"categories":223,"keywords":225,"publishedAt":52},"01M6QRA5AYC1RBFZ39GTWGS3N8","workflow-builder","Design and write deterministic multi-agent workflow scripts (.js files in .claude\u002Fworkflows\u002F) for Claude Code's Workflow tool. Use when a user wants to build, create, author, scaffold, or run a custom Claude Code workflow, orchestrate sub-agents (fan-out, pipeline, loop, judge-panel), or automate a repeatable multi-step task across fresh-context agents.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fworkflow-builder\u002FSKILL.md",[224],{"categoryNo":174,"categoryName":175,"taxonomyType":21,"taxonomyTypeDesc":22},[226,227,228,229,230,179,205,231,232,233,234,235,161,45,134,236,237,238,239,240],"workflow","workflow builder","builder","design","workflows","code","orchestrate","pipeline","loop","multi-agent","across","fresh","scripts","judge","claude code workflow",{"skillNo":242,"name":243,"nameZh":6,"description":244,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":245,"categories":246,"keywords":247,"publishedAt":52},"01M6QR7QMCZESKQA0ERW1E657M","weekly-review","Use when someone wants to run a weekly review, close open loops, audit stalled projects and commitments, get their system back to trusted, restart a lapsed review habit, or says \"\u002Fcs:weekly-review\". Walks David Allen's three-phase loop — GET CLEAR, GET CURRENT, GET CREATIVE — with deterministic scripts that inventory open loops, gate the checklist with named gaps, and score commitment health 0-100.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fweekly-review\u002FSKILL.md",[],[248,249,250,251,252,253,254,255,256,234,257,258,259,260,261,262,136,263,264,217],"review","weekly review","weekly","deterministic scripts","reflect","feeds","inventory","open","team","projects","project-management","scanner","conversation","back","project","sprint","cadence"]