Przejdź do treści
Biblioteka skilli
Dokumenty i biuro · Budowanie i kod

presentation-datavis

/presentation-datavis

Dodaje do prezentacji wykresy, tabele i wizualizacje danych, zamieniając dane i slajdy oznaczone [CHART] w gotowe slajdy z danymi.

Repozytorium
agent-foundry ↗
Licencja
MIT
Ostatnia zmiana repozytorium
31.07.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
1
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 31.07.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Dodaje do prezentacji wykresy, tabele i wizualizacje danych, zamieniając dane i slajdy oznaczone [CHART] w gotowe slajdy z danymi.

Wyzwalacze z opisu

visualize this data
Oryginalny opis (EN)

Use when a presentation needs charts, tables, data visualizations, or data-driven slides — tagged [CHART] slides from narrative, "visualize this data", or any data-to-slide conversion. Part of the presentation-* skill family.

Jak działa

  1. When NOT to Use
  2. 1. Tool Selection
  3. 2. Chart Type Selection Guide
  4. 3. Data Ingestion
  5. 4. Chart Generation Patterns
  6. 5. Output Format
  7. 6. HARD RULES
  8. Anti-Patterns
Sekcje z nagłówków SKILL.md, w oryginale · 250 linii, 1 526 słów
Podgląd SKILL.md
---
name: presentation-datavis
description: >
  Use when a presentation needs charts, tables, data visualizations, or data-driven slides —
  tagged [CHART] slides from narrative, "visualize this data", or any data-to-slide conversion.
  Part of the presentation-* skill family.
triggers:
  - data visualization for presentations
  - charts for slides
  - "visualize this data"
  - tagged [CHART] slides from narrative
  - data-driven presentation
  - chart generation
  - slide charts and graphs
family: presentation
disambiguation: QUANTITATIVE visuals — charts, tables, data-driven slides. Architecture, flow and sequence visuals are presentation-diagrams.
---

# Presentation Data Visualization

Child of `presentation-builder`. This skill handles all chart, table, and data visualization generation for presentation slides. It receives tagged `[CHART]` placeholders from the narrative skill and produces embeddable visual assets.

**Siblings:** `presentation-narrative` (story and slide structure), `presentation-renderer` (final output assembly), `presentation-builder` (parent orchestrator).

## When NOT to Use

- **Standalone data analysis** without a presentation context — use general Python data tools instead.
- **Infographics or illustrations** that are not data-driven — use `vertex-banana` for image generation.
- **Simple text tables in markdown** that do not need visual rendering — just write the markdown directly.
- **Dashboard or web app visualizations** — this skill targets static slide assets, not interactive dashboards.
- **Data cleaning or ETL** — handle data preparation before invoking this skill.

---

## 1. Tool Selection

Priority order based on capability and output quality:

| Priority | Tool | Best For |
|----------|------|----------|
| 1 | **matplotlib / seaborn** | Full chart library — bar, line, pie, scatter, waterfall, histogram, heatmap, box plot, small multiples |
| 2 | **mermaid** | Gantt charts, pie charts (limited palette/styling) |
| 3 | **ASCII table fallback** | Text-only tables when no graphical rendering is available |

### Tool Details

- **matplotlib**: bar (vertical/horizontal), line, pie, scatter, waterfall, histogram, heatmap, stacked bar, grouped bar, small multiples, dashboard layouts.
- **seaborn**: statistical visualizations, distribution plots, violin plots, pair plots, regression plots. Use seaborn when the data story is statistical in nature.
- **mermaid**: Gantt charts and simple pie charts only. Limited styling control — use only when the presentation format natively supports mermaid rendering or when a quick timeline is needed.
- **ASCII**: text-based tables rendered with simple alignment. Last resort when Python is unavailable.

---

## 2. Chart Type Selection Guide

| Data Story | Chart Type | Notes |
|---|---|---|
| Compare categories | Bar (vertical or horizontal) | Horizontal if labels are long |
| Trend over time | Line | Add markers for key inflection points |
| Part-to-whole | Stacked bar or pie | Pie: max 5 segments, otherwise use stacked bar |
| Change decomposition | Waterfall | Show starting value, deltas, ending value |
| Correlation | Scatter | Add trend line if relationship is meaningful |
| Distribution | Histogram / box plot | Box plot for comparing distributions across groups |
| Ranking | Horizontal bar | Sort descending, accent color on top item |
| Timeline / schedule | Gantt (mermaid) | Use mermaid syntax for native rendering |
| Multiple KPIs | Dashboard / small multiples | Grid layout with consistent axes |

When in doubt, default to a **horizontal bar chart** — it is the most readable chart type for presentations.

---

## 3. Data Ingestion

### From files (user provides path)
```python
import pandas as pd
df = pd.read_csv(path)      # CSV
df = pd.read_json(path)     # JSON
df = pd.read_excel(path)    # Excel (requires openpyxl)
```

### From inline data (user provides in conversation)
```python
data = {
    "Category": ["A", "B", "C"],
    "Value": [100, 250, 175]
}
df = pd.DataFrame(data)
```

### From project artifacts
- Check `PROJECT.md`, `metrics/`, or any data files referenced in the project.
- Parse structured sections (tables, KPI lists) into DataFrames.

### From [PLACEHOLDER] tags
When no real data is available, generate realistic sample data with clear markers:
```python
# [SAMPLE DATA] — replace with actual figures before final presentation
data = {
    "Region": ["APAC", "EMEA", "Americas"],
    "Revenue_M": [45, 62, 88]  # [SAMPLE DATA]
}
```
Always add `[SAMPLE DATA]` comments in code and `[SAMPLE DATA]` watermark text on the chart itself.

---

## 4. Chart Generation Patterns

### Standard matplotlib Pattern

```python
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import os

# --- Configuration ---
ACCENT_COLOR = "#1a73e8"
NEUTRAL_COLOR = "#bdbdbd"
FONT_FAMILY = "sans-serif"
OUTPUT_DIR = ".presentations/output/assets"
os.makedirs(OUTPUT_DIR, exist_ok=True)

# --- Create chart ---
fig, ax = plt.subplots(figsize=(10, 6))

categories = df["Category"]
values = df["Value"]
key_index = values.idxmax()  # Accent the key data point

colors = [ACCENT_COLOR if i == key_index else NEUTRAL_COLOR for i in range(len(values))]
bars = ax.barh(categories, values, color=colors)

# --- Insight title (not description) ---
ax.set_title("APAC grew 3x faster than other regions", fontsize=16, fontweight="bold", pad=20)

# --- Axis labels with units ---
ax.set_xlabel("Revenue ($M)", fontsize=12)

# --- Source line ---
fig.text(0.1, 0.02, "Source: Internal Finance Report, Q4 2025", fontsize=8, color="#757575")

# --- Clean styling ---
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.tick_params(axis="both", labelsize=11)

plt.tight_layout(rect=[0, 0.05, 1, 1])

# --- Save ---
chart_path = os.path.join(OUTPUT_DIR, "revenue_by_region.png")
fig.savefig(chart_path, dpi=150, bbox_inches="tight", facecolor="white")
plt.close(fig)
```

### Waterfall Chart Pattern

```python
import numpy as np

labels = ["Start", "Product A", "Product B", "Cost Reduction", "FX Impact", "End"]
values = [100, 30, 15, 10, -8, 147]
cumulative = np.cumsum(values)
cumulative = np.insert(cumulative, 0, 0)[:-1]

fig, ax = plt.subplots(figsize=(10, 6))

for i, (label, val) in enumerate(zip(labels, values)):
    color = ACCENT_COLOR if i in (0, len(labels) - 1) else ("#4caf50" if val > 0 else "#f44336")
    bottom = cumulative[i] if i not in (0, len(labels) - 1) else 0
    height = val if i not in (0, len(labels) - 1) else cumulative[i] + val
    ax.bar(label, height if i in (0, len(labels) - 1) else val, bottom=bottom, color=color)

ax.set_title("Revenue bridge: +47% driven by Product A", fontsize=16, fontweight="bold")
fig.text(0.1, 0.02, "Source: Finance, FY2025", fontsize=8, color="#757575")
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
plt.tight_layout(rect=[0, 0.05, 1, 1])
chart_path = os.path.join(OUTPUT_DIR, "revenue_bridge.png")
fig.savefig(chart_path, dpi=150, bbox_inches="tight", facecolor="white")
plt.close(fig)
```

### Consulting-Standard Annotations

- **Insight title**: The chart title states the takeaway, not a description. "APAC grew 3x faster" not "Revenue by Region".
- **Callout boxes**: Use `ax.annotate()` to highlight key data points with a box and arrow.
- **Source line**: Always present at bottom-left in small gray text.
- **Accent color**: One color for the key data point; neutral gray for everything else. Draw the viewer's eye to the insight.

```python
# Callout annotation example
ax.annotate(
    "+47%",
    xy=(key_x, key_y),
    xytext=(key_x + 0.5, key_y + 10),
    fontsize=14, fontweight="bold", color=ACCENT_COLOR,
    arrowprops=dict(arrowstyle="->", color=ACCENT_COLOR, lw=1.5),
    bbox=dict(boxstyle="round,pad=0.3", facecolor="white", edgecolor=ACCENT_COLOR)
)
```

---

## 5. Output Format

### File output
- Save all chart images to `.presentations/output/assets/`.
- Preferred format: **PNG at 150 DPI** for slides, **SVG** when vector output is requested.
- File naming: `{slide_number}_{chart_slug}.png` (e.g., `04_revenue_by_region.png`).

### Return to presentation-renderer
Provide chart metadata for each generated asset:
```python
chart_metadata = {
    "file_path": ".presentations/output/assets/04_revenue_by_region.png",
    "title": "APAC grew 3x faster than other regions",
    "source": "Internal Finance Report, Q4 2025",
    "key_insight": "APAC revenue growth outpaced EMEA and Americas by 3:1",
    "chart_type": "horizontal_bar",
    "slide_number": 4
}
```

### Asset inventory
After generating all charts, produce a summary list:
```
Charts generated:
  [04] revenue_by_region.png — "APAC grew 3x faster than other regions"
  [07] revenue_bridge.png — "Revenue bridge: +47% driven by Product A"
  [09] customer_distribution.png — "Enterprise segment drives 68% of revenue"
```

---

## 6. HARD RULES

These rules are non-negotiable and must be followed for every chart generated:

1. **Chart title = insight, not description.** Write what the data means, not what the chart shows. "APAC grew 3x faster" not "Revenue by Region".

2. **Source line on every chart.** Include data source and date at bottom-left in small gray text. No exceptions.

3. **Accent color for key data point, neutral gray for everything else.** One data point tells the story — make it visually dominant. Everything else recedes.

4. **Never fabricate data.** If real data is unavailable, use clearly marked sample data with `[SAMPLE DATA]` in the chart subtitle and code comments. The viewer must never mistake sample data for real data.

5. **Axis labels always present with units.** Every axis must have a label that includes the unit of measurement (e.g., "Revenue ($M)", "Growth (%)", "Users (thousands)").

6. **Pie charts: max 5 segments.** If more than 5 categories, group the smallest into "Other" or switch to a horizontal bar chart.

7. **Save to the standard output directory.** All assets go to `.presentations/output/assets/` — never scatter chart files across the project.

8. **Return metadata for every chart.** The renderer needs file path, title, source, and key insight to embed charts correctly.

---

## Anti-Patterns

| Anti-Pattern | Why It Fails | Correct Approach |
|---|---|---|
| Using pie charts for more than 5 categories | Humans cannot accurately compare angles; slices become unreadable past 5 segments | Use horizontal bar chart for comparisons; pie charts only for 2-3 clearly distinct proportions |
| 3D effects on charts | Distorts proportions; back segments appear smaller; adds visual noise without information | Always use flat 2D charts; 3D effects deceive more than they inform |
| Not labeling axes or providing units | Audience guesses at scale; "Revenue" means nothing without currency and time period | Always include axis labels, units, time period, and data source; a chart should be self-explanatory |
| Using rainbow color palettes | Too many colors create visual chaos; colorblind users cannot distinguish many combinations | Use 2-3 brand colors with intensity variation; ensure sufficient contrast; test with colorblind simulator |
| Showing raw data tables when a chart would communicate better | Executives scan for trends and outliers, not individual numbers; tables require too much cognitive effort | Use charts for patterns and trends; tables only for exact reference values or small datasets (under 10 rows) |

Wersje

W bazie nie ma innych skilli o nazwie presentation-datavis.

Migawka bazy z 28.10.2026 · wersja paczki 85e05c1b36cc (skrót SHA-256 całej paczki)

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100presentation-diagrams
    Dodaje do prezentacji diagramy architektury, schematy blokowe i sekwencji oraz wizualizacje systemów dla slajdów oznaczonych [DIAGRAM].
  • 100presentation-renderer
    Kompiluje gotowe konspekty, wizualizacje i style do końcowych plików PPTX lub HTML, gdy slajdy są gotowe do eksportu.
  • 100slide-generation
    Tworzy slajdy z ustrukturyzowanych treści w formacie PPTX, Markdown lub HTML na potrzeby agentów.
  • 100ac-generating-slides
    Generuje slajdy prezentacji z Markdown za pomocą Marp, gdy ktoś chce zrobić lub zaktualizować deck slajdów.
  • 100presentation-builder
    Tworzy prezentacje i slajdy, w tym w Reveal.js, wystąpienia konferencyjne, wykłady i plakaty, także jako JSON prezentacji.
  • 100google-slides
    Czyta i zapisuje Prezentacje Google: pobiera tekst, wyszukuje i tworzy prezentacje, dodaje slajdy i zamienia tekst.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.