Speedup default PlotWidget/PlotItem initialization #3315
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I needed to generate a bunch of plots and noticed that it was quite slow. This PR tries to reduce the number of overheads on initializing PlotWidget by implementing several optimizations:
ViewBoxMenuonPlotWidgetinit. Create them on mouse events (or when one wants ot accessmenuproperty explicitly) instead when needed -- manysetupUi()calls required to create menu are expensiveWidgetGroupfromViewBoxMenu-- they were unused there -- reduces expensiveautoAdd()method recursionsAxisItemproperties and avoid calling_updateLabelduring initialization (setHtmlis quite expensive!)LabelItemtext during initialization if text is empty (sincesetHtmlis slow)AxisItemandPlotItemUI templates (unused) (to avoid generating these calls, pass-aoption touic)try..exceptblocksHere are my benchmarks with this script:
0.51764089999778660.28181239999685204And also


cProfileresults (before and after respectively):obtained by running this script:
and converting results to svg with
yelp-gprof2dotandgraphviz