# Drawing a colour wheel - bug in hcl?

8 messages
Open this post in threaded view
|

## Drawing a colour wheel - bug in hcl?

 Hi All, I'm trying trying to draw a colour wheel (a slice of hcl space) in R. Running the code below doesn't give me what I expect - there's some oddly bright colours of the wrong hue around c(0, 0) and I see three coloured circles (a small magenta, a medium sized yellow and a large cyan).  Am I doing something wrong or is there a bug in the hcl code? (Also any suggestions for generating a more evenly spaced grid of colours would be greatly appreciated) Regards, Hadley hcl <- expand.grid(h = seq(0, 360, by = 2), c = 70, l = seq(0, 100, by = 2), fixup=FALSE) hcl <- transform(hcl,   angle = h * pi / 180,   radius = l / 100 ) hcl <- transform(hcl,   x = radius * sin(angle),   y = radius * cos(angle) ) hcl\$colour <- hcl(hcl\$h, hcl\$c, hcl\$l) with(hcl, plot(x, y, col=colour, pch=20)) -- http://had.co.nz/______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Drawing a colour wheel - bug in hcl?

 "hadley wickham" <[hidden email]> wrote in message news:[hidden email]... >  there's some > oddly bright colours of the wrong hue around c(0, 0) and I see three > coloured circles (a small magenta, a medium sized yellow and a large > cyan).  Am I doing something wrong or is there a bug in the hcl code? You set c = 70 = constant from ?hcl:       c  The chroma of the color. The upper bound for chroma depends on hue and luminance You seem to have used the full range of possible hue and luminance values. Perhaps your odd colored circles are violations on valid values of chroma? R's HCL documentation (?hcl) isn't very helpful.  Foley and van Dam discuss HLS, HSB, HSV, HVC color spaces in the "Computer Graphics" book, but not HCL. The hcl function "corresponds to polar coordinates in the CIE-LUV color space" but it's not clear how one converts from CIELUV to rgb from this page: http://en.wikipedia.org/wiki/CIELUV_color_space. BTW, the R documentation should be changed to eliminate "l" ("el") as formal argument to the hcl function. The book "Code Complete 2" suggests (p. 287) to "avoid names containing hard-to-read characters".  I'd suggest "l" ("el") is perhaps the worst possible variable name since it can so easily be confused with "1" ("one"). Also, using "hcl" in different ways in the same code is also discouraged by "Code Complete 2".  Again on p. 287:  "Avoid the names of standard types, variables, and routines."   If "hcl" is a "standard" routine, using "hcl" as a variable name in the same code example using the "hcl" function is not recommended and is confusing. efg Earl F Glynn Bioinformatics Stowers Institute for Medical Research ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Drawing a colour wheel - bug in hcl?

 On Mon, Jul 7, 2008 at 1:05 PM, Earl F. Glynn <[hidden email]> wrote: > "hadley wickham" <[hidden email]> wrote in message > news:[hidden email]... >>  there's some >> oddly bright colours of the wrong hue around c(0, 0) and I see three >> coloured circles (a small magenta, a medium sized yellow and a large >> cyan).  Am I doing something wrong or is there a bug in the hcl code? > > You set c = 70 = constant > > from ?hcl: > >      c  The chroma of the color. The upper bound for chroma depends on hue > and luminance > > > You seem to have used the full range of possible hue and luminance values. > Perhaps your odd colored circles are violations on valid values of chroma? Well, I do have fixup = FALSE, which the documentation indicates should return NA if the chroma exceeds the actual upper bound. > Also, using "hcl" in different ways in the same code is also discouraged by > "Code Complete 2".  Again on p. 287:  "Avoid the names of standard types, > variables, and routines."   If "hcl" is a "standard" routine, using "hcl" as > a variable name in the same code example using the "hcl" function is not > recommended and is confusing. Yes, that's true! Hadley -- http://had.co.nz/______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Drawing a colour wheel - bug in hcl?

 "hadley wickham" <[hidden email]> wrote in message news:[hidden email]... > On Mon, Jul 7, 2008 at 1:05 PM, Earl F. Glynn <[hidden email]> > wrote: >> "hadley wickham" <[hidden email]> wrote in message >> news:[hidden email]... > Well, I do have fixup = FALSE, which the documentation indicates > should return NA if the chroma exceeds the actual upper bound. You did specify fixup in the hcl data.frame but I'm not sure how that info was used when you called the hcl function since fixup is a parameter to the hcl function. Compare the two plots from below.  When you get the NAs you want, the odd colors go away, but I'm not sure you'll like the results: # I dropped fixup from the data.frame (and used variable names that "Code Complete 2" might approve): hcl.grid <- expand.grid(hue = seq(0, 360, by = 2),                         chroma = 70,                         luminance = seq(0, 100, by= 2)) hcl.grid <- transform(hcl.grid,   angle = hue * pi / 180,   radius = luminance / 100 ) hcl.grid <- transform(hcl.grid,   x = radius * sin(angle),   y = radius * cos(angle) ) # What you have hcl.grid\$colour1 <- hcl(hcl.grid\$hue, hcl.grid\$chroma, hcl.grid\$luminance,                         fixup=TRUE) with(hcl.grid, plot(x, y, col=colour1, pch=20)) # What you intended? hcl.grid\$colour2 <- hcl(hcl.grid\$hue, hcl.grid\$chroma, hcl.grid\$luminance,                         fixup=FALSE) with(hcl.grid, plot(x, y, col=colour2, pch=20)) efg Earl F Glynn Bioinformatics Stowers Institute for Medical Research ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Drawing a colour wheel - bug in hcl?

Open this post in threaded view
|

## Re: Drawing a colour wheel - bug in hcl?

 In reply to this post by Earl F. Glynn On Mon, Jul 7, 2008 at 4:30 PM, Earl F. Glynn <[hidden email]> wrote: > "hadley wickham" <[hidden email]> wrote in message > news:[hidden email]... >> On Mon, Jul 7, 2008 at 1:05 PM, Earl F. Glynn <[hidden email]> >> wrote: >>> "hadley wickham" <[hidden email]> wrote in message >>> news:[hidden email]... > >> Well, I do have fixup = FALSE, which the documentation indicates >> should return NA if the chroma exceeds the actual upper bound. > > You did specify fixup in the hcl data.frame but I'm not sure how that info > was used when you called the hcl function since fixup is a parameter to the > hcl function. Oh, oops, I got confused by exactly what you pointed out! Hadley -- http://had.co.nz/______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.