Contour Plots#

2D contour visualizations of test functions.


Basic Contour Plot#

import os
from surfaces.test_functions.algebraic import RastriginFunction
from surfaces._visualize import plot_contour

func = RastriginFunction(n_dim=2)

# Create contour plot
fig = plot_contour(func, title="Rastrigin Contour")

if not os.environ.get("SURFACES_TESTING"):
    fig.show()

Customizing Contours#

import os
from surfaces.test_functions.algebraic import RosenbrockFunction
from surfaces._visualize import plot_contour

func = RosenbrockFunction(n_dim=2)

fig = plot_contour(
    func,
    title="Rosenbrock Function",
    resolution=200,  # Higher resolution
)

if not os.environ.get("SURFACES_TESTING"):
    fig.show()

Comparing Landscapes#

import os
from surfaces.test_functions.algebraic import (
    SphereFunction,
    RastriginFunction,
    HimmelblausFunction,
)
from surfaces._visualize import plot_contour

functions = [
    ("Sphere (unimodal)", SphereFunction(n_dim=2)),
    ("Rastrigin (multimodal)", RastriginFunction(n_dim=2)),
    ("Himmelblau (4 minima)", HimmelblausFunction()),
]

for title, func in functions:
    fig = plot_contour(func, title=title)
    print(f"Created contour plot for {title}")

Matplotlib Backend#

"""Use matplotlib for publication-quality figures."""

import matplotlib.pyplot as plt
import numpy as np
from surfaces.test_functions.algebraic import BealeFunction

func = BealeFunction()
space = func.search_space

# Create grid
x = np.linspace(space['x0'].min(), space['x0'].max(), 100)
y = np.linspace(space['x1'].min(), space['x1'].max(), 100)
X, Y = np.meshgrid(x, y)

# Evaluate function
Z = np.zeros_like(X)
for i in range(X.shape[0]):
    for j in range(X.shape[1]):
        Z[i, j] = func({"x0": X[i, j], "x1": Y[i, j]})

# Plot
plt.figure(figsize=(8, 6))
plt.contourf(X, Y, Z, levels=50, cmap='viridis')
plt.colorbar(label='f(x, y)')
plt.xlabel('x0')
plt.ylabel('x1')
plt.title("Beale Function")
plt.close()  # Don't display in test mode
print("Matplotlib contour plot created!")