Achim Zeileis
2023-Apr-28 10:07 UTC
[R] grDevices::hcl.colors using two colours: Bug or Feature?
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. 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. >
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. >
Rui Barradas
2023-Apr-28 10:23 UTC
[R] grDevices::hcl.colors using two colours: Bug or Feature?
?s 11:07 de 28/04/2023, Achim Zeileis escreveu:> 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. > > 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. >>Hello, Right! I ran the wrong R version, here it is with R 4.3.0. The bug is now reproducible on Windows 11. hcl.colors(2, "Vik") # [1] "#F1F1F1" "#F1F1F1" clrs <- sapply(hcl.pals(), \(p) hcl.colors(2, p)) any(apply(clrs, 2, \(x) x[1] == x[2])) # [1] TRUE sum(apply(clrs, 2, \(x) x[1] == x[2])) # [1] 35 which(apply(clrs, 2, \(x) x[1] == x[2])) # Blue-Red Blue-Red 2 Blue-Red 3 Red-Green Purple-Green # 80 81 82 83 84 # Purple-Brown Green-Brown Blue-Yellow 2 Blue-Yellow 3 Green-Orange # 85 86 87 88 89 # Cyan-Magenta Tropic Broc Cork Vik # 90 91 92 93 94 # Berlin Lisbon Tofino Earth Fall # 95 96 97 99 100 # Geyser TealRose Temps PuOr RdBu # 101 102 103 104 105 # RdGy PiYG PRGn BrBG RdYlBu # 106 107 108 109 110 # RdYlGn Spectral Zissou 1 Cividis Roma # 111 112 113 114 115 sessionInfo() # R version 4.3.0 (2023-04-21 ucrt) # Platform: x86_64-w64-mingw32/x64 (64-bit) # Running under: Windows 11 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 # # time zone: Europe/Lisbon # tzcode source: internal # # attached base packages: # [1] stats graphics grDevices utils datasets methods base # # loaded via a namespace (and not attached): # [1] compiler_4.3.0 Hope this helps, Rui Barradas