Bug in scatter, edgecolors=None?

Hi all,

the scatter docstring says:

     * faceted: if True, will use the default edgecolor for the
       markers. If False, will set the edgecolors to be the same
       as the facecolors.
       This kwarg is deprecated;
       please use the edgecolors kwarg instead:
           shading='flat' --> edgecolors='None'
           shading='faceted --> edgecolors=None

However (running MPL from SVN here):

In [90]: scatter(range(10),range(10),edgecolors=None)

ends with

/home/fperez/usr/opt/lib64/python2.5/site-packages/matplotlib/collections.pyc
in set_edgecolor(self, c)
    303 self._edgecolors = npy.array([])
    304 else:
--> 305 self._edgecolors = _colors.colorConverter.to_rgba_array(c)
    306 set_edgecolors = set_edgecolor
    307

/home/fperez/usr/opt/lib64/python2.5/site-packages/matplotlib/colors.pyc
in to_rgba_array(self, c, alpha)
    323 # it. This is needed for examples/dynamic_collections.py.
    324 if not isinstance(c, (list, npy.ndarray)): #
specific; don't need duck-typing
--> 325 c = list(c)
    326 for i, cc in enumerate(c):
    327 c[i] = self.to_rgba(cc, alpha) # change in place

TypeError: 'NoneType' object is not iterable

Am I doing something wrong?

Thanks,

f

ps - for now, using the deprecated 'faceted=False' seems to still
work, so I'll go with that.

Fernando,

Thanks for the bug report. I see what the problem is. Unless someone else wants to do it (in which case please do so, but tell me you will), I can fix it within a few days at the most, and possibly later today.

Eric

Fernando Perez wrote:

···

Hi all,

the scatter docstring says:

     * faceted: if True, will use the default edgecolor for the
       markers. If False, will set the edgecolors to be the same
       as the facecolors.
       This kwarg is deprecated;
       please use the edgecolors kwarg instead:
           shading='flat' --> edgecolors='None'
           shading='faceted --> edgecolors=None

However (running MPL from SVN here):

In [90]: scatter(range(10),range(10),edgecolors=None)

ends with

/home/fperez/usr/opt/lib64/python2.5/site-packages/matplotlib/collections.pyc
in set_edgecolor(self, c)
    303 self._edgecolors = npy.array()
    304 else:
--> 305 self._edgecolors = _colors.colorConverter.to_rgba_array(c)
    306 set_edgecolors = set_edgecolor
    307

/home/fperez/usr/opt/lib64/python2.5/site-packages/matplotlib/colors.pyc
in to_rgba_array(self, c, alpha)
    323 # it. This is needed for examples/dynamic_collections.py.
    324 if not isinstance(c, (list, npy.ndarray)): #
specific; don't need duck-typing
--> 325 c = list(c)
    326 for i, cc in enumerate(c):
    327 c[i] = self.to_rgba(cc, alpha) # change in place

TypeError: 'NoneType' object is not iterable

Am I doing something wrong?

Thanks,

f

ps - for now, using the deprecated 'faceted=False' seems to still
work, so I'll go with that.

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
matplotlib-devel List Signup and Options

Thanks for the prompt response, Eric. For now I can fortunately use
faceted, but I'll keep an eye out on the list for updates to test.

Regards,

f

···

On Thu, Apr 17, 2008 at 7:15 PM, Eric Firing <efiring@...229...> wrote:

Fernando,

Thanks for the bug report. I see what the problem is. Unless someone else
wants to do it (in which case please do so, but tell me you will), I can fix
it within a few days at the most, and possibly later today.

Fernando Perez wrote the following on 04/17/2008 06:31 PM:

ps - for now, using the deprecated 'faceted=False' seems to still
work, so I'll go with that.

I noticed this a few days ago as well...using edgecolors='None' seemed to have the same effect as faceted=False. This brings up a couple issues.

1) I find the shading=* in the docstring to be a bit confusing. The equal sign makes me think of keyword arguments. Since 'shading' is not a valid keyword, additional clarity might result if we do not use the equal sign.

2) If we remove the equal signs, we might have something like this:

      This kwarg is deprecated;
      please use the edgecolors kwarg instead:
         flat shading --> edgecolors='None'
         faceted shading --> edgecolors=None

But even this is confusing. Reading

makes me think we should have:

      This kwarg is deprecated;
      please use the edgecolors kwarg instead:
         flat shading --> edgecolors=None
      For faceted shading, edgecolors can be any mpl color or sequence of colors.

···

---

So it seems like the code is working, but that the docstring is wrong. Perhaps the behavior should be changed so that edgecolors must be set to None rather than 'None' when requesting flat shading.

~C

Fernando Perez wrote:

···

On Thu, Apr 17, 2008 at 7:15 PM, Eric Firing <efiring@...229...> wrote:

Fernando,

Thanks for the bug report. I see what the problem is. Unless someone else
wants to do it (in which case please do so, but tell me you will), I can fix
it within a few days at the most, and possibly later today.

Thanks for the prompt response, Eric. For now I can fortunately use
faceted, but I'll keep an eye out on the list for updates to test.

Regards,

f

Fernando,

I think I have fixed that problem and committed it to svn. I expect there is still more to be done to make the handling of colors and 'none' more consistent throughout mpl, but this is a start.

Eric

Thanks a lot, Eric! It looks OK here, I'll report if I find anything
else out of place.

Regards,

f

···

On Fri, Apr 18, 2008 at 1:13 PM, Eric Firing <efiring@...229...> wrote:

Fernando,

I think I have fixed that problem and committed it to svn. I expect there
is still more to be done to make the handling of colors and 'none' more
consistent throughout mpl, but this is a start.