On Wed, Aug 4, 2010 at 9:42 AM, Ulf Larsson <ulf.j.lars...@hotmail.com> wrote: > > > Hi, > > I have some performance problems when plotting several lines and would > appreciate some comments. My application plots lots of lines (~5000) > of different sizes. The performance bottleneck lies in the following > code snippet: > > for s in data.layout.segment: > x = [] > y = [] > for p in s.part: > for px, py in p.curve_points(): > x.append(px) > y.append(py) > axes.plot(x, y, 'g', label = '_nolegend_') > > Profiling showed that half of the time was spent in parsing the plot > arguments and most of the other half was spent in > Axes._set_artist_props. > > I could speed up the application by using Line2D and > Axes.add_lines. But the only way to come around the time spent in > Axes._set_artist_props that I could come up with is this ugly hack > where I only call Axes.add_line for the first line and after that use > copies that are added directly to Axes.lines. > > org_line = None > for s in data.layout.segment: > x = [] > y = [] > for p in s.part: > for px, py in p.curve_points(): > x.append(px) > y.append(py) > if not org_line: > org_line = matplotlib.lines.Line2D(numpy.array(x), numpy.array(y), > color='green', label = '_nolegend_') > axis.add_line(org_line) > else: > line = copy.copy(org_line) > line.set_xdata(numpy.array(x)) > line.set_ydata(numpy.array(y)) > axis.lines.append(line) > > Is there a cleaner way to do this?
Use a LineCollection: http://matplotlib.sourceforge.net/search.html?q=codex+linecollection JDH ------------------------------------------------------------------------------ The Palm PDK Hot Apps Program offers developers who use the Plug-In Development Kit to bring their C/C++ apps to Palm for a share of $1 Million in cash or HP Products. Visit us here for more details: http://p.sf.net/sfu/dev2dev-palm _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users