|
From: Sylvain L. <syl...@la...> - 2013-09-04 17:03:59
|
Hello I have a performance issue when using a Rectangle patch with linestyle 'dotted'. Here is some code showing it: from matplotlib import gridspec gs = gridspec.GridSpec(1, 2) ax1 = plt.subplot(gs[0, 0]) ax2 = plt.subplot(gs[0, 1]) data = [0, 1] r1 = Rectangle([10, 0.25], 100000, 0.5, facecolor='None', edgecolor='red') r2 = Rectangle([10, 0.25], 100000, 0.5, facecolor='None', edgecolor='red', linestyle='dotted') ax1.add_patch(r1) ax2.add_patch(r2) ax1.plot(data) ax2.plot(data) The steps to reproduce: - %paste the code in pylab - select the zoom tool - zoom on the left plot to the left of the figure until you see the data within the [0, 1] range, and zoom some more (no performance issue) - zoom on the right plot to the left of the figure until you see the data within the [0, 1] range, the more you try zooming, the longer it takes to render - try zooming on the left plot again, performance is now poor So I understand I have three performance issues: - behaviour is different depending on linestyle - performance issue on second plot impacts first plot - data outside of the view limits are taken into account for the rendering (performance hit even if Rectangle starts from x=10 but xlim was reduced by zooming to eg [0, 1]) I initially observed the problem in a wx application using WxAgg, I can reproduce it in pylab with TkAgg, on two separate computers. I've tracked this down to an increasingly slow call in backend_agg.py (l.145, "self._renderer.draw_path(gc, path, transform, rgbFace)" in matplotlib 1.3.0). It then goes to native code, I stopped there. Python 2.7.5, matplotlib 1.3.0 (also observed on 1.2.1). (I have another issue if commenting out the two last lines and %paste-ing it to pylab, I then get an OverflowError, I don't know if this is related) Thanks for your help -- Sylvain |