Peter Langfelder
2013-May-31 23:32 UTC
[Rd] Bug in stats::plot.hclust/graphics:::plotHclust/underlying C code (C_dend) in R-3.0?
Hi all, it appears that plot.hclust disregards the argument 'cex'. Up until 2.15.1 (and probably all 2.15.x), specifying cex in plot.hclust changed the size of the plotted labels on each leaf. In 3.0.0 the character size remains the same irrespective of the cex setting. Since the help text for plot.hclust does not mention the cex argument, it is possible that an "undocumentde feature" was simply removed - but it was very useful when it was available. The following code illustrates the problem: data = c(1:20) dst = dist(data) tree = hclust(dst, method = "a") plot(tree, cex = 1) plot(tree, cex = 0.5) plot(tree, cex = 0.2) Under R-2.15 and earlier, the leaf labels would get progressively smaller; under 3.0.0, the label size remains the same. I tried this both under Windows R version 2.15.1 (2012-06-22) Platform: x86_64-pc-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=English_United States.1252 [2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base -------------------------- Session info for R-3.0.0 R version 3.0.0 (2013-04-03) Platform: x86_64-w64-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=English_United States.1252 [2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base and under Linux R version 3.0.0 Patched (2013-04-24 r62658) Platform: x86_64-unknown-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base Looking at the source code of plot.hclust leads to graphics:::plotHclust which calls .External.graphics, which is where my ability to read code quickly stops :) I realize that these are not the most recent releases but I couldn't find anything mentioning a bug fix for this in the changelog, so I assume it has not been fixed. Thanks, Peter
Martin Maechler
2013-Jun-01 16:48 UTC
[Rd] Bug in stats::plot.hclust/graphics:::plotHclust/underlying C code (C_dend) in R-3.0?
>>>>> Peter Langfelder <peter.langfelder at gmail.com> >>>>> on Fri, 31 May 2013 16:32:06 -0700 writes:> Hi all, it appears that plot.hclust disregards the > argument 'cex'. Up until 2.15.1 (and probably all 2.15.x), > specifying cex in plot.hclust changed the size of the > plotted labels on each leaf. In 3.0.0 the character size > remains the same irrespective of the cex setting. Since > the help text for plot.hclust does not mention the cex > argument, it is possible that an "undocumentde feature" > was simply removed - but it was very useful when it was > available. > The following code illustrates the problem:> data = c(1:20) > dst = dist(data) > tree = hclust(dst, method = "a") > plot(tree, cex = 1) > plot(tree, cex = 0.5) > plot(tree, cex = 0.2)> Under R-2.15 and earlier, the leaf labels would get > progressively smaller; under 3.0.0, the label size remains > the same. I tried this both under Windows > R version 2.15.1 (2012-06-22) [............] > R version 3.0.0 (2013-04-03) [............] > and under Linux > R version 3.0.0 Patched [...........] > Looking at the source code of plot.hclust leads to > graphics:::plotHclust which calls .External.graphics, > which is where my ability to read code quickly stops :) > I realize that these are not the most recent releases but > I couldn't find anything mentioning a bug fix for this in > the changelog, so I assume it has not been fixed. You are right. Duncan Murdoch found the place (in the C code indeed), and I've found and fixed the small inconsistency that happened (between 2.15.x and 3.0.0) when that code was slightly streamlined and moved to the 'graphics' package. > Thanks, > Peter Thank you Peter, for reporting it in such a precise manner! Martin Maechler, ETH Zurich
Possibly Parallel Threads
- identify.hclust() doesn't cut tree at the vertical position of the mouse pointer
- hclust() memory issue
- plot.hclust: strange behaviour with "manufactured" hclust object
- hclust.identify problem
- Any functions to manipulate (merge, cut, remove) hclust objects? (maybe through phylo?)