Visualizing Results¶
EGTtools provides a set of flexible plotting functions to help you visualize evolutionary dynamics, fixation probabilities, strategy distributions, and gradients of selection. The plotting utilities are organized into: - 2-strategy plots, - Simplex plots for 3 strategies, - General-purpose plots for higher-dimensional cases.
—
Populations with 2 Strategies¶
The Gradient of Selection and Stability in Infinite Populations¶
To visualize the gradient of selection under replicator dynamics for 2-strategy games, use:
egttools.plotting.indicators.plot_gradients
Example:
import numpy as np
import egttools as egt
payoffs = np.array([[-0.5, 2.], [0., 0]])
x = np.linspace(0, 1, 101)
gradient_function = lambda x: egt.analytical.replicator_equation(x, payoffs)
gradients = np.array([gradient_function([xi, 1-xi]) for xi in x])
egt.plotting.indicators.plot_gradients(
gradients[:, 0],
xlabel="frequency of hawks",
roots=[0.0, 0.5, 1.0],
stability=[-1, 1, -1]
)
This function can also indicate the stability of roots using different markers.
—
The Gradient of Selection in Finite Populations¶
To plot gradients obtained under stochastic evolutionary dynamics in finite populations, use the same plotting function:
egttools.plotting.indicators.plot_gradients
Example:
from egttools.analytical import PairwiseComparison
Z = 100 # Population size
beta = 1
A = np.array([[-0.5, 2.], [0., 0]])
game = egt.games.Matrix2PlayerGameHolder(2, A)
evolver = PairwiseComparison(Z, game)
gradients = np.array([
evolver.calculate_gradient_of_selection(beta, np.array([k, Z-k]))
for k in range(Z + 1)
])
egt.plotting.indicators.plot_gradients(
gradients[:, 0],
xlabel="frequency of hawks (k/Z)"
)
—
Plotting the Stationary Distribution¶
To visualize stationary distributions over states or strategies:
egttools.plotting.helpers.plot_stationary_distribution
egttools.plotting.helpers.plot_strategy_distribution
Example for a simple distribution:
stationary_distribution = np.random.rand(101)
stationary_distribution /= stationary_distribution.sum()
egt.plotting.helpers.plot_stationary_distribution(
stationary_distribution,
xlabel="number of cooperators",
ylabel="probability"
)
For strategy distributions (especially when the state space is too large to track full states):
strategy_distribution = np.random.rand(2)
strategy_distribution /= strategy_distribution.sum()
egt.plotting.helpers.plot_strategy_distribution(
strategy_distribution,
strategy_labels=["Hawk", "Dove"]
)
—
Populations with 3 Strategies¶
The Simplex2D Class¶
For visualizing three-strategy dynamics on a 2D simplex, EGTtools provides:
egttools.plotting.simplex2d.Simplex2D
The Simplex2D class allows plotting gradients, stationary distributions, and evolutionary trajectories on the 2-simplex (triangle).
Initialization:
from egttools.plotting.simplex2d import Simplex2D
simplex = Simplex2D(nb_points_per_axis=50)
You can plot vector fields, color maps, or trajectories using its methods.
—
The Gradient of Selection and Stability in Infinite Populations¶
You can plot the deterministic flow of replicator dynamics in a three-strategy game:
# Assuming you have a function that computes dx/dt given x
def gradient_function(x):
# Example dummy function
return np.array([-x[0] * (1 - x[0]), x[1] * (1 - x[1])])
simplex.plot_quiver(gradient_function)
—
The Gradient of Selection and Stationary Distribution in Finite Populations¶
You can also plot heatmaps of stationary distributions over the simplex:
stationary_distribution = np.random.rand(simplex.nb_points)
simplex.plot_stationary_distribution(stationary_distribution)
—
Populations with More Than 3 Strategies¶
Currently, for more than 3 strategies, EGTtools provides basic plotting utilities such as bar plots for strategy frequencies:
egttools.plotting.helpers.plot_strategy_distribution
Example:
strategy_distribution = np.random.rand(5)
strategy_distribution /= strategy_distribution.sum()
egt.plotting.helpers.plot_strategy_distribution(
strategy_distribution,
strategy_labels=["A", "B", "C", "D", "E"]
)
Advanced visualization methods (e.g., 3D simplexes for 4 strategies) are under development.
Note
Support for plotting 3D simplexes (tetrahedrons) for 4-strategy populations is planned for future versions.