9.0 KiB
Pymoo Visualization Reference
Comprehensive reference for visualization capabilities in pymoo.
Overview
Pymoo provides eight visualization types for analyzing multi-objective optimization results. All plots wrap matplotlib and accept standard matplotlib keyword arguments for customization.
Core Visualization Types
1. Scatter Plots
Purpose: Visualize objective space for 2D, 3D, or higher dimensions Best for: Pareto fronts, solution distributions, algorithm comparisons
Usage:
from pymoo.visualization.scatter import Scatter
# 2D scatter plot
plot = Scatter()
plot.add(result.F, color="red", label="Algorithm A")
plot.add(ref_pareto_front, color="black", alpha=0.3, label="True PF")
plot.show()
# 3D scatter plot
plot = Scatter(title="3D Pareto Front")
plot.add(result.F)
plot.show()
Parameters:
title: Plot titlefigsize: Figure size tuple (width, height)legend: Show legend (default: True)labels: Axis labels list
Add method parameters:
color: Color specificationalpha: Transparency (0-1)s: Marker sizemarker: Marker stylelabel: Legend label
N-dimensional projection: For >3 objectives, automatically creates scatter plot matrix
2. Parallel Coordinate Plots (PCP)
Purpose: Compare multiple solutions across many objectives Best for: Many-objective problems, comparing algorithm performance
Mechanism: Each vertical axis represents one objective, lines connect objective values for each solution
Usage:
from pymoo.visualization.pcp import PCP
plot = PCP()
plot.add(result.F, color="blue", alpha=0.5)
plot.add(reference_set, color="red", alpha=0.8)
plot.show()
Parameters:
title: Plot titlefigsize: Figure sizelabels: Objective labelsbounds: Normalization bounds (min, max) per objectivenormalize_each_axis: Normalize to [0,1] per axis (default: True)
Best practices:
- Normalize for different objective scales
- Use transparency for overlapping lines
- Limit number of solutions for clarity (<1000)
3. Heatmap
Purpose: Show solution density and distribution patterns Best for: Understanding solution clustering, identifying gaps
Usage:
from pymoo.visualization.heatmap import Heatmap
plot = Heatmap(title="Solution Density")
plot.add(result.F)
plot.show()
Parameters:
bins: Number of bins per dimension (default: 20)cmap: Colormap name (e.g., "viridis", "plasma", "hot")norm: Normalization method
Interpretation:
- Bright regions: High solution density
- Dark regions: Few or no solutions
- Reveals distribution uniformity
4. Petal Diagram
Purpose: Radial representation of multiple objectives Best for: Comparing individual solutions across objectives
Structure: Each "petal" represents one objective, length indicates objective value
Usage:
from pymoo.visualization.petal import Petal
plot = Petal(title="Solution Comparison", bounds=[min_vals, max_vals])
plot.add(result.F[0], color="blue", label="Solution 1")
plot.add(result.F[1], color="red", label="Solution 2")
plot.show()
Parameters:
bounds: [min, max] per objective for normalizationlabels: Objective namesreverse: Reverse specific objectives (for minimization display)
Use cases:
- Decision making between few solutions
- Presenting trade-offs to stakeholders
5. Radar Charts
Purpose: Multi-criteria performance profiles Best for: Comparing solution characteristics
Similar to: Petal diagram but with connected vertices
Usage:
from pymoo.visualization.radar import Radar
plot = Radar(bounds=[min_vals, max_vals])
plot.add(solution_A, label="Design A")
plot.add(solution_B, label="Design B")
plot.show()
6. Radviz
Purpose: Dimensional reduction for visualization Best for: High-dimensional data exploration, pattern recognition
Mechanism: Projects high-dimensional points onto 2D circle, dimension anchors on perimeter
Usage:
from pymoo.visualization.radviz import Radviz
plot = Radviz(title="High-dimensional Solution Space")
plot.add(result.F, color="blue", s=30)
plot.show()
Parameters:
endpoint_style: Anchor point visualizationlabels: Dimension labels
Interpretation:
- Points near anchor: High value in that dimension
- Central points: Balanced across dimensions
- Clusters: Similar solutions
7. Star Coordinates
Purpose: Alternative high-dimensional visualization Best for: Comparing multi-dimensional datasets
Mechanism: Each dimension as axis from origin, points plotted based on values
Usage:
from pymoo.visualization.star_coordinate import StarCoordinate
plot = StarCoordinate()
plot.add(result.F)
plot.show()
Parameters:
axis_style: Axis appearanceaxis_extension: Axis length beyond max valuelabels: Dimension labels
8. Video/Animation
Purpose: Show optimization progress over time Best for: Understanding convergence behavior, presentations
Usage:
from pymoo.visualization.video import Video
# Create animation from algorithm history
anim = Video(result.algorithm)
anim.save("optimization_progress.mp4")
Requirements:
- Algorithm must store history (use
save_history=Truein minimize) - ffmpeg installed for video export
Customization:
- Frame rate
- Plot type per frame
- Overlay information (generation, hypervolume, etc.)
Advanced Features
Multiple Dataset Overlay
All plot types support adding multiple datasets:
plot = Scatter(title="Algorithm Comparison")
plot.add(nsga2_result.F, color="red", alpha=0.5, label="NSGA-II")
plot.add(nsga3_result.F, color="blue", alpha=0.5, label="NSGA-III")
plot.add(true_pareto_front, color="black", linewidth=2, label="True PF")
plot.show()
Custom Styling
Pass matplotlib kwargs directly:
plot = Scatter(
title="My Results",
figsize=(10, 8),
tight_layout=True
)
plot.add(
result.F,
color="red",
marker="o",
s=50,
alpha=0.7,
edgecolors="black",
linewidth=0.5
)
Normalization
Normalize objectives to [0,1] for fair comparison:
plot = PCP(normalize_each_axis=True, bounds=[min_bounds, max_bounds])
Save to File
Save plots instead of displaying:
plot = Scatter()
plot.add(result.F)
plot.save("my_plot.png", dpi=300)
Visualization Selection Guide
Choose visualization based on:
| Problem Type | Primary Plot | Secondary Plot |
|---|---|---|
| 2-objective | Scatter | Heatmap |
| 3-objective | 3D Scatter | Parallel Coordinates |
| Many-objective (4-10) | Parallel Coordinates | Radviz |
| Many-objective (>10) | Radviz | Star Coordinates |
| Solution comparison | Petal/Radar | Parallel Coordinates |
| Algorithm convergence | Video | Scatter (final) |
| Distribution analysis | Heatmap | Scatter |
Combinations:
- Scatter + Heatmap: Overall distribution + density
- PCP + Petal: Population overview + individual solutions
- Scatter + Video: Final result + convergence process
Common Visualization Workflows
1. Algorithm Comparison
from pymoo.visualization.scatter import Scatter
plot = Scatter(title="Algorithm Comparison on ZDT1")
plot.add(ga_result.F, color="blue", label="GA", alpha=0.6)
plot.add(nsga2_result.F, color="red", label="NSGA-II", alpha=0.6)
plot.add(zdt1.pareto_front(), color="black", label="True PF")
plot.show()
2. Many-objective Analysis
from pymoo.visualization.pcp import PCP
plot = PCP(
title="5-objective DTLZ2 Results",
labels=["f1", "f2", "f3", "f4", "f5"],
normalize_each_axis=True
)
plot.add(result.F, alpha=0.3)
plot.show()
3. Decision Making
from pymoo.visualization.petal import Petal
# Compare top 3 solutions
candidates = result.F[:3]
plot = Petal(
title="Top 3 Solutions",
bounds=[result.F.min(axis=0), result.F.max(axis=0)],
labels=["Cost", "Weight", "Efficiency", "Safety"]
)
for i, sol in enumerate(candidates):
plot.add(sol, label=f"Solution {i+1}")
plot.show()
4. Convergence Visualization
from pymoo.optimize import minimize
# Enable history
result = minimize(
problem,
algorithm,
('n_gen', 200),
seed=1,
save_history=True,
verbose=False
)
# Create convergence plot
from pymoo.visualization.scatter import Scatter
plot = Scatter(title="Convergence Over Generations")
for gen in [0, 50, 100, 150, 200]:
F = result.history[gen].opt.get("F")
plot.add(F, alpha=0.5, label=f"Gen {gen}")
plot.show()
Tips and Best Practices
- Use appropriate alpha: For overlapping points, use
alpha=0.3-0.7 - Normalize objectives: Different scales? Normalize for fair visualization
- Label clearly: Always provide meaningful labels and legends
- Limit data points: >10000 points? Sample or use heatmap
- Color schemes: Use colorblind-friendly palettes
- Save high-res: Use
dpi=300for publications - Interactive exploration: Consider plotly for interactive plots
- Combine views: Show multiple perspectives for comprehensive analysis