redefining color keywords in stylesheets

Hello,

I've a question about style sheets:

    /W//ould it be possible for stylesheets to redefine the
    colorkeywords ('r','g','b'...) to match their color design ?/

I believe this is not currently possible, is that right ?

The only thing that comes close is the modification of the dict
matplotlib.colors.ColorConverter.colors as discussed here
(http://stackoverflow.com/a/19626339/2822346)

The motivation for this would be to have a quick way to reuse colors
from the default color cycle. Indeed, the new Cycler objects are
powerful, but a bit heavy weight, especially for quick interactive
usage. This is pseudo code for the use case I've in mind:

    suplot(211)
    plot(x, y1) # will be blue
    plot(x, y2) # will be green

    subplot(212)
    plot(x, y3, 'r') # y3 should stand out. will be red instead of blue

With the classic style, this approach gives a coherent result, but using
for example 'seaborn-deep', the default red 'r' is out of place. So to
make the short color keywords useful again, it would be nice if
seeborn-deep could redefine 'r' to be the one used in its color cycle (a
nice dark purple red #8172B2).

for now, seeborn-deep defines the rcParams axes.prop_cycle'
cycler(u'color', [u'#4C72B0', u'#55A868', u'#C44E52', ...

and with this proposition, it could be instead
cycler(u'color', [u'b', u'g', u'r'.... like for classic style (at least
for the first 3 colors, not sure for the following colors)
but with extra entries in rcParams to define what b, g, r, ... should mean.

(Also, I apologize in advance if this kind of proposition has been
discussed already on the mailing list or on github. I understand there
was much discussion on the topic of style change and I was not much
following the discussion these last months.)

best,
Pierre
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20160406/37a80e83/attachment.html>

Pierre,

We are working on a couple different features that would better address
your problem. First, we are working on implementing a shorthand notation
for properties that would reference elements in the property cycle. So,
specifying `color='[0]'` and `linewidth='[0]'` would set those properties
from the first element of the property cycle. There are some details that
are still being worked out, though, and would likely land in version 2.1,
but a preview/beta pared-down version might appear in v2.0.

Another feature that has been discussed, but hasn't gotten very far is a
"palette" concept. This would allow one to have multiple versions of that
ColorConverter dictionary that would map the names to different rgb specs.
I don't think this idea has gotten a pull request yet, and I would imagine
that it shouldn't be too difficult to implement for those who might be
interested in taking it on.

Cheers!
Ben Root

···

On Wed, Apr 6, 2016 at 8:25 AM, Pierre Haessig <pierre.haessig at crans.org> wrote:

Hello,

I've a question about style sheets:

*W**ould it be possible for stylesheets to redefine the colorkeywords
('r','g','b'...) to match their color design ?*

I believe this is not currently possible, is that right ?

The only thing that comes close is the modification of the dict
matplotlib.colors.ColorConverter.colors as discussed here (
http://stackoverflow.com/a/19626339/2822346)

The motivation for this would be to have a quick way to reuse colors from
the default color cycle. Indeed, the new Cycler objects are powerful, but a
bit heavy weight, especially for quick interactive usage. This is pseudo
code for the use case I've in mind:

suplot(211)
plot(x, y1) # will be blue
plot(x, y2) # will be green

subplot(212)
plot(x, y3, 'r') # y3 should stand out. will be red instead of blue

With the classic style, this approach gives a coherent result, but using
for example 'seaborn-deep', the default red 'r' is out of place. So to make
the short color keywords useful again, it would be nice if seeborn-deep
could redefine 'r' to be the one used in its color cycle (a nice dark
purple red #8172B2).

for now, seeborn-deep defines the rcParams axes.prop_cycle'
cycler(u'color', [u'#4C72B0', u'#55A868', u'#C44E52', ...

and with this proposition, it could be instead
cycler(u'color', [u'b', u'g', u'r'.... like for classic style (at least
for the first 3 colors, not sure for the following colors)
but with extra entries in rcParams to define what b, g, r, ... should mean.

(Also, I apologize in advance if this kind of proposition has been
discussed already on the mailing list or on github. I understand there was
much discussion on the topic of style change and I was not much following
the discussion these last months.)

best,
Pierre

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20160406/05741379/attachment.html>

I believe that seaborn achieves this through its set_color_codes function:
https://github.com/mwaskom/seaborn/blob/10bdb18f47bb5fc0a30d34954ff6f174b4cf5881/seaborn/palettes.py#L900

···

On Wed, Apr 6, 2016 at 7:52 AM, Benjamin Root <ben.v.root at gmail.com> wrote:

Pierre,

We are working on a couple different features that would better address
your problem. First, we are working on implementing a shorthand notation
for properties that would reference elements in the property cycle. So,
specifying `color='[0]'` and `linewidth='[0]'` would set those properties
from the first element of the property cycle. There are some details that
are still being worked out, though, and would likely land in version 2.1,
but a preview/beta pared-down version might appear in v2.0.

Another feature that has been discussed, but hasn't gotten very far is a
"palette" concept. This would allow one to have multiple versions of that
ColorConverter dictionary that would map the names to different rgb specs.
I don't think this idea has gotten a pull request yet, and I would imagine
that it shouldn't be too difficult to implement for those who might be
interested in taking it on.

Cheers!
Ben Root

On Wed, Apr 6, 2016 at 8:25 AM, Pierre Haessig <pierre.haessig at crans.org> > wrote:

Hello,

I've a question about style sheets:

*W**ould it be possible for stylesheets to redefine the colorkeywords
('r','g','b'...) to match their color design ?*

I believe this is not currently possible, is that right ?

The only thing that comes close is the modification of the dict
matplotlib.colors.ColorConverter.colors as discussed here (
http://stackoverflow.com/a/19626339/2822346)

The motivation for this would be to have a quick way to reuse colors from
the default color cycle. Indeed, the new Cycler objects are powerful, but a
bit heavy weight, especially for quick interactive usage. This is pseudo
code for the use case I've in mind:

suplot(211)
plot(x, y1) # will be blue
plot(x, y2) # will be green

subplot(212)
plot(x, y3, 'r') # y3 should stand out. will be red instead of blue

With the classic style, this approach gives a coherent result, but using
for example 'seaborn-deep', the default red 'r' is out of place. So to make
the short color keywords useful again, it would be nice if seeborn-deep
could redefine 'r' to be the one used in its color cycle (a nice dark
purple red #8172B2).

for now, seeborn-deep defines the rcParams axes.prop_cycle'
cycler(u'color', [u'#4C72B0', u'#55A868', u'#C44E52', ...

and with this proposition, it could be instead
cycler(u'color', [u'b', u'g', u'r'.... like for classic style (at least
for the first 3 colors, not sure for the following colors)
but with extra entries in rcParams to define what b, g, r, ... should
mean.

(Also, I apologize in advance if this kind of proposition has been
discussed already on the mailing list or on github. I understand there was
much discussion on the topic of style change and I was not much following
the discussion these last months.)

best,
Pierre

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20160406/d0a15be3/attachment-0001.html>

Le 06/04/2016 17:37, Paul Hobson a ?crit :

I believe that seaborn achieves this through its set_color_codes
function:
https://github.com/mwaskom/seaborn/blob/10bdb18f47bb5fc0a30d34954ff6f174b4cf5881/seaborn/palettes.py#L900

Interesting ! Thank!

So the functionality is available in seaborn (though not activated as
default if I understand it right). Putting the ability to redefine the
short codes in Matplotlib's rcParams could be a logical next step...

best,
Pierre

Thanks for the update !

The ability to use properties 0,1,2 looks very useful. The notation
'[n]' looks a bit heavy, but I guess this is necessary to avoid clashing
with the existing behavior (linewidth=0 vs. linewidth='[0]'...).

As for the palette, I think it's very similar to what I was proposing.
Only putting things in the rcParams is maybe simpler because it is
compatible with the existing stylesheet mechanism. For me, the palette
should just be one aspect of the style.

Things could be as simple as having 'color.b', 'color.g', ... keys added
to rcParams. (or 'palette.b'...)

best,
Pierre

Le 06/04/2016 16:52, Benjamin Root a ?crit :

···

Pierre,

We are working on a couple different features that would better
address your problem. First, we are working on implementing a
shorthand notation for properties that would reference elements in the
property cycle. So, specifying `color='[0]'` and `linewidth='[0]'`
would set those properties from the first element of the property
cycle. There are some details that are still being worked out, though,
and would likely land in version 2.1, but a preview/beta pared-down
version might appear in v2.0.

Another feature that has been discussed, but hasn't gotten very far is
a "palette" concept. This would allow one to have multiple versions of
that ColorConverter dictionary that would map the names to different
rgb specs. I don't think this idea has gotten a pull request yet, and
I would imagine that it shouldn't be too difficult to implement for
those who might be interested in taking it on.

Cheers!
Ben Root