William Stein wrote:
> On Tue, Mar 24, 2009 at 9:27 AM, Jason Grout
> <[email protected]> wrote:
>> Jose Guzman wrote:
>>> kcrisman wrote:
>>>>> In looking at your code, I had an idea about specifying colors.  Why
>>>>> don't we have some default color objects defined in Sage, like red,
>>>>> blue, yellow, green, etc.  Methods could include .darker(), .lighter(),
>>>>> etc.  So you could specify a plot as:
>>>>>
>>>>> plot(x^2, (x,0,1), color=red)
>>>>> plot(x^3, (x,0,1), color=blue.darker())
>>>>> plot(x^4, (x,0,1), color=green.lighter())
>>>>> plot(x^5, (x,0,1), color=red+blue) #gives purple :)
>>>>>
>>>>> and then for the more esoteric names (all of the standard web colors,
>>>>> all of the standard x11 colors, etc.), use the color namespace.
>>>>>
>>>>> plot(sin(x), (x,0,1), color=color.goldenrod)
>>>>>
>>>> This sounds great; presumably it wouldn't be too hard to do, if very
>>>> annoying (particularly because some of the plot methods only allow
>>>> rgbcolor, others allow cmap options, etc.) - though what if I want red
>>>> to stand for some other Python/Sage object?  And of course only
>>>> English colors would be there, and what about gray/grey ...
>>>>
>>>> By the way, other readers of this thread please note:
>>>>
>>>> sage: plot(x^2, (x,0,1), color='red')
>>>>
>>>> works fine!
>>>>
>>>> - kcrisman
>>>>
>>> I particularly like the  rgbcolor notation. That's the only way I found
>>> to have vector graphic environment (i.e inkscape) to match with
>>> matplotlib or sage . On the other hand I usually use some kind of ...
>>>
>>> plot (x**2, (0,1), rgbcolor=(0.5,0.5,0) ) # dark green
>>>
>>> because I found the default green color (rgbcolor=(0,1,0)) looks too
>>> brilliant with some beamers when you give a talk. Anyway, I tried with
>>> rgbcolor='blue' ,'red','green','yellow','black','orange' and worked fine.
>>
>> Yes, I'm saying that in addition to being able to pass a tuple or
>> string, we'd be able to pass a sage color object.
> 
> That's a great idea, which is why I implemented it over a year ago :-)
> 
> sage: C = Color('red')    # a Sage color object
> sage: C
> RGB color (1.0, 0.0, 0.0)
> sage: C.html_color()
> '#ff0000'
> sage: plot(x^2, (x,0,1), color=C)
> 
> I think the only strings allowed in the Color constructor are:
> 
>     "red"   : (1.0,0.0,0.0),
>     "orange": (1.0,.5,0.0),
>     "yellow": (1.0,1.0,0.0),
>     "green" : (0.0,1.0,0.0),
>     "blue"  : (0.0,0.0,1.0),
>     "purple": (.5,0.0,1.0),
>     "white" : (1.0,1.0,1.0),
>     "black" : (0.0,0.0,0.0),
>     "grey"  : (.5,.5,.5)
> 
> You can also use any html color strings.
> 
> To give the functionality you want, you could add methods "lighter()"
> and "darker()" to the existing color object.


So how about:

* predefining a bunch of colors in the global namespace (maybe just what 
is available in the current strings?)
* predefining a huge number of colors, but sticking them in the colors 
namespace
* making some nicely matched color sets (color schemes, if you will).
* make a generic mixing function (which takes the weighted average of 
self and other, according to a specifiable fraction)
* make darker/lighter functions
* adding together colors averages them
* a linear combination takes a weighted average (hmmm...have to think 
about how to do this one...maybe it'd make more sense to do a different 
average?)

Here is what MMA does with colors: 
http://reference.wolfram.com/mathematica/guide/Colors.html


Sounds like a great get-your-feet-wet student project...

Jason


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to