Browse code

fine tune y position after flip; flip compatible with collapse

guangchuang yu authored on 22/01/2018 07:28:03
Showing 4 changed files

... ...
@@ -2,7 +2,7 @@ Package: ggtree
2 2
 Type: Package
3 3
 Title: an R package for visualization and annotation of phylogenetic trees with
4 4
     their covariates and other associated data
5
-Version: 1.11.4
5
+Version: 1.11.5
6 6
 Authors@R: c(
7 7
 	   person("Guangchuang", "Yu",     email = "guangchuangyu@gmail.com", role = c("aut", "cre", "cph"), comment = c(ORCID = "0000-0002-6485-8781")),
8 8
 	   person("Tommy Tsan-Yuk", "Lam", email = "tylam.tommy@gmail.com",   role = c("aut", "ths")),
... ...
@@ -1,3 +1,8 @@
1
+# ggtree 1.11.5
2
+
3
++ fine tune y position after flip; flip compatible with collapse
4
+    - <https://groups.google.com/d/msgid/bioc-ggtree/1d06342c-9645-4f71-9e66-7d7a7099bf0b%40googlegroups.com?utm_medium=email&utm_source=footer>
5
+
1 6
 # ggtree 1.11.4
2 7
 
3 8
 + re-implement collapse as collapse.ggtree method by importing dplyr::collapse
... ...
@@ -215,8 +215,8 @@ flip <- function(tree_view=NULL, node1, node2) {
215 215
     sp1.df <- df[sp1,]
216 216
     sp2.df <- df[sp2,]
217 217
 
218
-    min_y1 <- min(sp1.df$y)
219
-    min_y2 <- min(sp2.df$y)
218
+    min_y1 <- min(sp1.df$y, na.rm=TRUE)
219
+    min_y2 <- min(sp2.df$y, na.rm=TRUE)
220 220
 
221 221
     if (min_y1 < min_y2) {
222 222
         tmp <- sp1.df
... ...
@@ -227,16 +227,19 @@ flip <- function(tree_view=NULL, node1, node2) {
227 227
         sp2 <- tmp
228 228
     }
229 229
 
230
-    min_y1 <- min(sp1.df$y)
231
-    min_y2 <- min(sp2.df$y)
230
+    min_y1 <- min(sp1.df$y, na.rm=TRUE)
231
+    min_y2 <- min(sp2.df$y, na.rm=TRUE)
232 232
 
233
-    space <- min(sp1.df$y) - max(sp2.df$y)
233
+    space <- min(sp1.df$y, na.rm=TRUE) - max(sp2.df$y, na.rm=TRUE)
234 234
     sp1.df$y <- sp1.df$y - abs(min_y1 - min_y2)
235
-    sp2.df$y <- sp2.df$y + max(sp1.df$y) + space - min(sp2.df$y)
235
+    sp2.df$y <- sp2.df$y + max(sp1.df$y, na.rm=TRUE) + space - min(sp2.df$y, na.rm=TRUE)
236 236
 
237 237
     df[sp1, "y"] <- sp1.df$y
238 238
     df[sp2, "y"] <- sp2.df$y
239 239
 
240
+    yy <- df$y[-c(sp1, sp2)]
241
+    df$y[-c(sp1, sp2)] <- yy + ((min(sp2.df$y, na.rm=TRUE) - max(yy)) - (min(yy) - max(sp1.df$y, na.rm=TRUE)))/2
242
+
240 243
     anc <- getAncestor.df(df, node1)
241 244
     ii <- match(anc, df$node)
242 245
     df[ii, "y"] <- NA
... ...
@@ -1483,7 +1483,8 @@ re_assign_ycoord_df <- function(df, currentNode) {
1483 1483
         idx <- sapply(pNode, function(i) with(df, all(node[parent == i & parent != node] %in% currentNode)))
1484 1484
         newNode <- pNode[idx]
1485 1485
         ## newNode <- newNode[is.na(df[match(newNode, df$node), "y"])]
1486
-
1486
+        if (length(newNode) == 0)
1487
+            break
1487 1488
         df[match(newNode, df$node), "y"] <- sapply(newNode, function(i) {
1488 1489
             with(df, mean(y[parent == i], na.rm = TRUE))
1489 1490
         })