Re: [matplotlib-devel] PATCH: Accept color/alpha in imsave

2012-04-17 Thread Jostein Bø Fløystad
Hi Benjamin,

and thanks for looking into this. The traceback you showed in your
post is the original one that I see before applying the second patch.
After applying the second patch, I do not see this traceback any more,
and I get the results I expect. In other words, I'm unable to
reproduce the behaviour you get (with the patches applied to current
master). Would it be possible for you to send the code in quickshow.py
that triggers this behaviour?

You seemed uncertain that you had the full patch. The second patch
only changes a single line of code, namely line 1243 of image.py. An
excerpt of the patch:

-figsize = [x / float(dpi) for x in arr.shape[::-1]]
+figsize = [x / float(dpi) for x in (arr.shape[1], arr.shape[0])]

For me, this is enough to make imshow work for MxNx3 (or 4).

Cheers,

Jostein.

Den 23:00 16. april 2012 skrev Benjamin Root  følgende:
>
> On Sat, Apr 7, 2012 at 11:25 AM, Jostein Bø Fløystad
>  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
>

--
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev
___
Matplotlib-devel mailing list
[email protected]
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()

2012-04-17 Thread Ian Thomas
On 16 April 2012 23:36, Damon McDougall  wrote:

> On Monday, 16 April 2012 at 16:34, Kacper Kowalik wrote:
>
>
> On 16 Apr 2012 22:31, "Damon McDougall"  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?
>

We can definitely do better here.  I have created a issue request on github:
https://github.com/matplotlib/matplotlib/issues/838
and will investigate further.

Ian
--
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev___
Matplotlib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] PATCH: Accept color/alpha in imsave

2012-04-17 Thread Benjamin Root
On Tue, Apr 17, 2012 at 3:30 AM, Jostein Bø Fløystad <
[email protected]> wrote:

> Hi Benjamin,
>
> and thanks for looking into this. The traceback you showed in your
> post is the original one that I see before applying the second patch.
> After applying the second patch, I do not see this traceback any more,
> and I get the results I expect. In other words, I'm unable to
> reproduce the behaviour you get (with the patches applied to current
> master). Would it be possible for you to send the code in quickshow.py
> that triggers this behaviour?
>
> You seemed uncertain that you had the full patch. The second patch
> only changes a single line of code, namely line 1243 of image.py. An
> excerpt of the patch:
>
> -figsize = [x / float(dpi) for x in arr.shape[::-1]]
> +figsize = [x / float(dpi) for x in (arr.shape[1], arr.shape[0])]
>
> For me, this is enough to make imshow work for MxNx3 (or 4).
>
> Cheers,
>
> Jostein.
>
>
Josten,

Sorry for the noise.  I forgot to install the patched version of mpl.  Your
second patch certainly does fix the bug and should be committed.  As for
the first patch that has the test, I think it would be better to actually
create some test data and test image.  I am working on creating such a test
set for a related bug in imshow() and imsave().  Once I do that, I can make
a pull request that can include both our patches.

Cheers!
Ben Root
--
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev___
Matplotlib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] imsave() and cmap

2012-04-17 Thread Benjamin Root
Sorry for being a bit cryptic yesterday, I was in a rush.  I have attached
a test script that demonstrates the issue.

Can anybody confirm this?  I have also attached an image showing what I get
(using master with TkAgg).

Thanks,
Ben Root

On Mon, Apr 16, 2012 at 5:10 PM, Benjamin Root  wrote:

> 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
>


imshow_cmap_test.py
Description: Binary data
<>--
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev___
Matplotlib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] PATCH: Accept color/alpha in imsave

2012-04-17 Thread Jostein Bø Fløystad
Ben,

That sounds great, especially regarding the test images. I don't know
how the image comparison tests work, that's why I kept it very
fundamental.

Thanks!

Jostein.

Den 14:59 17. april 2012 skrev Benjamin Root  følgende:
>
>
> On Tue, Apr 17, 2012 at 3:30 AM, Jostein Bø Fløystad
>  wrote:
>>
>> Hi Benjamin,
>>
>> and thanks for looking into this. The traceback you showed in your
>> post is the original one that I see before applying the second patch.
>> After applying the second patch, I do not see this traceback any more,
>> and I get the results I expect. In other words, I'm unable to
>> reproduce the behaviour you get (with the patches applied to current
>> master). Would it be possible for you to send the code in quickshow.py
>> that triggers this behaviour?
>>
>> You seemed uncertain that you had the full patch. The second patch
>> only changes a single line of code, namely line 1243 of image.py. An
>> excerpt of the patch:
>>
>> -    figsize = [x / float(dpi) for x in arr.shape[::-1]]
>> +    figsize = [x / float(dpi) for x in (arr.shape[1], arr.shape[0])]
>>
>> For me, this is enough to make imshow work for MxNx3 (or 4).
>>
>> Cheers,
>>
>> Jostein.
>>
>
> Josten,
>
> Sorry for the noise.  I forgot to install the patched version of mpl.  Your
> second patch certainly does fix the bug and should be committed.  As for the
> first patch that has the test, I think it would be better to actually create
> some test data and test image.  I am working on creating such a test set for
> a related bug in imshow() and imsave().  Once I do that, I can make a pull
> request that can include both our patches.
>
> Cheers!
> Ben Root
>

--
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev
___
Matplotlib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel