Chart Visualization

SkillMedia

Generate charts: select type, extract data, render image.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Chart Visualization skill

What this skill tells your AI

The instructions your AI receives, as published by hezaohezao/poirot in poirot/backend/agents/skill/builtin_skills/creative/chart-visualization/SKILL.md and read by ahel’s review.

Overview

Transform data into visual charts. Intelligently select the most suitable chart type, extract parameters, and generate a chart image.

Poirot note: The original deer-flow skill uses a bundled scripts/generate.js (Node.js + charting library). Poirot doesn't bundle that script. Use bash with Python (matplotlib/plotly) as the rendering engine instead. Install: pip install matplotlib plotly.

Chart Selection Guide

Data PatternRecommended ChartWhen
Time SeriesLine / AreaTrends over time
ComparisonsBar / ColumnCategorical comparison
DistributionHistogram / BoxplotFrequency distribution
Part-to-WholePie / TreemapProportions
RelationshipsScatterCorrelation
FlowSankeyFlow between stages
Multi-dimensionalRadarCompare across dimensions
ProcessFunnelStage conversion
HierarchyOrg chart / Mind mapTree structure
GeographicMapSpatial data

Workflow

1. Select Chart Type

Analyze the user's data features:

  • Time dimension? → Line/Area
  • Categories? → Bar/Column
  • Proportions? → Pie/Treemap
  • Correlation? → Scatter
  • Flow? → Sankey
  • Multiple dimensions? → Radar

2. Prepare Data

Extract data from user input, format as Python data structure:

data = {
    "labels": ["Jan", "Feb", "Mar", "Apr", "May"],
    "values": [120, 150, 180, 200, 220],
    "title": "Monthly Revenue",
    "xlabel": "Month",
    "ylabel": "Revenue ($K)"
}

3. Generate Chart

python3 -c "
import matplotlib
matplotlib.use('Agg')  # non-interactive backend
import matplotlib.pyplot as plt

labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May']
values = [120, 150, 180, 200, 220]

fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(labels, values, marker='o', linewidth=2, markersize=8)
ax.set_title('Monthly Revenue', fontsize=16, fontweight='bold')
ax.set_xlabel('Month', fontsize=12)
ax.set_ylabel('Revenue ($K)', fontsize=12)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('.poirot/outputs/chart.png', dpi=150, bbox_inches='tight')
print('Saved to .poirot/outputs/chart.png')
"

Common Chart Types via matplotlib

# Bar chart
python3 -c "
import matplotlib; matplotlib.use('Agg')
import matplotlib.pyplot as plt
cats = ['A', 'B', 'C', 'D']
vals = [23, 45, 12, 67]
plt.bar(cats, vals, color=['#4CAF50', '#2196F3', '#FF9800', '#F44336'])
plt.title('Category Comparison')
plt.savefig('.poirot/outputs/bar.png', dpi=150)
"

# Scatter plot
python3 -c "
import matplotlib; matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(100)
y = x * 0.8 + np.random.randn(100) * 0.5
plt.scatter(x, y, alpha=0.6, c='steelblue')
plt.title('Correlation Scatter')
plt.savefig('.poirot/outputs/scatter.png', dpi=150)
"

# Pie chart
python3 -c "
import matplotlib; matplotlib.use('Agg')
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C']
sizes = [45, 35, 20]
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('Market Share')
plt.savefig('.poirot/outputs/pie.png', dpi=150)
"

Pitfalls

  • matplotlib backend: always use matplotlib.use('Agg') for non-interactive (headless) rendering. Without it, matplotlib may try to open a GUI window.
  • Chinese characters: matplotlib may not render CJK by default. Set font: plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
  • DPI: use dpi=150 for crisp images. dpi=300 for print quality.
  • File size: PNG is standard. Use SVG for vector (plt.savefig('chart.svg')).
  • Color palettes: use colorblind-friendly palettes. Avoid red/green only.

Signals

GitHub stars
220
Forks
19
Last commit
Jul 2026
Advanced
Catalog kind
skill
Gateway key
chart-visualization
Source
github.com/hezaohezao/poirot