Open willfurnass opened 4 years ago
It seems a good solution to me. The stochastic views (SSA and multiagent) also give the possibility to change graphical representation via GUI, but I believe the view can update the plot by just referring to axes as you propose.
e.g. see function in https://github.com/DiODeProject/MuMoT/blob/5ef6f7a68c451f61b151133ddcbb81cbf441b6fa/mumot/views.py#L3498 that calls the function self._initFigure()
for each graphical visualisation change.
For multiControllers the process 'should' work the same... I think in this case the multiView, when constructs the child-views, should assign them the correct pointer to its _ax
and _fig
Using the stateful API (functions and attributes of the
matplotlib.pyplot
module) correctly gets increasingly tricky as a libraries that depends on matplotlib grows larger.MuMoT's use of matplotlib would be cleaner if something like the following were adoped:
Figure
andAxes
pair are instantiated in__init__()
usingplt.subplots()
unless anAxes
instance is passed as a param to__init__()
, in which case a reference to the associatedFigure
can be found via theAxes
ref. The references to theFigure
andAxes
are stored as instance attributes (e.g. asself._ax
andself._fig
).self._ax
orself._fig
(rather than the statefulplt.plot
/plt.gcf()
/plt.gca()
/plt.clf()
/plt.cla()
etc).My knowledge of how the parts of
mumot/view.py
fit together is still rather shakey. What issues can others foresee with the above? Would a positive side-effect be thatself._figureNum
would be redundant? How would the above work withMuMoTmultiView
s?