From: Alan G. <ala...@gm...> - 2012-06-05 02:27:16
|
I've come across a problem (possibly a bug in cleanup_path) after plotting a line containing nan's and then scaling the axes so that the line is clipped by the axes. Instead of a gap at the position of the nan value, two extra segments appear - back to the start and then onto the next-plus-one valid point. It's quite dependent on exactly how the line is clipped, and by interactively zooming the plot the issue can be made to disappear and reappear. e.g. ############################## import matplotlib matplotlib.use('pdf') #pdf or ps or agg (incl. inside gui) reproduce the issue, cairo works as expected import matplotlib.pyplot as plt import numpy as np f = plt.figure() ax = f.add_subplot(111) ax.plot([30.,50.,900.,449.0,np.nan,50,60,100]) ax.set_ylim([0,400]) #default plot limits work fine f.savefig('test') ############################## This is with the Ubuntu 12.04 version of matplotlib (on x86_64); v1.1.1rc. Version 1.0.1 (also via Ubuntu) was ok. For the pdf backend, at least, the problem seems to appear in the call to cleanup_path at line 247 of path.py (in iter_segments): vertices, codes = cleanup_path(self, transform, remove_nans, clip, snap, stroke_width, simplify, curves) Before the call, the path looks ok, but after the call to cleanup_path, vertices is a bit of a mess (corresponding 'code' in brackets): array([[ 72. , 69.12 ], (moveto) [ 135.77142857, 86.4 ], (lineto) [ 165.86834734, 433. ], (lineto) [ 263.00922817, 433. ], (moveto) [ 263.31428571, 431.136 ], (lineto) [ 72. , 69.12 ], (lineto) <--- (should be a gap?) [ 454.62857143, 95.04 ], (lineto) [ 518.4 , 129.6 ], (lineto) [ 518.4 , 129.6 ]]) (stop) I can work around the problem by setting the backend to 'cairo' or by adding clip = None near the top of iter_segments (line 235 of path.py) HTH. |