Re: [matplotlib-devel] PATCH: Accept color/alpha in imsave
On Sat, Apr 7, 2012 at 11:25 AM, Jostein Bø Fløystad < jostein.floys...@gmail.com> wrote: > I've had problems saving MxNx3 (RGB) numpy arrays as images using > imsave. It fails with an exception, and the problem seems to be line > 1243 in image.py: > > figsize = [x / float(dpi) for x in arr.shape[::-1]] > > The purpose of arr.shape[::-1] seems to be to reorder the height and > width dimensions. It works as intended for MxN arrays, but not NxMx3 > arrays -- they cause a function to complain about an argument too > many. > > I have modified the above line to use (arr.shape[1], arr.shape[0]) > instead of arr.shape[::-1], and that solves the problem for me, and I > get the output I expect (and the code still passes all tests it should > pass). However, there could very well be subtleties in the codebase > that I don't know about. > > The attached patches add a simple test case, the above mentioned > change and a few updates to the documentation of imsave. > > Best, > > Jostein. > > Jostein, That second patch certain fixes that part of the bug, but I still can't save an NxMx3 (or 4) array using imsave(). Are you sure this is all of the patch? I get the following exception: ``` Traceback (most recent call last): File "quickshow.py", line 106, in plt.imsave(stem + '.png', cm(d)) File "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/pyplot.py", line 1757, in imsave return _imsave(*args, **kwargs) File "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/image.py", line 1244, in imsave fig = Figure(figsize=figsize, dpi=dpi, frameon=False) File "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/figure.py", line 269, in __init__ self.bbox_inches = Bbox.from_bounds(0, 0, *figsize) TypeError: from_bounds() takes exactly 4 arguments (5 given) ``` Cheers! Ben Root -- For Developers, A Lot Can Happen In A Second. Boundary is the first to Know...and Tell You. Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! http://p.sf.net/sfu/Boundary-d2dvs2 ___ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
[matplotlib-devel] imsave() and cmap
Thanks to a patch a bit while back for ListedColormap that allowed for alphas to be given, I should now be able to use imshow() and imsave() with colormaps. However, I find that the results are not correct. Particularly, the alpha values seem to be assigned incorrectly. I am still working on making a stand-alone version to demonstrate the problem, but has anyone else noticed this? Note, plt.imshow(d, cmap=cm) produces an incorrect result while plt.imshow(cm(d)) produces a correct result. However, due to a bug in imsave, I can't do the latter as a work-around. Thanks, Ben Root -- For Developers, A Lot Can Happen In A Second. Boundary is the first to Know...and Tell You. Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! http://p.sf.net/sfu/Boundary-d2dvs2 ___ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
Re: [matplotlib-devel] [Matplotlib-users] Bug in Triangulation causes infinite loop if 4 or more duplicate points are used in tricontour()
On Monday, 16 April 2012 at 16:34, Kacper Kowalik wrote: > > On 16 Apr 2012 22:31, "Damon McDougall" (mailto:d.mcdoug...@warwick.ac.uk)> wrote: > > > > Hi Kacper, > > > > Just to be clear, is it tri.Triangulation(x, y) that hangs, or is it > > plt.tricontour(…)? > It's plt.tricontour that hangs, tri.Triangulation properly issues warning > about duplicates. > Cheers, > Kacper > > On Monday, 16 April 2012 at 14:28, Kacper Kowalik wrote: > >> > >> Hi, > >> I haven't been able to pin point it exactly but following script: > >> > >> import matplotlib.pyplot as plt > >> import matplotlib.tri as tri > >> import numpy as np > >> from numpy.random import uniform, seed > >> > >> seed(0) > >> npts = 200 > >> x = uniform(-2,2,npts) > >> y = uniform(-2,2,npts) > >> z = x*np.exp(-x**2-y**2) > >> > >> y[1:3] = x[0] # 4 or more duplicate points make tricontour hang!!! > >> x[1:3] = y[0] You should call z = x*np.exp(-x**2-y**2) _before_ changing the points you're triangulating. Having said that, I see the same behaviour even if I change the vertices before I compute z. > >> triang = tri.Triangulation(x, y) > >> plt.tricontour(x, y, z, 15, linewidths=0.5, colors='k') > >> > >> plt.show() > >> > >> > >> causes infinite loop in _tri.so. It happens in matplotlib-1.1.0 as well > >> as git HEAD. > >> I understand that my input is not exactly valid, but I'd rather see MPL > >> die than occupy my box for eternity ;) > >> Best regards, > >> Kacper I think the reason it's hanging is because you're trying to plot the contours of a function that is defined on an invalid triangulation (edges cross at points that are not in the vertex set). I think the best way to deal with this is to write a helper function to check the triangulation is valid. If it isn't, either tri.Triangulation(x, y) should fail, or the plotter should fail. Anybody else have any suggestions? -- Damon McDougall d.mcdoug...@warwick.ac.uk (mailto:d.mcdoug...@warwick.ac.uk) http://damon.is-a-geek.com B2.39 Mathematics Institute University of Warwick Coventry West Midlands CV4 7AL United Kingdom -- For Developers, A Lot Can Happen In A Second. Boundary is the first to Know...and Tell You. Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! http://p.sf.net/sfu/Boundary-d2dvs2 ___ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel