Re: Getting Color *names* as strings?

*To*: mathgroup at smc.vnet.net*Subject*: [mg67480] Re: Getting Color *names* as strings?*From*: albert <awnl at arcor.de>*Date*: Wed, 28 Jun 2006 03:51:16 -0400 (EDT)*References*: <e7qmpk$6ne$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

AES wrote: > Trying out different named Colors in a plot by using > > greens={CinnabarGreen, ChromeOxideGreen, CobaltGreen, etc}; > > Do[ Plot[ func, range, PlotStyle -> greens[[k]], > PlotLabel -> ToString[greens[[k]]] ] , > {k, 1, Length[greens]} ]; > > Works fine -- except the PlotLabel comes out as "RGB[num, num, num]" -- > and using SymbolName[greens[[1]]] or even SymbolName[CinnabarGreen] does > _not_ give the string "CinnabarGreen". > > How can I get the *name* of each color as a string to put in PlotLabel > or in a Text label? > > (Trivial problem, I agree, but just frustrating enough to be interesting) it is not so trivial, since you have to intercept the evaluation chain at an early stage. This gets the string you are looking for: SymbolName[Unevaluated[CinnabarGreen]] unfortunatly, even your list greens will contain the evaluated colors, you can check this with: OwnValues[greens] so there is no way to find the names from the list greens (expect by searching and comparing with all available colors...). There are basically two things you can do to achieve what you want: 1) use strings in the list greens and ToExpression in the PlotStyles option: greens = {"CinnabarGreen","ChromeOxideGreen",...} Plot[func,range,PlotStyle->ToExpression[greens[[k]]],PlotLabel->greens[[k]]] 2) make sure the symbols are held from the beginning and evaluate only when needed, e.g.: greens = Hold[CinnabarGreen, ChromeOxideGreen, CobaltGreen, etc] Plot[func,range, PlotStyle->greens[[k]], PlotLabel->Extract[greens,k,Function[{x},SymbolName[Unevaluated[x]],HoldAll]] ] hm, maybe the extract can be done more simply, but it obviously takes quite some effort to prevent mathematica from evaluating symbols with ownvalues so the approach to use strings in the list might be much easier to handle... Note also that it is easier to get a list of strings for the available colors than a list of (unevaluated) symbols: greens = Names["Graphics`Colors`*Green*"] gives you a list of various greens as strings... I also remember there was a package announced in this group which shows all named colors in a table. maybe search the archive or mathsource for it... hth albert