🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Python Dataviz

by @matthew-a-gordon

Professional data visualization using Python (matplotlib, seaborn, plotly). Create publication-quality static charts, statistical visualizations, and interac...

Versionv1.0.0
Downloads8,010
Installs71
Stars⭐ 7
TERMINAL
clawhub install python-dataviz

πŸ“– About This Skill


name: python-dataviz description: Professional data visualization using Python (matplotlib, seaborn, plotly). Create publication-quality static charts, statistical visualizations, and interactive plots. Use when generating charts/graphs/plots from data, creating infographics with data components, or producing scientific/statistical visualizations. Supports PNG/SVG (static) and HTML (interactive) export.

Python Data Visualization

Create professional charts, graphs, and statistical visualizations using Python's leading libraries.

Libraries & Use Cases

matplotlib - Static plots, publication-quality, full control

  • Bar, line, scatter, pie, histogram, heatmap
  • Multi-panel figures, subplots
  • Custom styling, annotations
  • Export: PNG, SVG, PDF
  • seaborn - Statistical visualizations, beautiful defaults

  • Distribution plots (violin, box, kde, histogram)
  • Categorical plots (bar, count, swarm, box)
  • Relationship plots (scatter, line, regression)
  • Matrix plots (heatmap, clustermap)
  • Built on matplotlib, integrates seamlessly
  • plotly - Interactive charts, web-friendly

  • Hover tooltips, zoom, pan
  • 3D plots, animations
  • Dashboards via Dash framework
  • Export: HTML, PNG (requires kaleido)
  • Quick Start

    Setup Environment

    cd skills/python-dataviz
    python3 -m venv .venv
    source .venv/bin/activate
    pip install .
    

    Create a Chart

    import matplotlib.pyplot as plt
    import numpy as np

    Data

    x = np.linspace(0, 10, 100) y = np.sin(x)

    Plot

    plt.figure(figsize=(10, 6)) plt.plot(x, y, linewidth=2, color='#667eea') plt.title('Sine Wave', fontsize=16, fontweight='bold') plt.xlabel('X Axis') plt.ylabel('Y Axis') plt.grid(alpha=0.3) plt.tight_layout()

    Export

    plt.savefig('output.png', dpi=300, bbox_inches='tight') plt.savefig('output.svg', bbox_inches='tight')

    Chart Selection Guide

    Distribution/Statistical:

  • Histogram β†’ plt.hist() or sns.histplot()
  • Box plot β†’ sns.boxplot()
  • Violin plot β†’ sns.violinplot()
  • KDE β†’ sns.kdeplot()
  • Comparison:

  • Bar chart β†’ plt.bar() or sns.barplot()
  • Grouped bar β†’ sns.barplot(hue=...)
  • Horizontal bar β†’ plt.barh() or sns.barplot(orient='h')
  • Relationship:

  • Scatter β†’ plt.scatter() or sns.scatterplot()
  • Line β†’ plt.plot() or sns.lineplot()
  • Regression β†’ sns.regplot() or sns.lmplot()
  • Heatmaps:

  • Correlation matrix β†’ sns.heatmap(df.corr())
  • 2D data β†’ plt.imshow() or sns.heatmap()
  • Interactive:

  • Any plotly chart β†’ plotly.express or plotly.graph_objects
  • See references/plotly-examples.md
  • Best Practices

    1. Figure Size & DPI

    plt.figure(figsize=(10, 6))  # Width x Height in inches
    plt.savefig('output.png', dpi=300)  # Publication: 300 dpi, Web: 72-150 dpi
    

    2. Color Palettes

    # Seaborn palettes (works with matplotlib too)
    import seaborn as sns
    sns.set_palette("husl")  # Colorful
    sns.set_palette("muted")  # Soft
    sns.set_palette("deep")  # Bold

    Custom colors

    colors = ['#667eea', '#764ba2', '#f6ad55', '#4299e1']

    3. Styling

    # Use seaborn styles even for matplotlib
    import seaborn as sns
    sns.set_theme()  # Better defaults
    sns.set_style("whitegrid")  # Options: whitegrid, darkgrid, white, dark, ticks

    Or matplotlib styles

    plt.style.use('ggplot') # Options: ggplot, seaborn, bmh, fivethirtyeight

    4. Multiple Subplots

    fig, axes = plt.subplots(2, 2, figsize=(12, 10))
    axes[0, 0].plot(x, y1)
    axes[0, 1].plot(x, y2)
    

    etc.

    plt.tight_layout() # Prevent label overlap

    5. Export Formats

    # PNG for sharing/embedding (raster)
    plt.savefig('chart.png', dpi=300, bbox_inches='tight', transparent=False)

    SVG for editing/scaling (vector)

    plt.savefig('chart.svg', bbox_inches='tight')

    For plotly (interactive)

    import plotly.express as px fig = px.scatter(df, x='col1', y='col2') fig.write_html('chart.html')

    Advanced Topics

    See references/ for detailed guides:

  • Color theory & palettes: references/colors.md
  • Statistical plots: references/statistical.md
  • Plotly interactive charts: references/plotly-examples.md
  • Multi-panel layouts: references/layouts.md
  • Example Scripts

    See scripts/ for ready-to-use examples:

  • scripts/bar_chart.py - Bar and grouped bar charts
  • scripts/line_chart.py - Line plots with multiple series
  • scripts/scatter_plot.py - Scatter plots with regression
  • scripts/heatmap.py - Correlation heatmaps
  • scripts/distribution.py - Histograms, KDE, violin plots
  • scripts/interactive.py - Plotly interactive charts
  • Common Patterns

    Data from CSV

    import pandas as pd
    df = pd.read_csv('data.csv')

    Plot with pandas (uses matplotlib)

    df.plot(x='date', y='value', kind='line', figsize=(10, 6)) plt.savefig('output.png', dpi=300)

    Or with seaborn for better styling

    sns.lineplot(data=df, x='date', y='value') plt.savefig('output.png', dpi=300)

    Dictionary Data

    data = {'Category A': 25, 'Category B': 40, 'Category C': 15}

    Matplotlib

    plt.bar(data.keys(), data.values()) plt.savefig('output.png', dpi=300)

    Seaborn (convert to DataFrame)

    import pandas as pd df = pd.DataFrame(list(data.items()), columns=['Category', 'Value']) sns.barplot(data=df, x='Category', y='Value') plt.savefig('output.png', dpi=300)

    NumPy Arrays

    import numpy as np

    x = np.linspace(0, 10, 100) y = np.sin(x)

    plt.plot(x, y) plt.savefig('output.png', dpi=300)

    Troubleshooting

    "No module named matplotlib"

    cd skills/python-dataviz
    source .venv/bin/activate
    pip install -r requirements.txt
    

    Blank output / "Figure is empty"

  • Check that plt.savefig() comes AFTER plotting commands
  • Use plt.show() for interactive viewing during development
  • Labels cut off

    plt.tight_layout()  # Add before plt.savefig()
    

    Or

    plt.savefig('output.png', bbox_inches='tight')

    Low resolution output

    plt.savefig('output.png', dpi=300)  # Not 72 or 100
    

    Environment

    The skill includes a venv with all dependencies. Always activate before use:

    cd /home/matt/.openclaw/workspace/skills/python-dataviz
    source .venv/bin/activate
    

    Dependencies: matplotlib, seaborn, plotly, pandas, numpy, kaleido (for plotly static export)

    πŸ’‘ Examples

    Setup Environment

    cd skills/python-dataviz
    python3 -m venv .venv
    source .venv/bin/activate
    pip install .
    

    Create a Chart

    import matplotlib.pyplot as plt
    import numpy as np

    Data

    x = np.linspace(0, 10, 100) y = np.sin(x)

    Plot

    plt.figure(figsize=(10, 6)) plt.plot(x, y, linewidth=2, color='#667eea') plt.title('Sine Wave', fontsize=16, fontweight='bold') plt.xlabel('X Axis') plt.ylabel('Y Axis') plt.grid(alpha=0.3) plt.tight_layout()

    Export

    plt.savefig('output.png', dpi=300, bbox_inches='tight') plt.savefig('output.svg', bbox_inches='tight')

    πŸ“‹ Tips & Best Practices

    1. Figure Size & DPI

    plt.figure(figsize=(10, 6))  # Width x Height in inches
    plt.savefig('output.png', dpi=300)  # Publication: 300 dpi, Web: 72-150 dpi
    

    2. Color Palettes

    # Seaborn palettes (works with matplotlib too)
    import seaborn as sns
    sns.set_palette("husl")  # Colorful
    sns.set_palette("muted")  # Soft
    sns.set_palette("deep")  # Bold

    Custom colors

    colors = ['#667eea', '#764ba2', '#f6ad55', '#4299e1']

    3. Styling

    # Use seaborn styles even for matplotlib
    import seaborn as sns
    sns.set_theme()  # Better defaults
    sns.set_style("whitegrid")  # Options: whitegrid, darkgrid, white, dark, ticks

    Or matplotlib styles

    plt.style.use('ggplot') # Options: ggplot, seaborn, bmh, fivethirtyeight

    4. Multiple Subplots

    fig, axes = plt.subplots(2, 2, figsize=(12, 10))
    axes[0, 0].plot(x, y1)
    axes[0, 1].plot(x, y2)
    

    etc.

    plt.tight_layout() # Prevent label overlap

    5. Export Formats

    # PNG for sharing/embedding (raster)
    plt.savefig('chart.png', dpi=300, bbox_inches='tight', transparent=False)

    SVG for editing/scaling (vector)

    plt.savefig('chart.svg', bbox_inches='tight')

    For plotly (interactive)

    import plotly.express as px fig = px.scatter(df, x='col1', y='col2') fig.write_html('chart.html')