... | ... |
@@ -123,6 +123,7 @@ importFrom(ggplot2,aes_) |
123 | 123 |
importFrom(ggplot2,aes_string) |
124 | 124 |
importFrom(ggplot2,annotate) |
125 | 125 |
importFrom(ggplot2,annotation_custom) |
126 |
+importFrom(ggplot2,coord_cartesian) |
|
126 | 127 |
importFrom(ggplot2,coord_flip) |
127 | 128 |
importFrom(ggplot2,coord_polar) |
128 | 129 |
importFrom(ggplot2,draw_key_path) |
... | ... |
@@ -141,6 +142,7 @@ importFrom(ggplot2,geom_text) |
141 | 142 |
importFrom(ggplot2,geom_tile) |
142 | 143 |
importFrom(ggplot2,ggplot) |
143 | 144 |
importFrom(ggplot2,ggplotGrob) |
145 |
+importFrom(ggplot2,ggplot_build) |
|
144 | 146 |
importFrom(ggplot2,ggproto) |
145 | 147 |
importFrom(ggplot2,guide_legend) |
146 | 148 |
importFrom(ggplot2,guides) |
... | ... |
@@ -1,7 +1,8 @@ |
1 | 1 |
CHANGES IN VERSION 1.7.5 |
2 | 2 |
------------------------ |
3 |
+ o improve viewClade function, use coord_cartesian instead of xlim <2016-12-28, Wed> |
|
3 | 4 |
o remove codes that move to treeio and now ggtree depends treeio <2016-12-20, Tue> |
4 |
- |
|
5 |
+ |
|
5 | 6 |
CHANGES IN VERSION 1.7.4 |
6 | 7 |
------------------------ |
7 | 8 |
o is.ggtree function to test whether object is produced by ggtree <2016-12-06, Tue> |
... | ... |
@@ -1,6 +1,6 @@ |
1 | 1 |
##' get taxa name of a selected node |
2 | 2 |
##' |
3 |
-##' |
|
3 |
+##' |
|
4 | 4 |
##' @title get_taxa_name |
5 | 5 |
##' @param tree_view tree view |
6 | 6 |
##' @param node node |
... | ... |
@@ -9,7 +9,7 @@ |
9 | 9 |
##' @author Guangchuang Yu |
10 | 10 |
get_taxa_name <- function(tree_view=NULL, node) { |
11 | 11 |
tree_view %<>% get_tree_view |
12 |
- |
|
12 |
+ |
|
13 | 13 |
df <- tree_view$data |
14 | 14 |
sp <- get.offspring.df(df, node) |
15 | 15 |
res <- df[sp, "label"] |
... | ... |
@@ -21,42 +21,48 @@ get_taxa_name <- function(tree_view=NULL, node) { |
21 | 21 |
|
22 | 22 |
##' view a clade of tree |
23 | 23 |
##' |
24 |
-##' |
|
24 |
+##' |
|
25 | 25 |
##' @title viewClade |
26 |
-##' @param tree_view full tree view |
|
26 |
+##' @param tree_view full tree view |
|
27 | 27 |
##' @param node internal node number |
28 | 28 |
##' @param xmax_adjust adjust xmax |
29 | 29 |
##' @return clade plot |
30 |
+##' @importFrom ggplot2 ggplot_build |
|
31 |
+##' @importFrom ggplot2 coord_cartesian |
|
30 | 32 |
##' @export |
31 | 33 |
##' @author Guangchuang Yu |
32 | 34 |
viewClade <- function(tree_view=NULL, node, xmax_adjust=0) { |
33 | 35 |
tree_view %<>% get_tree_view |
34 |
- |
|
36 |
+ |
|
35 | 37 |
cpos <- get_clade_position(tree_view, node=node) |
36 |
- with(cpos, tree_view+xlim(xmin, xmax*1.01 + xmax_adjust) + ylim(ymin, ymax)) |
|
38 |
+ xmax <- ggplot_build(tree_view)$layout$panel_ranges[[1]]$x.range[2] |
|
39 |
+ |
|
40 |
+ ## tree_view+xlim(cpos$xmin, xmax + xmax_adjust) + ylim(cpos$ymin, cpos$ymax) |
|
41 |
+ tree_view + coord_cartesian(xlim=c(cpos$xmin, xmax), ylim=c(cpos$ymin, cpos$ymax)) |
|
37 | 42 |
} |
38 | 43 |
|
39 | 44 |
|
45 |
+ |
|
40 | 46 |
##' collapse a clade |
41 | 47 |
##' |
42 |
-##' |
|
48 |
+##' |
|
43 | 49 |
##' @title collapse |
44 |
-##' @param tree_view tree view |
|
50 |
+##' @param tree_view tree view |
|
45 | 51 |
##' @param node clade node |
46 | 52 |
##' @return tree view |
47 | 53 |
##' @export |
48 | 54 |
##' @seealso expand |
49 | 55 |
##' @author Guangchuang Yu |
50 |
-collapse <- function(tree_view=NULL, node) { |
|
56 |
+collapse <- function(tree_view=NULL, node) { |
|
51 | 57 |
tree_view %<>% get_tree_view |
52 |
- |
|
58 |
+ |
|
53 | 59 |
df <- tree_view$data |
54 | 60 |
|
55 | 61 |
if (is.na(df$x[df$node == node])) { |
56 | 62 |
warning("specific node was already collapsed...") |
57 | 63 |
return(tree_view) |
58 | 64 |
} |
59 |
- |
|
65 |
+ |
|
60 | 66 |
sp <- get.offspring.df(df, node) |
61 | 67 |
sp.df <- df[sp,] |
62 | 68 |
df[node, "isTip"] <- TRUE |
... | ... |
@@ -69,15 +75,15 @@ collapse <- function(tree_view=NULL, node) { |
69 | 75 |
|
70 | 76 |
df[sp, "x"] <- NA |
71 | 77 |
df[sp, "y"] <- NA |
72 |
- |
|
78 |
+ |
|
73 | 79 |
df <- reassign_y_from_node_to_root(df, node) |
74 |
- |
|
80 |
+ |
|
75 | 81 |
## re-calculate branch mid position |
76 | 82 |
df <- calculate_branch_mid(df) |
77 | 83 |
|
78 | 84 |
ii <- which(!is.na(df$x)) |
79 | 85 |
df$angle[ii] <- calculate_angle(df[ii,])$angle |
80 |
- |
|
86 |
+ |
|
81 | 87 |
tree_view$data <- df |
82 | 88 |
clade <- paste0("clade_", node) |
83 | 89 |
attr(tree_view, clade) <- sp.df |
... | ... |
@@ -86,7 +92,7 @@ collapse <- function(tree_view=NULL, node) { |
86 | 92 |
|
87 | 93 |
##' expand collased clade |
88 | 94 |
##' |
89 |
-##' |
|
95 |
+##' |
|
90 | 96 |
##' @title expand |
91 | 97 |
##' @param tree_view tree view |
92 | 98 |
##' @param node clade node |
... | ... |
@@ -96,7 +102,7 @@ collapse <- function(tree_view=NULL, node) { |
96 | 102 |
##' @author Guangchuang Yu |
97 | 103 |
expand <- function(tree_view=NULL, node) { |
98 | 104 |
tree_view %<>% get_tree_view |
99 |
- |
|
105 |
+ |
|
100 | 106 |
clade <- paste0("clade_", node) |
101 | 107 |
sp.df <- attr(tree_view, clade) |
102 | 108 |
if (is.null(sp.df)) { |
... | ... |
@@ -107,7 +113,7 @@ expand <- function(tree_view=NULL, node) { |
107 | 113 |
sp_y <- range(sp.df$y) |
108 | 114 |
ii <- which(df$y > df$y[node]) |
109 | 115 |
df[ii, "y"] <- df[ii, "y"] + diff(sp_y) |
110 |
- |
|
116 |
+ |
|
111 | 117 |
sp.df$y <- sp.df$y - min(sp.df$y) + df$y[node] |
112 | 118 |
df[sp.df$node,] <- sp.df |
113 | 119 |
|
... | ... |
@@ -123,7 +129,7 @@ expand <- function(tree_view=NULL, node) { |
123 | 129 |
|
124 | 130 |
## re-calculate branch mid position |
125 | 131 |
df <- calculate_branch_mid(df) |
126 |
- |
|
132 |
+ |
|
127 | 133 |
tree_view$data <- calculate_angle(df) |
128 | 134 |
attr(tree_view, clade) <- NULL |
129 | 135 |
tree_view |
... | ... |
@@ -131,16 +137,16 @@ expand <- function(tree_view=NULL, node) { |
131 | 137 |
|
132 | 138 |
##' rotate 180 degree of a selected branch |
133 | 139 |
##' |
134 |
-##' |
|
140 |
+##' |
|
135 | 141 |
##' @title rotate |
136 |
-##' @param tree_view tree view |
|
142 |
+##' @param tree_view tree view |
|
137 | 143 |
##' @param node selected node |
138 | 144 |
##' @return ggplot2 object |
139 | 145 |
##' @export |
140 | 146 |
##' @author Guangchuang Yu |
141 | 147 |
rotate <- function(tree_view=NULL, node) { |
142 | 148 |
tree_view %<>% get_tree_view |
143 |
- |
|
149 |
+ |
|
144 | 150 |
df <- tree_view$data |
145 | 151 |
sp <- get.offspring.df(df, node) |
146 | 152 |
sp_idx <- with(df, match(sp, node)) |
... | ... |
@@ -168,9 +174,9 @@ rotate <- function(tree_view=NULL, node) { |
168 | 174 |
|
169 | 175 |
##' flip position of two selected branches |
170 | 176 |
##' |
171 |
-##' |
|
177 |
+##' |
|
172 | 178 |
##' @title flip |
173 |
-##' @param tree_view tree view |
|
179 |
+##' @param tree_view tree view |
|
174 | 180 |
##' @param node1 node number of branch 1 |
175 | 181 |
##' @param node2 node number of branch 2 |
176 | 182 |
##' @return ggplot2 object |
... | ... |
@@ -178,7 +184,7 @@ rotate <- function(tree_view=NULL, node) { |
178 | 184 |
##' @author Guangchuang Yu |
179 | 185 |
flip <- function(tree_view=NULL, node1, node2) { |
180 | 186 |
tree_view %<>% get_tree_view |
181 |
- |
|
187 |
+ |
|
182 | 188 |
df <- tree_view$data |
183 | 189 |
p1 <- with(df, parent[node == node1]) |
184 | 190 |
p2 <- with(df, parent[node == node2]) |
... | ... |
@@ -220,7 +226,7 @@ flip <- function(tree_view=NULL, node1, node2) { |
220 | 226 |
df[ii, "y"] <- NA |
221 | 227 |
currentNode <- unlist(as.vector(sapply(anc, getChild.df, df=df))) |
222 | 228 |
currentNode <- currentNode[!currentNode %in% anc] |
223 |
- |
|
229 |
+ |
|
224 | 230 |
tree_view$data <- re_assign_ycoord_df(df, currentNode) |
225 | 231 |
tree_view$data <- calculate_angle(tree_view$data) |
226 | 232 |
tree_view |
... | ... |
@@ -229,7 +235,7 @@ flip <- function(tree_view=NULL, node1, node2) { |
229 | 235 |
|
230 | 236 |
##' scale clade |
231 | 237 |
##' |
232 |
-##' |
|
238 |
+##' |
|
233 | 239 |
##' @title scaleClade |
234 | 240 |
##' @param tree_view tree view |
235 | 241 |
##' @param node clade node |
... | ... |
@@ -242,50 +248,50 @@ flip <- function(tree_view=NULL, node1, node2) { |
242 | 248 |
##' @author Guangchuang Yu |
243 | 249 |
scaleClade <- function(tree_view=NULL, node, scale=1, vertical_only=TRUE) { |
244 | 250 |
tree_view %<>% get_tree_view |
245 |
- |
|
251 |
+ |
|
246 | 252 |
if (scale == 1) { |
247 | 253 |
return(tree_view) |
248 | 254 |
} |
249 |
- |
|
255 |
+ |
|
250 | 256 |
df <- tree_view$data |
251 | 257 |
sp <- get.offspring.df(df, node) |
252 | 258 |
sp.df <- df[sp,] |
253 |
- |
|
259 |
+ |
|
254 | 260 |
## sp_nr <- nrow(sp.df) |
255 | 261 |
## span <- diff(range(sp.df$y))/sp_nr |
256 |
- |
|
262 |
+ |
|
257 | 263 |
## new_span <- span * scale |
258 | 264 |
old.sp.df <- sp.df |
259 | 265 |
sp.df$y <- df[node, "y"] + (sp.df$y - df[node, "y"]) * scale |
260 | 266 |
if (! vertical_only) { |
261 | 267 |
sp.df$x <- df[node, "x"] + (sp.df$x - df[node, "x"]) * scale |
262 | 268 |
} |
263 |
- |
|
269 |
+ |
|
264 | 270 |
scale_diff.up <- max(sp.df$y) - max(old.sp.df$y) |
265 | 271 |
scale_diff.lw <- min(sp.df$y) - min(old.sp.df$y) |
266 |
- |
|
272 |
+ |
|
267 | 273 |
ii <- df$y > max(old.sp.df$y) |
268 | 274 |
if (sum(ii) > 0) { |
269 | 275 |
df[ii, "y"] <- df[ii, "y"] + scale_diff.up |
270 | 276 |
} |
271 |
- |
|
277 |
+ |
|
272 | 278 |
jj <- df$y < min(old.sp.df$y) |
273 | 279 |
if (sum(jj) > 0) { |
274 | 280 |
df[jj, "y"] <- df[jj, "y"] + scale_diff.lw |
275 | 281 |
} |
276 |
- |
|
282 |
+ |
|
277 | 283 |
df[sp,] <- sp.df |
278 |
- |
|
284 |
+ |
|
279 | 285 |
if (! "scale" %in% colnames(df)) { |
280 | 286 |
df$scale <- 1 |
281 | 287 |
} |
282 | 288 |
df[sp, "scale"] <- df[sp, "scale"] * scale |
283 | 289 |
|
284 | 290 |
df <- reassign_y_from_node_to_root(df, node) |
285 |
- |
|
291 |
+ |
|
286 | 292 |
## re-calculate branch mid position |
287 | 293 |
df <- calculate_branch_mid(df) |
288 |
- |
|
294 |
+ |
|
289 | 295 |
tree_view$data <- calculate_angle(df) |
290 | 296 |
tree_view |
291 | 297 |
} |