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 gemseo import create_design_space
from gemseo import create_discipline
from gemseo import create_scenario
from matplotlib import pyplot as plt
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")
Total running time of the script: (0 minutes 0.000 seconds)