On 08/10/2010 11:58 AM, Friedrich Romstedt wrote:
> 2010/8/10 Eric Firing<efir...@hawaii.edu>:
>> On 08/10/2010 10:27 AM, Friedrich Romstedt wrote:
>>> So I think it is probably best to code it into the Colormap object
>>> itself, so that each and ever derived class can define its own method
>>> of how to create a greyscale version.  What do you think about that?
>>
>> Good idea.  The base class could define a default to_grayscale() method
>> that would do the conversion near the very end of the Colormap.__call__
>> method if an as_gray attribute, also defined in the base class, is True.
>>   No need for getters and setters--let it be a simple attribute.  This
>> is much simpler than generating a whole new colormap--instead, just set
>> an attribute to switch an existing colormap to gray or back to color.  I
>> would leave the switch out of the __init__ args and kwargs.
>
>> If someone
>> wants grey, they can add one more line of code to set the attribute.
>
> Hmm, one would have to do it for every colormap used.  Also, it would
> be not so obvious if using the default colormap.
>
>> I
>> suspect only a small fraction of users will need this.
>
> I like this, it's a good idea enabling to not repeat all the stuff in
> the code.  But hey, wouldn't it be the same to just overload the
> __call__ method?
>
> class GrayColorbar(RgbColorbar):
>      """A colorbar returning grayscaled version."""
>
>      def __call__(self, value):
>          """Transforms RgbColorbar's value into grayscale, and returns it.""""
>
>          rgb = BaseClass.__call__(self, value)
>          [do stuff]
>          return grayscale

Why make a whole new class instead of switching a behavior in an 
existing class?

>
> Agreed, one has to this for all the classes, while your solution works
> generically in ColormapBase or whatever it's called.

I think my solution (with slight modification) is also very compatible 
with your suggestion below to have an rc param that switches between 
color and gray.  If as_gray is None, use the rc value; otherwise, let it 
act as described above.

The typical use case is when one wants color initially, but then must 
regenerate plots in black and white to reduce publication costs.  Your 
rc suggestion facilitates such switching.

>
> Another option would be, to wrap the Colormap into a thin layer with
> __call__, but this appears way too clumsy and too hacky to me.  It's a
> clumsy way of deriving from the class.  Otherwise it's maybe also
> nice, because it's generic, for all Colormaps.  __getattr__ and
> __setattr__ (iirc) could be used to simulate the wrapped instance
> fully.

I don't follow you on this--I don't understand at all.


>
> Is there some layer dealing with colors in the renderers, where the
> conversion could also happen?  I'm asking because of displaying color
> images etc. and printing them as grayscale.  With this, we would get
> rid of the alpha stuff completely, too.

I don't understand why you would want to push this down into the 
renderers instead of keeping it at a higher level.  And I don't know 
what you mean by "getting rid of the alpha stuff".

>
> Maybe a general matplotlib.rc switch 'greyscale' would be possible.
> It would leave room for tons of improvement, e.g. automatically
> setting the color cycle to - -- -. etc., there was some monthes ago
> discussion about how to achieve that.  Another advantage: It's zero
> loc if set in the config file ;-)

Yes, there does seem to be a need for these sorts of switching 
operations.  Getting back to the colormap question, our discussions have 
been based on the assumption that an rgb_to_gray function is all that is 
needed.  But is this true?  Or will users actually need completely 
different graymaps rather than something resembling a black-and-white 
photo of a colormap?  If so, then my suggested strategy is useless.

Eric

>
> I think that would be a real neat new feature.
>
> I agree what's not needed is mixed greyscale and colour display in the
> same Figure.
>
> Bear with me if my ideas are always too radical.
>
> Friedrich

------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to