data-viz ناجح

Guide for creating data visualizations with Python Matplotlib. Use this when asked to generate charts, graphs, or visual reports from crypto data.

47من ١٠٠
٠
نجوم
٢٢
تنزيلات
٩٢
مشاهدات

// تثبيت المهارة

تثبيت المهارة

المهارات هي كود تابع لأطراف ثالثة من مستودعات GitHub العامة. يفحص SkillHub الأنماط الخبيثة المعروفة، لكنه لا يستطيع ضمان السلامة. راجع الكود المصدري قبل التثبيت.

تثبيت عام (على مستوى المستخدم):

npx skillhub install hsph-bst236-2026/crypto-watchtower/data-viz

تثبيت في المشروع الحالي:

npx skillhub install hsph-bst236-2026/crypto-watchtower/data-viz --project

skill.install.customTargetHelp

npx skillhub install hsph-bst236-2026/crypto-watchtower/data-viz --target-dir /path/to/skills

المسار المقترح: ~/.claude/skills/data-viz/

مراجعة الذكاء الاصطناعي

47
من ١٠٠
جودة التعليمات50
دقة الوصف40
الفائدة41
السلامة التقنية65

Scored 47 — technically correct Matplotlib template with accessibility considerations. Limited to one chart type and crypto data. Course project repo limits credibility. Would score higher with multiple chart types.

prototypesimpledata-analystscrypto-tradersdata-visualizationcrypto-chartsmatplotlib
تمت المراجعة بواسطة claude-code في 25‏/3‏/2026

محتوى SKILL.md

---
name: data-viz
description: Guide for creating data visualizations with Python Matplotlib. Use this when asked to generate charts, graphs, or visual reports from crypto data.
---

# Data Visualization Skill: Matplotlib Charts

## Overview
This skill covers creating publication-quality visualizations from cryptocurrency market data using Python and Matplotlib.

## Standard Chart: Horizontal Bar Chart

### Complete Template
```python
#!/usr/bin/env python3
"""Generate market movers bar chart from volatile coins data."""
import json
import matplotlib.pyplot as plt
from pathlib import Path

# Configuration
INPUT_FILE = 'volatile_movers.json'
OUTPUT_FILE = 'market_chart.png'
DPI = 300

# Color scheme (accessible, dark-mode friendly)
COLOR_GAIN = '#00ff88'   # Bright green
COLOR_LOSS = '#ff4444'   # Bright red
COLOR_BG = '#1a1a2e'     # Dark background
COLOR_TEXT = '#eeeeee'   # Light text

def load_data(filepath: str) -> list:
    """Load coin data from JSON file."""
    with open(filepath, 'r', encoding='utf-8') as f:
        return json.load(f)

def create_chart(coins: list, output_path: str) -> None:
    """Create and save horizontal bar chart."""
    if not coins:
        print("No data to visualize")
        return
    
    # Prepare data
    coins_sorted = sorted(coins, key=lambda x: x['price_change_percentage_24h'])
    names = [f"{c['symbol'].upper()}" for c in coins_sorted]
    changes = [c['price_change_percentage_24h'] for c in coins_sorted]
    colors = [COLOR_GAIN if c > 0 else COLOR_LOSS for c in changes]
    
    # Create figure with dark background
    fig, ax = plt.subplots(figsize=(10, max(6, len(names) * 0.4)))
    fig.patch.set_facecolor(COLOR_BG)
    ax.set_facecolor(COLOR_BG)
    
    # Create bars
    bars = ax.barh(names, changes, color=colors, edgecolor='white', linewidth=0.5)
    
    # Add value labels on bars
    for bar, change in zip(bars, changes):
        width = bar.get_width()
        label_x = width + 0.5 if width > 0 else width - 0.5
        ha = 'left' if width > 0 else 'right'
        ax.text(label_x, bar.get_y() + bar.get_height()/2, 
                f'{change:+.1f}%', va='center', ha=ha, 
                color=COLOR_TEXT, fontsize=9)
    
    # Styling
    ax.set_xlabel('24h Price Change (%)', color=COLOR_TEXT, fontsize=12)
    ax.set_title('🔥 Crypto Market Movers', color=COLOR_TEXT, fontsize=16, pad=20)
    ax.tick_params(colors=COLOR_TEXT)
    ax.spines['bottom'].set_color(COLOR_TEXT)
    ax.spines['left'].set_color(COLOR_TEXT)
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    
    # Add zero line
    ax.axvline(x=0, color=COLOR_TEXT, linewidth=0.5, alpha=0.5)
    
    # Save
    plt.tight_layout()
    fig.savefig(output_path, dpi=DPI, bbox_inches='tight', 
                facecolor=COLOR_BG, edgecolor='none')
    plt.close(fig)
    print(f"✅ Chart saved: {output_path}")

if __name__ == "__main__":
    coins = load_data(INPUT_FILE)
    create_chart(coins, OUTPUT_FILE)
```

## Color Schemes

### Dark Mode (Default)
```python
COLOR_BG = '#1a1a2e'      # Deep blue-black
COLOR_TEXT = '#eeeeee'    # Off-white
COLOR_GAIN = '#00ff88'    # Neon green
COLOR_LOSS = '#ff4444'    # Bright red
COLOR_ACCENT = '#4cc9f0'  # Cyan accent
```

### Light Mode Alternative
```python
COLOR_BG = '#ffffff'
COLOR_TEXT = '#333333'
COLOR_GAIN = '#2e7d32'    # Forest green
COLOR_LOSS = '#c62828'    # Dark red
```

### Colorblind-Friendly
```python
COLOR_GAIN = '#0077bb'    # Blue instead of green
COLOR_LOSS = '#ee7733'    # Orange instead of red
```

## Chart Types Reference

### Pie Chart (Market Cap Distribution)
```python
fig, ax = plt.subplots(figsize=(8, 8))
ax.pie(market_caps, labels=names, autopct='%1.1f%%', 
       colors=plt.cm.Set3.colors)
ax.set_title('Market Cap Distribution')
```

### Line Chart (Price History)
```python
fig, ax = plt.subplots(figsize=(12, 6))
ax.plot(dates, prices, color=COLOR_ACCENT, linewidth=2)
ax.fill_between(dates, prices, alpha=0.3, color=COLOR_ACCENT)
ax.set_xlabel('Date')
ax.set_ylabel('Price (USD)')
```

### Scatter Plot (Volume vs Change)
```python
fig, ax = plt.subplots(figsize=(10, 8))
scatter = ax.scatter(volumes, changes, c=changes, 
                     cmap='RdYlGn', s=100, alpha=0.7)
plt.colorbar(scatter, label='24h Change %')
```

## Best Practices

| Practice | Why |
|----------|-----|
| Use `fig, ax` pattern | More control than `plt.` functions |
| Always call `plt.close(fig)` | Prevents memory leaks |
| Set `dpi=300` for output | Publication quality |
| Use `bbox_inches='tight'` | No cut-off labels |
| Set `encoding='utf-8'` | Handle emoji/special chars |
| Use `facecolor` in savefig | Preserves background |

## Troubleshooting

| Issue | Solution |
|-------|----------|
| Labels cut off | Add `bbox_inches='tight'` |
| Blurry output | Increase `dpi` (300+) |
| Memory warnings | Call `plt.close()` after each figure |
| Missing fonts | Use system fonts or install `matplotlib` fonts |
| Wrong colors in saved file | Specify `facecolor` in `savefig()` |

الترخيص

لم يُعلَن أي ترخيص في مصدر هذه المهارة.

النص الكامل للترخيص متاح في المستودع المصدري.

عرض الترخيص في المستودع المصدريالنسخة المنشورة هناك هي المرجع.

data-viz | SkillHub | SkillHub