Achim Zeileis
2023-Apr-28 10:18 UTC
[R] grDevices::hcl.colors using two colours: Bug or Feature?
On Fri, 28 Apr 2023, Achim Zeileis wrote:> This was introduced in 4.3.0 (hence Rui cannot reproduce it in 4.2.3). > > It's a bug and was introduced when fixing this other bug: > > https://bugs.R-project.org/show_bug.cgi?id=18476 > https://hypatia.math.ethz.ch/pipermail/r-help/2023-February/476960.html > > Apparently, it only affects the case with n = 2 for diverging and divergingx > palettes. The culprit is this line: > > i <- if(n2 == 1L) 0 else seq.int(1, by = -2/(n - 1), length.out = n2) > > I think n2 == 1L is not the right condition and we need to distinguish n = 1 > and n = 2.I think the solution is simply to use n == 1L instead of n2 == 1L, both in "diverging" (line 188 in hcl.colors.R) and "divergingx" (line 197). Duncan, maybe you can have a look at this as well?> Will have a closer look... > > Thanks for reporting this! > Achim > > On Fri, 28 Apr 2023, Rui Barradas wrote: > >> ?s 06:01 de 28/04/2023, Stevie Pederson escreveu: >>> Hi, >>> >>> I'm not sure if this is a bug or a feature, but after updating to Rv4.3, >>> if >>> requesting two colours from hcl.colors() you now get the same colour >>> twice. >>> This occurs for all palettes I've tried. My reprex: >>> >>> hcl.colors(2, "Vik") >>> [1] "#F1F1F1" "#F1F1F1" >>> >>> As I have multiple workflows I run repeatedly with A vs B comparisons, >>> this >>> has just broken the visualisations in many of them. Obviously a >>> workaround is hcl.colors(3, "Vik")[c(1, 3)] but this seems rather >>> unintuitive. >>> >>> Thanks in advance, >>> >>> Stevie >>> >>> sessionInfo() >>> R version 4.3.0 (2023-04-21) >>> Platform: x86_64-pc-linux-gnu (64-bit) >>> Running under: Ubuntu 20.04.6 LTS >>> >>> Matrix products: default >>> BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0 >>> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0 >>> >>> locale: >>> [1] LC_CTYPE=en_AU.UTF-8 LC_NUMERIC=C >>> [3] LC_TIME=en_AU.UTF-8 LC_COLLATE=en_AU.UTF-8 >>> [5] LC_MONETARY=en_AU.UTF-8 LC_MESSAGES=en_AU.UTF-8 >>> [7] LC_PAPER=en_AU.UTF-8 LC_NAME=C >>> [9] LC_ADDRESS=C LC_TELEPHONE=C >>> [11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C >>> >>> time zone: Australia/Adelaide >>> tzcode source: system (glibc) >>> >>> attached base packages: >>> [1] stats graphics grDevices utils datasets methods base >>> >>> loaded via a namespace (and not attached): >>> [1] compiler_4.3.0 tools_4.3.0 >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide >>> http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >> Hello, >> >> I cannot reproduce this on Windows. >> >> >> hcl.colors(2, "Vik") >> # [1] "#002E60" "#3E2000" >> >> clrs <- sapply(hcl.pals(), \(p) hcl.colors(2, p)) >> any(apply(clrs, 2, \(x) x[1] == x[2])) >> # [1] FALSE >> >> sessionInfo() >> # R version 4.2.3 (2023-03-15 ucrt) >> # Platform: x86_64-w64-mingw32/x64 (64-bit) >> # Running under: Windows 10 x64 (build 22621) >> # >> # Matrix products: default >> # >> # locale: >> # [1] LC_COLLATE=Portuguese_Portugal.utf8 >> LC_CTYPE=Portuguese_Portugal.utf8 >> # [3] LC_MONETARY=Portuguese_Portugal.utf8 LC_NUMERIC=C >> # [5] LC_TIME=Portuguese_Portugal.utf8 >> # >> # attached base packages: >> # [1] stats graphics grDevices utils datasets methods base >> # >> # loaded via a namespace (and not attached): >> # [1] compiler_4.2.3 >> >> >> Hope this helps, >> >> Rui Barradas >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
Duncan Murdoch
2023-Apr-28 13:04 UTC
[R] grDevices::hcl.colors using two colours: Bug or Feature?
On 28/04/2023 6:18 a.m., Achim Zeileis wrote:> On Fri, 28 Apr 2023, Achim Zeileis wrote: > >> This was introduced in 4.3.0 (hence Rui cannot reproduce it in 4.2.3). >> >> It's a bug and was introduced when fixing this other bug: >> >> https://bugs.R-project.org/show_bug.cgi?id=18476 >> https://hypatia.math.ethz.ch/pipermail/r-help/2023-February/476960.html >> >> Apparently, it only affects the case with n = 2 for diverging and divergingx >> palettes. The culprit is this line: >> >> i <- if(n2 == 1L) 0 else seq.int(1, by = -2/(n - 1), length.out = n2) >> >> I think n2 == 1L is not the right condition and we need to distinguish n = 1 >> and n = 2. > > I think the solution is simply to use n == 1L instead of n2 == 1L, both in > "diverging" (line 188 in hcl.colors.R) and "divergingx" (line 197). > > Duncan, maybe you can have a look at this as well?I agree that the two changes solve this problem. I couldn't spot any other places that would need fixing. Duncan Murdoch> >> Will have a closer look... >> >> Thanks for reporting this! >> Achim >> >> On Fri, 28 Apr 2023, Rui Barradas wrote: >> >>> ?s 06:01 de 28/04/2023, Stevie Pederson escreveu: >>>> Hi, >>>> >>>> I'm not sure if this is a bug or a feature, but after updating to Rv4.3, >>>> if >>>> requesting two colours from hcl.colors() you now get the same colour >>>> twice. >>>> This occurs for all palettes I've tried. My reprex: >>>> >>>> hcl.colors(2, "Vik") >>>> [1] "#F1F1F1" "#F1F1F1" >>>> >>>> As I have multiple workflows I run repeatedly with A vs B comparisons, >>>> this >>>> has just broken the visualisations in many of them. Obviously a >>>> workaround is hcl.colors(3, "Vik")[c(1, 3)] but this seems rather >>>> unintuitive. >>>> >>>> Thanks in advance, >>>> >>>> Stevie >>>> >>>> sessionInfo() >>>> R version 4.3.0 (2023-04-21) >>>> Platform: x86_64-pc-linux-gnu (64-bit) >>>> Running under: Ubuntu 20.04.6 LTS >>>> >>>> Matrix products: default >>>> BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0 >>>> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0 >>>> >>>> locale: >>>> [1] LC_CTYPE=en_AU.UTF-8 LC_NUMERIC=C >>>> [3] LC_TIME=en_AU.UTF-8 LC_COLLATE=en_AU.UTF-8 >>>> [5] LC_MONETARY=en_AU.UTF-8 LC_MESSAGES=en_AU.UTF-8 >>>> [7] LC_PAPER=en_AU.UTF-8 LC_NAME=C >>>> [9] LC_ADDRESS=C LC_TELEPHONE=C >>>> [11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C >>>> >>>> time zone: Australia/Adelaide >>>> tzcode source: system (glibc) >>>> >>>> attached base packages: >>>> [1] stats graphics grDevices utils datasets methods base >>>> >>>> loaded via a namespace (and not attached): >>>> [1] compiler_4.3.0 tools_4.3.0 >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> ______________________________________________ >>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>>> https://stat.ethz.ch/mailman/listinfo/r-help >>>> PLEASE do read the posting guide >>>> http://www.R-project.org/posting-guide.html >>>> and provide commented, minimal, self-contained, reproducible code. >>> Hello, >>> >>> I cannot reproduce this on Windows. >>> >>> >>> hcl.colors(2, "Vik") >>> # [1] "#002E60" "#3E2000" >>> >>> clrs <- sapply(hcl.pals(), \(p) hcl.colors(2, p)) >>> any(apply(clrs, 2, \(x) x[1] == x[2])) >>> # [1] FALSE >>> >>> sessionInfo() >>> # R version 4.2.3 (2023-03-15 ucrt) >>> # Platform: x86_64-w64-mingw32/x64 (64-bit) >>> # Running under: Windows 10 x64 (build 22621) >>> # >>> # Matrix products: default >>> # >>> # locale: >>> # [1] LC_COLLATE=Portuguese_Portugal.utf8 >>> LC_CTYPE=Portuguese_Portugal.utf8 >>> # [3] LC_MONETARY=Portuguese_Portugal.utf8 LC_NUMERIC=C >>> # [5] LC_TIME=Portuguese_Portugal.utf8 >>> # >>> # attached base packages: >>> # [1] stats graphics grDevices utils datasets methods base >>> # >>> # loaded via a namespace (and not attached): >>> # [1] compiler_4.2.3 >>> >>> >>> Hope this helps, >>> >>> Rui Barradas >>> >>> ______________________________________________ >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide >>> http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >>> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.