[Jprogramming] rudimentary color choice widget
Raul Miller
rauldmiller at gmail.com
Mon Aug 12 18:06:36 UTC 2013
Ok! (Picking colors for graphs is not a topic I have spent much time
on, I'll mostly just listen on this topic.)
But when I ran your code, I got an error. Here's my fix:
roundNums=: <. at +&0.5
Thanks,
--
Raul
On Mon, Aug 12, 2013 at 1:20 PM, Devon McCormick <devonmcc at gmail.com> wrote:
> I think this is a good simplification of what I want to do. I believe I
> copied the code from Cliff a long time ago, when I didn't know J very well,
> and re-wrote it in APL for the paper.
>
> My intention was to come up with a good palette for graphing values. I
> wanted a logical progression of distinct colors, for some value of
> "logical", with more colors in some parts of the range. Actually, looking
> at the code I currently use to generate my favored palette, it looks like I
> already abandoned the "pwlin" code.
>
> Here's what I do, using your version of interpolation since it's simpler
> than the one I currently use:
>
> interpolatePts=: 4 : '([+"1((<:x)%~i.x)*/-~)/y'
> interpolatePtPairs=: 4 : '({:y),~;}:&.>x interpolatePts&.>2<\y'
> CORNERS=: 0 4 2 1 6 5 3 7 {255*2 2 2#:i.8
> NB.* FULLSPECPAL: black->dark
> blue->green->cyan->purple->red->orange->yellow->almost white
> FULLSPECPAL=: 256{. <.0.5+24 36 46 40 40 50 30 interpolatePtPairs (0 3 2
> 6 5 1 4 7){CORNERS
>
> You can see what this looks like with
> FULLSPECPAL viewmat i.16 16
>
> The palette I use as my default further tinkers with this as shown here:
>
> NB.* adjustFullSpectrumPalette: make full-spectrum palette better...
> adjustFullSpectrumPalette=: 3 : 0
> len=. #ix=. 80+i.56 NB. Adjust the mid-palette to elim
> NB. ((<:<./ix),>:>./ix){FULLSPECPAL NB. cyan because it's too light at
> NB. 0 255 103 NB. transition and too similar to
> NB. 187 68 255 NB. blue at low end of palette.
> pb=. |:FULLSPECPAL{~({.,{:) ix NB. Patch borders
> patch=. stepsftn"1]pb,.len NB. Linear-match RGB each to within
> 2
> bv=. -:|.(]%~[:>:i.)len NB. Blend-vec: push patch toward
> gray,
> patch=. |:roundNums (>:bv)%"1~patch+"1 bv*128 NB. strongly->weakly
> ADJPAL=: patch ix}FULLSPECPAL
> )
>
> Where "stepsftn" is this:
>
> stepsftn=: 3 : 0
> NB.* stepsftn: vector of numbers from num, to num, in numsteps steps.
> 'from to numsteps'=. y
> from+(to-from)*(numsteps-1)%~i.numsteps
> )
>
> For some other palettes, I just use this last verb:
>
> NB.* BGYPAL: Blue->Green->Yellow palettes (hand-done)
> NB. These palettes keep down the number of different colors to reduce
> NB. the "busyness" of a graph. Also, they vary smoothly from dark to
> NB. light so will stay distinct when printing in black & white.
>
> BGYPAL=: ;stepsftn&.>0 0 86;64 127 85;120 200 43;220 255 42 NB. Red,
> BGYPAL=: BGYPAL,:;stepsftn&.>0 80 85;96 224 86;230 255 85 NB. Green,
> BGYPAL=: BGYPAL,;stepsftn&.>0 255 75;250 112 95;64 128 86 NB. Blue
> BGYPAL=: roundNums |:BGYPAL
>
>
>
> On Sun, Aug 11, 2013 at 10:37 PM, Raul Miller <rauldmiller at gmail.com> wrote:
>
>> Ok... but if that is all you want, then this kind of expression will do it:
>> (([+"1(85%~i.86)*/-~)/)"2
>>
>> For example:
>> (([+"1(3%~i.4)*/-~)/)"2 (1 0 0,:0 1 0)
>> 1 0 0
>> 0.666667 0.333333 0
>> 0.333333 0.666667 0
>> 0 1 0
>>
>> Or, if you prefer:
>> 1 0 0 ([+"1(3%~i.4)*/-~)0 1 0
>>
>> (same result)
>>
>> But I guess I am trying to understand what kind of more general
>> framework you want to put this kind of operation into?
>>
>> Thanks,
>>
>> --
>> Raul
>>
>> On Sun, Aug 11, 2013 at 10:30 PM, Devon McCormick <devonmcc at gmail.com>
>> wrote:
>> > Because (with the linear interpolation) it gives me gradations of colors
>> > across the full range of colors available (or less than the full range
>> if I
>> > wanted to choose a limited number of points).
>> >
>> >
>> > On Sun, Aug 11, 2013 at 7:10 PM, Raul Miller <rauldmiller at gmail.com>
>> wrote:
>> >
>> >> On Sun, Aug 11, 2013 at 5:50 PM, Devon McCormick <devonmcc at gmail.com>
>> >> wrote:
>> >> > The reason I like Cliff's code is it lets me draw lines through the
>> color
>> >> > cube between arbitrary corners.
>> >>
>> >> How is this useful?
>> >>
>> >> Thanks,
>> >>
>> >> --
>> >> Raul
>> >> ----------------------------------------------------------------------
>> >> For information about J forums see http://www.jsoftware.com/forums.htm
>> >>
>> >
>> >
>> >
>> > --
>> > Devon McCormick, CFA
>> > ^me^ at acm.
>> > org is my
>> > preferred e-mail
>> > ----------------------------------------------------------------------
>> > For information about J forums see http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>
>
>
> --
> Devon McCormick, CFA
> ^me^ at acm.
> org is my
> preferred e-mail
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
More information about the Programming
mailing list