Note
Go to the end to download the full example code
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")