home / skills / thepexcel / agent-skills / create-visualization
npx playbooks add skill thepexcel/agent-skills --skill create-visualizationReview the files below or copy the command above to add this skill to your agents.
---
name: create-visualization
description: Creates diagrams and animations for STEM education using Matplotlib and Manim. Use for physics diagrams (FBD, vectors), math plots (functions, geometry), flowcharts, or 3Blue1Brown-style animations.
---
# Visualization Skill
สร้าง diagrams และ animations สำหรับอธิบาย STEM concepts
## Quick Decision
| Need | Tool | Script |
|------|------|--------|
| Physics FBD | Matplotlib | `scripts/physics_fbd.py` |
| Math plots/geometry | Matplotlib | `scripts/math_plots.py` |
| Flowcharts | Matplotlib | `scripts/flowchart.py` |
| Animations (3b1b style) | Manim | `scripts/manim_physics.py` |
**Rule:** Static → Matplotlib (fast) | Motion/transform → Manim (powerful)
---
## 1. Physics: Free Body Diagrams
```python
from scripts.physics_fbd import draw_inclined_plane_fbd, draw_two_blocks_rope
# Inclined plane with force decomposition
draw_inclined_plane_fbd(mass=4, angle=30, show_components=True)
# Two blocks connected by rope
draw_two_blocks_rope(mass_A=2, mass_B=3, F_pull=10)
```
**Output:** PNG in `learning-notes/` folder
---
## 2. Math: Plots & Geometry
```python
from scripts.math_plots import plot_function, draw_unit_circle, draw_coordinate_plane
import numpy as np
# Function plot
plot_function(lambda x: np.sin(x), x_range=(-2*np.pi, 2*np.pi), title="sin(x)")
# Unit circle with angles
draw_unit_circle(angles_deg=[0, 30, 45, 60, 90])
# Coordinate plane with vectors
draw_coordinate_plane(
vectors=[((0,0), (3,2), "a", "red"), ((0,0), (1,4), "b", "blue")]
)
```
---
## 3. Flowcharts
```python
from scripts.flowchart import draw_simple_flowchart, draw_decision_flowchart
# Linear flow
draw_simple_flowchart([
("Start", "start"),
("Input x", "io"),
("Process", "process"),
("End", "end"),
])
# Decision branching
draw_decision_flowchart(
before_decision=[("Start", "start")],
decision_text="x > 0?",
yes_branch=[("Positive", "process")],
no_branch=[("Negative", "process")],
after_merge=[("End", "end")]
)
```
---
## 4. Animations (Manim)
For 3Blue1Brown-style animations. See **[references/manim-guide.md](references/manim-guide.md)** for full guide.
### Available Scenes in `scripts/manim_physics.py`
| Scene | Description |
|-------|-------------|
| `VectorAddition` | Head-to-tail vector addition |
| `ForcesOnBox` | FBD with motion |
| `NewtonThirdLaw` | Action-reaction pairs |
| `InclinedPlane` | Forces on incline with equations |
| `ProjectileMotion` | Parabolic path with velocity vectors |
| `CircularMotion` | Centripetal acceleration |
| `AtwoodIncline` | Pulley system (customizable m1, m2, θ) |
### Render Command
```bash
# Preview (low quality, fast)
manim -pql scripts/manim_physics.py VectorAddition
# GIF output
manim -ql --format=gif scripts/manim_physics.py VectorAddition
```
### Custom Animation
```python
from manim import *
class MyScene(Scene):
def construct(self):
circle = Circle(color=BLUE)
self.play(Create(circle))
self.play(circle.animate.shift(RIGHT * 2))
```
---
## 5. Function Explainer Visualization
สร้างภาพอธิบายการทำงานของ Excel/DAX/Power Query functions
### Quick Start
```bash
# 1. Generate visualization
python3 tools/visualize_function.py excel left 1
# 2. Upload to server (--mkdir creates directory if needed)
python3 tools/ftp_upload.py -f media/function-viz/excel/left-1.png -r wp-content/uploads/function-viz/excel/ --mkdir
# 3. Add image_url to JSON example, then publish
python3 tools/smart_publish.py --slugs left --program excel --allow
```
**Output:** `media/function-viz/{program}/{slug}-{example_number}.png`
**Server:** `https://www.thepexcel.com/wp-content/uploads/function-viz/{program}/{slug}-{example}.png`
### Supported Functions
| Function | Description |
|----------|-------------|
| LEFT | ดึงตัวอักษรจากซ้าย |
| RIGHT | ดึงตัวอักษรจากขวา |
| MID | ดึงตัวอักษรจากตรงกลาง |
| FIND | หาตำแหน่งข้อความ |
| SUBSTITUTE | แทนที่ข้อความ |
### Workflow
1. **Generate** — `python3 tools/visualize_function.py {program} {slug} {example_num}`
2. **Upload** — `python3 tools/ftp_upload.py -f {file} -r wp-content/uploads/function-viz/{program}/ --mkdir`
3. **Update JSON** — เพิ่ม `"image_url": "https://..."` ใน example
4. **Publish** — `python3 tools/smart_publish.py --slugs {slug} --program {program} --allow`
### Custom Visualization (Nested Functions)
สำหรับ formula ซับซ้อน เช่น `=LEFT(A1, FIND(" ", A1)-1)` ต้องเขียน script แยก:
```python
# ดูตัวอย่างที่ media/function-viz/excel/left-5-custom.py
```
**Note:** Script หลักรองรับ formula ง่ายๆ ที่มี string literal เท่านั้น
---
## Workflow
1. **Choose tool** — Static (Matplotlib) vs Animation (Manim)
2. **Run script** — `python3 scripts/physics_fbd.py` or `manim -pql ...`
3. **View output** — `explorer.exe output.png` or use image viewer
**Tip:** Use `run_in_background=true` for viewers to avoid blocking conversation.
## Related Skills (Optional)
| When | Suggest |
|------|---------|
| AI-generated images/videos (realistic, artistic) | `/prompt-ai-image-video` - prompt engineering |
| Teaching concepts with visuals | `/explain-concepts` - ACES methodology |
| Need facts before visualizing | `/deep-research` - verify data |
| Problem-solving context | `/problem-solving` - structured thinking |
**Note:** Use `/create-visualization` for technical diagrams (FBD, plots, flowcharts). Use `/prompt-ai-image-video` for AI-generated realistic/artistic images and videos.