Customize with matplotlib

In this example, we will see how to modify the matplotlib figures generated by an OptPostProcessor. This can be useful to finely tune a graph for a presentation or a paper.

from __future__ import annotations

from matplotlib import pyplot as plt

from gemseo import create_design_space
from gemseo import create_discipline
from gemseo import create_scenario

We consider a minimization problem over the interval \([0,1]\) of the \(f(x)=x^2\) objective function:

discipline = create_discipline("AnalyticDiscipline", expressions={"y": "x**2"})

design_space = create_design_space()
design_space.add_variable("x", l_b=0.0, u_b=1.0)

scenario = create_scenario([discipline], "DisciplinaryOpt", "y", design_space)

We solve this optimization problem with the gradient-free algorithm COBYLA:

scenario.execute({"algo": "NLOPT_COBYLA", "max_iter": 10})

Then, we can post-process this MDOScenario with an OptHistoryView.

opt_post_processor = scenario.post_process("OptHistoryView", show=False, save=False)

Instead of saving or showing this OptHistoryView, and so the associated OptHistoryView.figures, we will slightly modify the latter which are matplotlib figures by default.

figures = opt_post_processor.figures
print(figures.keys())

By default, the color bar representing the evolution of the optimization variables does not use labels. To add a custom label indicating that the optimization variables are scaled in \([0,1]\), we can get the matplotlib Axes of the matplotlib figures:

figure = figures["variables"]
axes = figure.axes

and change the y-label of the color bar:

axes[1].set_ylabel("Optimization variables scales in [0,1]")

We can also change the y-label of the graph:

axes[0].set_ylabel("Optimization variables")

Lastly, we can plot all the figures:

plt.show()

or save the modified figure:

figure.savefig("variables.png")

Gallery generated by Sphinx-Gallery