From b38337a6545413f45460eb15be6665defaca81c4 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Tue, 1 Aug 2023 23:40:45 -0700 Subject: [PATCH 01/34] Use edge.col column internally --- R/SRCGrob.R | 3 +++ R/add.segs.R | 4 ++-- R/prep.tree.R | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/R/SRCGrob.R b/R/SRCGrob.R index 3480a8a..ecb6627 100644 --- a/R/SRCGrob.R +++ b/R/SRCGrob.R @@ -41,6 +41,9 @@ SRCGrob <- function( yat <- prep.yat(yat); yaxis.position <- get.y.axis.position(colnames(tree)); + + tree$edge.col.1 <- seg1.col; + tree$edge.col.2 <- seg2.col; inputs <- prep.tree( tree, diff --git a/R/add.segs.R b/R/add.segs.R index 8747232..40cee2b 100644 --- a/R/add.segs.R +++ b/R/add.segs.R @@ -221,7 +221,7 @@ add.tree.segs <- function( y1 = tree.segs1$tipy, default.units = 'native', gp = gpar( - col = seg1.col, + col = clone.out$v$edge.colour.1, lwd = line.lwd ) ); @@ -238,7 +238,7 @@ add.tree.segs <- function( y1 = tree.segs2$tipy, default.units = 'native', gp = gpar( - col = seg2.col, + col = clone.out$v$edge.colour.2, lwd = line.lwd ) ); diff --git a/R/prep.tree.R b/R/prep.tree.R index c51b74a..98c4c18 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -77,6 +77,8 @@ prep.tree <- function( color = colour.scheme[1:(nrow(tree.df) + 1)], parent = as.numeric(c(NA,tree.df$parent)), excluded = c(TRUE, rep(FALSE, nrow(tree.df))), + edge.colour.1 = c(NA, tree.df$edge.col.1), + edge.colour.2 = c(NA, tree.df$edge.col.2), bell = c(FALSE, rep(bells, nrow(tree.df))), alpha = rep(0.5, (nrow(tree.df) + 1)), stringsAsFactors = FALSE From a94470a99bb9bd3aa8a8bc53eb6537725d7bf29c Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Tue, 1 Aug 2023 23:43:49 -0700 Subject: [PATCH 02/34] Remove seg1.col and seg2.col parameters --- R/SRCGrob.R | 5 ----- R/prep.tree.R | 8 ++++++++ tests/testthat/helper-multitest.R | 5 +++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/R/SRCGrob.R b/R/SRCGrob.R index ecb6627..20ab0a4 100644 --- a/R/SRCGrob.R +++ b/R/SRCGrob.R @@ -19,8 +19,6 @@ SRCGrob <- function( main.cex = 1.7, node.radius = 0.1, node.col = 'grey29', - seg1.col = 'black', - seg2.col = 'green', line.lwd = 3, node.text.line.dist = 0.1, colour.scheme = CancerEvolutionVisualization::colours, @@ -41,9 +39,6 @@ SRCGrob <- function( yat <- prep.yat(yat); yaxis.position <- get.y.axis.position(colnames(tree)); - - tree$edge.col.1 <- seg1.col; - tree$edge.col.2 <- seg2.col; inputs <- prep.tree( tree, diff --git a/R/prep.tree.R b/R/prep.tree.R index 98c4c18..748ca67 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -52,6 +52,14 @@ prep.tree <- function( } } + if (!('edge.colour.1' %in% colnames(tree.df))) { + tree.df$edge.colour.1 <- 'black'; + } + + if (!('edge.colour.2' %in% colnames(tree.df))) { + tree.df$edge.colour.2 <- 'green'; + } + tree.df <- reorder.nodes(tree.df); # Include -1 value for root node. diff --git a/tests/testthat/helper-multitest.R b/tests/testthat/helper-multitest.R index f40ae25..629bd86 100644 --- a/tests/testthat/helper-multitest.R +++ b/tests/testthat/helper-multitest.R @@ -1,12 +1,13 @@ create.test.tree <- function(tree, node.text, sample, ...) { + tree$edge.colour.1 <- 'navy'; + tree$edge.colour.2 <- 'gold'; + out <- SRCGrob( tree, node.text, node.radius = 0.1, node.text.cex = 0.85, scale1 = 0.9, - seg1.col = 'navy', - seg2.col = 'gold', node.col = 'grey40', line.lwd = 4, yaxis1.label = 'PGA', From cd7b47ba405d7824a31dbe01f1774624d30eafa7 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Wed, 2 Aug 2023 10:54:02 -0700 Subject: [PATCH 03/34] Fix bug in edge colour prep --- R/prep.tree.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/prep.tree.R b/R/prep.tree.R index 748ca67..0ff133d 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -52,12 +52,12 @@ prep.tree <- function( } } - if (!('edge.colour.1' %in% colnames(tree.df))) { - tree.df$edge.colour.1 <- 'black'; + if (!('edge.col.1' %in% colnames(tree.df))) { + tree.df$edge.col.1 <- 'black'; } - if (!('edge.colour.2' %in% colnames(tree.df))) { - tree.df$edge.colour.2 <- 'green'; + if (!('edge.col.2' %in% colnames(tree.df))) { + tree.df$edge.col.2 <- 'green'; } tree.df <- reorder.nodes(tree.df); From 6093553beb4387fa58791cd7f71360a6b3528aca Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Wed, 2 Aug 2023 11:22:20 -0700 Subject: [PATCH 04/34] Update linear test plot --- tests/testthat/data/linear.plots.Rda | Bin 9049 -> 9096 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/testthat/data/linear.plots.Rda b/tests/testthat/data/linear.plots.Rda index 601e04cc05bad9a0f1e49d2ee4e579fe2417e2ce..624cc930ae6abffcb74e5cdf137b6bc760b3d761 100644 GIT binary patch literal 9096 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 delta 8936 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 Date: Wed, 2 Aug 2023 12:19:21 -0700 Subject: [PATCH 05/34] Edge line type columns --- R/add.segs.R | 6 ++++-- R/prep.tree.R | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/R/add.segs.R b/R/add.segs.R index 40cee2b..3ab0010 100644 --- a/R/add.segs.R +++ b/R/add.segs.R @@ -222,7 +222,8 @@ add.tree.segs <- function( default.units = 'native', gp = gpar( col = clone.out$v$edge.colour.1, - lwd = line.lwd + lwd = line.lwd, + lty = clone.out$v$edge.type.1 ) ); @@ -239,7 +240,8 @@ add.tree.segs <- function( default.units = 'native', gp = gpar( col = clone.out$v$edge.colour.2, - lwd = line.lwd + lwd = line.lwd, + lty = clone.out$v$edge.type.2 ) ); } diff --git a/R/prep.tree.R b/R/prep.tree.R index 0ff133d..4b2ac06 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -60,6 +60,19 @@ prep.tree <- function( tree.df$edge.col.2 <- 'green'; } + default.edge.type <- 'solid'; + if ('edge.type.1' %in% colnames(tree.df)) { + tree.df$edge.type.1[is.na(tree.df$edge.type.1)] <- default.edge.type; + } else { + tree.df$edge.type.1 <- default.edge.type; + } + + if ('edge.type.2' %in% colnames(tree.df)) { + tree.df$edge.type.2[is.na(tree.df$edge.type.2)] <- default.edge.type; + } else { + tree.df$edge.type.2 <- default.edge.type; + } + tree.df <- reorder.nodes(tree.df); # Include -1 value for root node. @@ -87,6 +100,8 @@ prep.tree <- function( excluded = c(TRUE, rep(FALSE, nrow(tree.df))), edge.colour.1 = c(NA, tree.df$edge.col.1), edge.colour.2 = c(NA, tree.df$edge.col.2), + edge.type.1 = c(NA, tree.df$edge.type.1), + edge.type.2 = c(NA, tree.df$edge.type.2), bell = c(FALSE, rep(bells, nrow(tree.df))), alpha = rep(0.5, (nrow(tree.df) + 1)), stringsAsFactors = FALSE From e0fe4e70120299d695fab35cd5bb7479e90e0d13 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Wed, 2 Aug 2023 12:25:39 -0700 Subject: [PATCH 06/34] Edge width columns --- R/add.segs.R | 4 ++-- R/prep.tree.R | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/R/add.segs.R b/R/add.segs.R index 3ab0010..6aaa2a0 100644 --- a/R/add.segs.R +++ b/R/add.segs.R @@ -222,7 +222,7 @@ add.tree.segs <- function( default.units = 'native', gp = gpar( col = clone.out$v$edge.colour.1, - lwd = line.lwd, + lwd = clone.out$v$edge.width.1, lty = clone.out$v$edge.type.1 ) ); @@ -240,7 +240,7 @@ add.tree.segs <- function( default.units = 'native', gp = gpar( col = clone.out$v$edge.colour.2, - lwd = line.lwd, + lwd = clone.out$v$edge.width.2, lty = clone.out$v$edge.type.2 ) ); diff --git a/R/prep.tree.R b/R/prep.tree.R index 4b2ac06..043c951 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -73,6 +73,19 @@ prep.tree <- function( tree.df$edge.type.2 <- default.edge.type; } + default.edge.width <- 3; + if ('edge.width.1' %in% colnames(tree.df)) { + tree.df$edge.width.1[is.na(tree.df$edge.width.1)] <- default.edge.width; + } else { + tree.df$edge.width.1 <- default.edge.width; + } + + if ('edge.width.2' %in% colnames(tree.df)) { + tree.df$edge.width.2[is.na(tree.df$edge.width.2)] <- default.edge.width; + } else { + tree.df$edge.width.2 <- default.edge.width; + } + tree.df <- reorder.nodes(tree.df); # Include -1 value for root node. @@ -102,6 +115,8 @@ prep.tree <- function( edge.colour.2 = c(NA, tree.df$edge.col.2), edge.type.1 = c(NA, tree.df$edge.type.1), edge.type.2 = c(NA, tree.df$edge.type.2), + edge.width.1 = c(NA, tree.df$edge.width.1), + edge.width.2 = c(NA, tree.df$edge.width.2), bell = c(FALSE, rep(bells, nrow(tree.df))), alpha = rep(0.5, (nrow(tree.df) + 1)), stringsAsFactors = FALSE From 3706a062d587c2959d3a575c2b4b881afcb12802 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Wed, 2 Aug 2023 16:14:42 -0700 Subject: [PATCH 07/34] Update changelog --- DESCRIPTION | 4 ++-- NEWS | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c58c736..29f71de 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: CancerEvolutionVisualization Title: Publication Quality Phylogenetic Tree Plots -Version: 1.1.1 -Date: 2023-03-24 +Version: 2.0.0 +Date: 2023-08-02 Authors@R: c( person("Paul Boutros", role = "cre", email = "PBoutros@mednet.ucla.edu"), person("Adriana Salcedo", role = "aut"), diff --git a/NEWS b/NEWS index ebaca32..db6c171 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,18 @@ +CancerEvolutionVisualization 2.0.0 2023-08-02 (Dan Knight) + +ADDED +* Option to specify edge colour with "edge.col.1" and "edge.col.2" + columns in tree input dataframe +* Option to specify edge width using "edge.width.1" and "edge.width.2" + columns in tree input dataframe +* Option to specify edge linetype with "edge.type.1" and "edge.type.2" + columns in tree input dataframe + +REMOVED +* "seg1.col" and "seg2.col" parameters (replaced by tree input columns). + + +-------------------------------------------------------------------------- CancerEvolutionVisualization 1.1.1 2022-11-18 (Helena Winata) ADDED From 5ee9ce38f67c018e009e62d76ca8dee7402ebbe2 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Wed, 16 Aug 2023 17:16:46 -0700 Subject: [PATCH 08/34] Basic edge prep unit tests --- tests/testthat/test-prep.tree.R | 117 ++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/tests/testthat/test-prep.tree.R b/tests/testthat/test-prep.tree.R index d77453f..790d581 100644 --- a/tests/testthat/test-prep.tree.R +++ b/tests/testthat/test-prep.tree.R @@ -47,6 +47,123 @@ test_that( ); }); +test_that( + 'prep.tree passes valid edge 1 colour values', { + tree.df <- data.frame( + parent = c(NA, 1:3), + edge.col.1 = 'red' + ); + + result <- prep.tree( + tree.df, + text.df = NULL, + colour.scheme = colours + ); + + result.edge.colours <- result$in.tree.df$edge.colour.1; + expected.edge.colours <- c(NA, tree.df$edge.col.1); + + expect_equal(result.edge.colours, expected.edge.colours); + }); + + +test_that( + 'prep.tree passes valid edge 2 colour values', { + tree.df <- data.frame( + parent = c(NA, 1:3), + edge.col.2 = 'red' + ); + + result <- prep.tree( + tree.df, + text.df = NULL, + colour.scheme = colours + ); + + result.edge.colours <- result$in.tree.df$edge.colour.2; + expected.edge.colours <- c(NA, tree.df$edge.col.2); + + expect_equal(result.edge.colours, expected.edge.colours); + }); + +test_that( + 'prep.tree passes valid edge 1 width values', { + tree.df <- data.frame( + parent = c(NA, 1:3), + edge.width.1 = 1:4 + ); + + result <- prep.tree( + tree.df, + text.df = NULL, + colour.scheme = colours + ); + + result.edge.widths <- result$in.tree.df$edge.width.1; + expected.edge.widths <- c(NA, tree.df$edge.width.1); + + expect_equal(result.edge.widths, expected.edge.widths); + }); + + +test_that( + 'prep.tree passes valid edge 2 width values', { + tree.df <- data.frame( + parent = c(NA, 1:3), + edge.width.2 = 1:4 + ); + + result <- prep.tree( + tree.df, + text.df = NULL, + colour.scheme = colours + ); + + result.edge.widths <- result$in.tree.df$edge.width.2; + expected.edge.widths <- c(NA, tree.df$edge.width.2); + + expect_equal(result.edge.widths, expected.edge.widths); + }); + +test_that( + 'prep.tree passes valid edge 1 linetype values', { + tree.df <- data.frame( + parent = c(NA, 1:3), + edge.type.1 = 'dotted' + ); + + result <- prep.tree( + tree.df, + text.df = NULL, + colour.scheme = colours + ); + + result.edge.linetypes <- result$in.tree.df$edge.type.1; + expected.edge.linetypes <- c(NA, tree.df$edge.type.1); + + expect_equal(result.edge.linetypes, expected.edge.linetypes); + }); + + +test_that( + 'prep.tree passes valid edge 2 linetype values', { + tree.df <- data.frame( + parent = c(NA, 1:3), + edge.type.2 = 'solid' + ); + + result <- prep.tree( + tree.df, + text.df = NULL, + colour.scheme = colours + ); + + result.edge.linetypes <- result$in.tree.df$edge.type.2; + expected.edge.linetypes <- c(NA, tree.df$edge.type.2); + + expect_equal(result.edge.linetypes, expected.edge.linetypes); + }); + test_that( 'prep.tree.parent handles values of 0', { parent <- c(0:5); From 428b4cdf05d37b3de2b8d6cd6460f28092071909 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 17 Aug 2023 11:09:33 -0700 Subject: [PATCH 09/34] Refactor edge colour prep --- R/prep.tree.R | 41 ++++++++++--- tests/testthat/test-prep.tree.R | 100 ++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 7 deletions(-) diff --git a/R/prep.tree.R b/R/prep.tree.R index 043c951..82adf6d 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -52,13 +52,7 @@ prep.tree <- function( } } - if (!('edge.col.1' %in% colnames(tree.df))) { - tree.df$edge.col.1 <- 'black'; - } - - if (!('edge.col.2' %in% colnames(tree.df))) { - tree.df$edge.col.2 <- 'green'; - } + tree.df <- prep.edge.colours(tree.df); default.edge.type <- 'solid'; if ('edge.type.1' %in% colnames(tree.df)) { @@ -240,3 +234,36 @@ get.y.axis.position <- function(tree.colnames) { return(y.axis.position); } + +prep.edge.colours <- function(tree.df) { + edge.colours <- list(); + + default.edge.colours <- c('black', 'green'); + edge.colour.column.names <- sapply( + 1:2, + function(i) paste('edge', 'col', i, sep = '.') + ); + + for (i in 1:length(edge.colour.column.names)) { + column.name <- edge.colour.column.names[i]; + default.colour <- default.edge.colours[i]; + + if (column.name %in% colnames(tree.df)) { + tree.df[is.na(tree.df[, column.name]), column.name] <- default.colour; + } else { + tree.df[, column.name] <- default.colour; + } + } + + return(tree.df); + } + +prep.edge.colour.column <- function(tree.df, column.name, default.value) { + if (column.name %in% colnames(tree.df)) { + values <- tree.df[, column.name]; + values[is.na(values)] <- default.value; + return(values); + } else { + return(rep(default.value, nrow(tree.df))); + } + } diff --git a/tests/testthat/test-prep.tree.R b/tests/testthat/test-prep.tree.R index 790d581..d6adebc 100644 --- a/tests/testthat/test-prep.tree.R +++ b/tests/testthat/test-prep.tree.R @@ -448,3 +448,103 @@ test_that( expect_equal(yaxis.position, expected.position); }); + +test_that( + 'prep.edge.colours handles valid colour columns', { + tree <- data.frame( + parent = 1:10, + edge.col.1 = c('red'), + edge.col.2 = c('blue') + ); + + result <- prep.edge.colours(tree); + + expect_equal(result, tree); + }); + +test_that( + 'prep.edge.colours adds missing colour columns', { + tree <- data.frame( + parent = 1:10 + ); + + result <- prep.edge.colours(tree); + expected.edge.colnames <- sapply( + 1:2, function(i) paste('edge', 'col', i, sep = '.') + ); + edge.columns.found <- expected.edge.colnames %in% colnames(result); + + expect_true(all(edge.columns.found)); + }); + +test_that( + 'prep.edge.colours includes all tree columns', { + tree <- data.frame( + parent = c(NA, 1:9), + length1 = 1:10 + ); + + result <- prep.edge.colours(tree); + tree.columns.found <- colnames(tree) %in% colnames(result); + + expect_true(all(tree.columns.found)); + }); + +test_that( + 'prep.edge.colour.column handles valid column values', { + tree <- data.frame( + parent = c(NA, 1:9) + ); + + valid.colour <- 'green'; + column.name <- 'edge.col.1'; + tree[, column.name] <- valid.colour; + + result <- prep.edge.colour.column(tree, column.name, 'blue'); + + expect_equal(result, tree[, column.name]); + }); + +test_that( + 'prep.edge.colour.column replaces NA with default', { + tree <- data.frame( + parent = c(NA, 1:9) + ); + + column.name <- 'edge.col.1'; + tree[, column.name] <- 'green'; + + NA.indices <- 2:4; + tree[NA.indices, column.name] <- NA; + + default.colour <- 'black'; + result <- prep.edge.colour.column(tree, column.name, default.colour); + result.replaced <- result[NA.indices] == default.colour; + + expect_true(all(result.replaced)); + }); + +test_that( + 'prep.edge.colour.column returns correct length with missing column', { + tree <- data.frame( + parent = c(NA, 1:9) + ); + + result <- prep.edge.colour.column(tree, 'edge.col.1', 'black'); + expected.num.rows <- nrow(tree); + + expect_equal(length(result), expected.num.rows); + }); + +test_that( + 'prep.edge.colour.column returns default with missing column', { + tree <- data.frame( + parent = c(NA, 1:9) + ); + + default.colour <- 'black'; + result <- prep.edge.colour.column(tree, 'edge.col.1', default.colour); + match.default <- result == default.colour; + + expect_true(all(match.default)); + }); From 202901697567307a5ca7bd1ee34b8b5f9956f6a7 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 17 Aug 2023 11:28:04 -0700 Subject: [PATCH 10/34] Fix default edge linewidth --- R/prep.tree.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/prep.tree.R b/R/prep.tree.R index 82adf6d..34cab00 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -67,7 +67,7 @@ prep.tree <- function( tree.df$edge.type.2 <- default.edge.type; } - default.edge.width <- 3; + default.edge.width <- 4; if ('edge.width.1' %in% colnames(tree.df)) { tree.df$edge.width.1[is.na(tree.df$edge.width.1)] <- default.edge.width; } else { From a8024d23bcc7e03cff9c85391121f57b6a86a629 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 17 Aug 2023 11:28:21 -0700 Subject: [PATCH 11/34] Fix test helper --- tests/testthat/helper-multitest.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/helper-multitest.R b/tests/testthat/helper-multitest.R index 629bd86..57756df 100644 --- a/tests/testthat/helper-multitest.R +++ b/tests/testthat/helper-multitest.R @@ -1,6 +1,6 @@ create.test.tree <- function(tree, node.text, sample, ...) { - tree$edge.colour.1 <- 'navy'; - tree$edge.colour.2 <- 'gold'; + tree$edge.col.1 <- 'navy'; + tree$edge.col.2 <- 'gold'; out <- SRCGrob( tree, From 1c4051c841be9e48655f8566658af71cf42ff7b9 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 17 Aug 2023 11:28:30 -0700 Subject: [PATCH 12/34] Update test example plot --- tests/testthat/data/linear.plots.Rda | Bin 9096 -> 9072 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/testthat/data/linear.plots.Rda b/tests/testthat/data/linear.plots.Rda index 624cc930ae6abffcb74e5cdf137b6bc760b3d761..726797544480dcc72595ad3b0214180aa3550d84 100644 GIT binary patch literal 9072 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 T5k2UI|47nxSJGCcgpT%qgs8>3 literal 9096 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 From 691c2abce216fea0ebe13a74589251a008882210 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 17 Aug 2023 11:30:24 -0700 Subject: [PATCH 13/34] Fix code style --- tests/testthat/test-prep.tree.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/testthat/test-prep.tree.R b/tests/testthat/test-prep.tree.R index d6adebc..881094e 100644 --- a/tests/testthat/test-prep.tree.R +++ b/tests/testthat/test-prep.tree.R @@ -83,7 +83,7 @@ test_that( result.edge.colours <- result$in.tree.df$edge.colour.2; expected.edge.colours <- c(NA, tree.df$edge.col.2); - expect_equal(result.edge.colours, expected.edge.colours); + expect_equal(result.edge.colours, expected.edge.colours); }); test_that( @@ -122,7 +122,7 @@ test_that( result.edge.widths <- result$in.tree.df$edge.width.2; expected.edge.widths <- c(NA, tree.df$edge.width.2); - expect_equal(result.edge.widths, expected.edge.widths); + expect_equal(result.edge.widths, expected.edge.widths); }); test_that( @@ -161,7 +161,7 @@ test_that( result.edge.linetypes <- result$in.tree.df$edge.type.2; expected.edge.linetypes <- c(NA, tree.df$edge.type.2); - expect_equal(result.edge.linetypes, expected.edge.linetypes); + expect_equal(result.edge.linetypes, expected.edge.linetypes); }); test_that( @@ -459,7 +459,7 @@ test_that( result <- prep.edge.colours(tree); - expect_equal(result, tree); + expect_equal(result, tree); }); test_that( @@ -487,7 +487,7 @@ test_that( result <- prep.edge.colours(tree); tree.columns.found <- colnames(tree) %in% colnames(result); - expect_true(all(tree.columns.found)); + expect_true(all(tree.columns.found)); }); test_that( From e3c072ea48326e4b5a748f6f192c01a67f5e65c0 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 24 Aug 2023 09:19:51 -0700 Subject: [PATCH 14/34] Fix test plot name --- tests/testthat/data/linear.plots.Rda | Bin 9072 -> 9087 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/testthat/data/linear.plots.Rda b/tests/testthat/data/linear.plots.Rda index 726797544480dcc72595ad3b0214180aa3550d84..e548998ce08e833e986e73ea0fbe7b20b708fe19 100644 GIT binary patch literal 9087 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 cpkmz=#5QcjwZLNVhad2}{Zn3&?`7@Y&b< z`%iqIAI>%N%sl7J-1mLvn(H}CakyyzdoWKeaZL1$>4=ljS758PLaZR z;^aj!Ms@wP%n{B27xGLq;CXDFQH{|_wOM;BM)9>(RnXE024CAvBc5HW3&k@D(}-}R zzSkj0O28zL-F~j2$DGHm2;+D^b9jYvd&89pi zG-Hg9VwXMs*|E-E6{qXfQ5qhBiMyOBfFH_g{o!Th?KbUsvF$jl&j2snPTPqo`Jz|5 z*QqjV=ZY>0j4%1iK`G`{LyxV77!OzdlGa}I7V;ThvD}c+Jf-~|tp)$`Jf+c(OR={$ znGBSC3281o1S1^jY6Lz}AH7=*K6ClYXRO))G@5_3M4XMDp_@UWq+3%S8Np_ji9n#( zO+_dt|6Te#$6$c|8?6szYKJ+MZ5_jt!5TTb-$ircayChW^aZz61~S$4-k#XbCEC?$ zFeeR%?1>7?*XR#%6qiayaxpTre64}tm89eMoPMiKNab<>@eTVVu_t_`)8;JWtj4nV zEY*EjW8@MdQvHfsxx_$is^V>x9@(jRJRa08>6^8i_fHT{`!~j086^h3xRvAk?Q{a% zS}m4@72C$Z_21I$%i^FF)3A9lF5=UxwS^JP8QP4QMemv6oB6R~{$ORwm>suT1sY2q zv~%T2a?S22>lV*tsekKLWl$Zb>WD!bJ?qY$aps@@TZ*H zOp3W*_B+JnNQudDm{McsC*2>%(Co?mpIK+7^17SP7N%ZoOPwGvdutA>?n5@;E!^LG z65r4Yrad|!tzFaEm#*h1f=b#q|EMuNmG9q-Xd{pGvp(2V{29N_I+QWa+Z;S5xOA@~ zqN6Y33(bTaI8FQgn`c*_fvMgUHK^#}+}E%iyY^Nij(_^`huE#AS=Y1mYCcK$+ns*f zuRB^Ft>B2*s`s(_8*1(5G7s)sAHKhUH)=@AvKEa_Tn}IO#)nKNU7r0!6p(BQjj^YO zQm2A6SNph;M>WgvxV`P4Ne!n*zv>U<|GA8oPo7VotIFo&rS^Cb{+#u62+`r2|H@0c zMblw3zT&eZwq=Zyr)4ibu72~^6!F|{#Y;+z50DR84{Fs+a(Ou-<53c5F=8_^V5bi% zzb1w@hNdoj*E}O^U*|mUEFL99*p_ZWwZm!hJ+4w=IW;uO(RI*|T8|UrGZ$f(0Ja?9 zW!Irjg@gHs%gx%qD=~4wnfy^EMi6^6F#q~w2~Ty9`jGwp-EGKr&d#WP0q)7S;R_Nc zacvpVd?5Tu;!nGPCC%5C==)R0ItL36j(nneC7~tB*51dfQZtQKnzZWaRXCCUX^Y2- zb)COJeL^;4PnGLr$HWa^e4fNNAkqVN#cpgQSWl&_F(tm047`%zBP5ZY?D+d;D~{>; zL`OotWOvegdT85DNaUrC-N@;+CnwK&m(Urpx&BIPtkZ@p2%ayzPYUH-3ot#bci1qj zt6vU$5Q54m{%vtxrXLBJ-uOZ!Dg1uJpXqkWQYsNRi@XRc8jYQh{@1!c@UTry(k`^{ z?xE2B4Xx6&_1!hg2#d2@iS$X75Mz?U0z1X1wPZ|TpzCF}Q=Z=q!uR?gC5E~1Vm_ywWmXFcrX9QaD zqlq%nQc;$UZ*C%yp`-8@P~fW)_jQRden$4g<*If^N+|FQ{?Vj23Etu3u->8A7e7k0 z7JLp@LUapt1tE|BQYQs5Fgivn2{0yQ#v&BnK;f@L+_wH4#4FoW`+%lDgNRs{-6Z5z z(7Q+q?=h-zbb7&FXg{!V*#R5iU+9&V;9q!^n_w8)7%v!xHRb_^;f~dVVT5C6;D6{k z{b+yK<&e)Rnb7}o7luAtJO_i&VyM6%j2JO62rI@I40;yh4+i1JdW7@$W!k85> zh&ToTen3mMM!S427m7KSgmy;(kj32d2S1P|TVq`6%Y_n*C86Jm0Az9Y5MUp)WL~s+ zJh?7;W`?5VdL0!fj#8-?^UV0i%TXRJz!2n(jqyCIUwc7 zV{|qj{=4^?(1}|IE`}`E)76~~z*($P%qdtDH=;zarP>j2)H!zlp+5j{lq20#@DmS9 zaVB5(C<;5<^6t;hj4Li~OntkGFe64gdy`DG9CU1HeL7?3$ATB zaeb$E4t%vq6aPS9Vam#%ye|2-Qcm0DZub{W1|}W>4+r{g$|Xx@63QiJI^d8~yJ*!OX3zAl`IHL zuYamsX!mbuF~u&f_p#p|5s`lZltF^mL8L?+7iYH|Om8m(SwtTNsNWX&iErQjwjoWR zM*Aoz33mPwNw%w))hAd-@Ewii&w#q>(YA=jr%S)UrZ8=80;01?$bHJ{Iv;`MD6zWQ#nsP}JSb_t+NL zksV4Ickq=%)g~VwYWC7GjTP4R8F(<2#_1tc^^WDrDf)vx=CjlH+qFygnu2A~EeN znl6zV^gLgWr@}od!d{kI|34lD7JEprF0wY#SMvW&)=x6j$ zYsrQFrN)B2oagEVt9~Jt7yDlS5J35}kKMfGv&1#NZV2|QYwXk7j0u93<2Y%lhmFTi z*^ewwIGR|pnSDLGZY6Z`YXAP|s9vxI3WoF!Uc8eIlrHz|O9Q^wyp+1;`Fb;dVhTN$ z+K@DrMtaT#Y)}v&jJCD5eNUVF9+?ZTT*H>blzgN5R)l4W5o;R%LW8E;mKc)eNq&%s zbD7OnFinVU)!nt>AURsC13jdOk)Ro9Xn3#t5&OxJay5_D^+Ilq48lmPsDR;VrapXry-hVqhrMk*~KpO0D^2PAuE`o^Tc$U`>DUzA%MO2sq+ z*|BvN?ZtzN@3~#k*Y44ZF8$MAbHu%9}Q2tTyk@q zgn!jk(3V`W^7TOkO@*~Z#%x=wT`uD=#akcCY4Md4;B|0036!w=DzQH#9GFQN+P%RN z0c6x?@d@eXqdrtR|I483NeAr_=`nn_i8gX~6gBb`w>>VtP0ta_BpS8zF?GH#;DLCs zVW*W{v`uo*^H+#P$ut3VXgBx(F8zYAKZw`Ae^WeaTefX&fNX_26xKZeVLl+IijluGk5#i)Q{URMb_x(?!}r0IgZ+#9 zb1A$QhSL4yLJv-ZmyXxJ zhAs&7Iv;Je{y)B(L_XvyglaQ06ejcPsIYUC(!H1`!#~E4^odgFQe<8%*;@l%&Vuu&RLrCVqO>jm@CpJQ=vDo?lXDPu&#%BgxGz!c+v9Mx2Z{hR=!yY z{1ruv@*C@~>-RJ<`i9H|A#9&Ouweq^S->Zdt-bd&!*)1mf^pVPDCg7dRonI~{Ws#> zEZ1%oGaqy~%zyTxfZ-W@gRi9qUURi=(Xf>jI?Kw30bOzJQp9eAoO<1Y3+})G6&_ z=*t+-LqbAcZ!Y+z5y|;!F8c00_k!q5HRkT9Z}y04KPJ5SSW4#l3I`}}(_e$V27o*X zhpiQP0Cp_%ML`3=$~ELrK=pL$1g?EA|dR)sk20;bj(} zN~rsh`BVxJup;pB!=WL-<=drhr4v9U__62MEB~45!Y8{dUun5{*h*JHf;e7kW;oNj zZxV*8T-UAcX}=u##`VO3>!AF+-vEbi7mJEy*UAThNA=|IM?_*ly#(X~z4hF5_0Lo* zVYUWV{3=}qv|GO`=##Huy2y<~^5o$3UdKoF{?DcD1s6~f2f%Unb?yqZ8$hGOvNM)H zD<|mObbt8q7C>|9WPVxu(k*`md^Xa!v34bXO#qe^KR;@!*JV7(@&phX4K!6d;Z#fDUy4rM$Ym zq=4NJhDOWAyvEH&28bmj53&iA{T(`hjJPL4u$&oh%yw)Gknr>IYx8^ZC-FD%&+?!1 zlL+t$XbX4>BndPK%nF=CnBMoxg@z+Xek-pwG#1$O4~E7d$?rLD%weOe4Uhu6{!vM= zFZv1AGEpsyiE-o1`^^E#2w%LD7t1`gb|x#0Gd7!pk}p708U;<|q`6k?KPH(ehYbL2>xj{qPH z<2iOQf%>pyG~X+jE4GAzCF%o>4q$C}t}@2rlBTD%xY!Q&=u14EL&-$b z)}~=!^1?*P96DjhsWe96{A&a9p;$*euS~4UTJvKS@I-9Jb3C0j=I>cpm3xG>!gTd} zsc0EQ7>CJd8M!~R9ob*^s)E&Kgp(cFSL)x&v9dYHr=>N?Sx9SO7#N|;u%UC+)YPbe z)wCwU+1MREz2x>JFKmKWW8&%jZ3ffwp#sd*rT%A48c-gmF=5PTTod(EFVVTw!TPV{ z95&SyF$_c<h7MosO-fHGvUA*Ab6Zi4`)6@{b`+qLYAIIaK<( zGDHH7<0vAjjkQR_bvS?=O+oWL@0~fpZwS`LSd>QmYt12V{)ScA-T!cmU?mAkMe{vW z4LWD!IY~nkandds!VcO(EkH=aJn4{^9sN(+-Cc8Z2!aexr~N_1{eA-*stWGf*^7>5 zcQLAMA4nXbJqcsl&rims1ol6Rf6h18? zfyq4`#m$J?-RJNADDfL|XrWg{U7y%h7U>NvOUeKW0orc6HOT$gpj3!D#`WDR~-Et@Gzwl`P3!m{{_!LsC z;#%KVsCl16vQb=?zUJ`OqdZ#wj#>w+(+`Cdl;>H@cvg%*bQ-2Tdu0tbgD=Yfe7eL) zNzL0FSUgR17hKfi^+z=$ib7tsnw;!wqpWQ|1MEs}%7AvJ!+w;sP7ah3IW4-AuqtIc zv=5>ly*^`An&;}tc8WeQ;^_!2Px+|RA1h%j)&=BGN}fyv-_>!+ZTkI2lzx03n1UwK z-D>N8>fj)AsYg-xxENjmzmU|zS~QHtaGkwum#;&^$VDM|V)QnGyVgVrB^CyZiQv3K zE;$FB<#tu@L=-m(N=MH=iT&4JcIc}#Mg5|Fp2>vjYGL-H_>}6@Vn+Lb^Via$Ut#tf z4@Htu0xLS#q#*^Kjwv=E9Idwg>=kO7S;n1uj3GJ~9p(l*%9<{r!qPR|u%LzrIIhS} ztN$lI&6)TNHg*!Z7Y5$Aa{p6zzuJH7V7h9eK;M~AL|OUY1t?M#Pts79{WTqGd0Lo< zC|%@PJiSF*JT3Xl87F8xUx}e372){%`yFGu*NyV`Ts zJ-oh|Ff6C$YscE6j@0|o#!zga7UyW=X3=R@EzmXyGt#Pzw?q{X3&mgtek3$Cp6dy6&I8qtiX789`Gip$%^f@GjDz8-BS!SC_5Ca{2%_#7Hr* zFc@PnUAE<{U+uf_#0?+l_k6Po*^uV)`X=7q zN0|aTJZ!(+a#eHur7E2`g_FnSOPsg}@f_b#{mo**r+<-M!8-lvKV+n#7v-<-D8`J5 zKFX0a7_fOqvpGYCL6CB(FKkl8v=m!Daj_XnL|2Ba6T)g$|0pCTm&Q|l_nBYM77y3M zxioVPj=5J{>;==jZ=5$t=Oz*-crv8r|V@Gt9=*gXbw^uY+W`k zQET#E-19C14ecgr%6oPAd*4cNs9cF9MNc{9yzbzpo%tuv6(V}NxqF3|J~JK;{zV7xNAladvrm_A==Ly1#!yvZo> z%5lPO!_-mf6cfoalwmGNER;jakycEU)0J+FJ8NO3)H_L4+v~&c`0{-jw%s$fMbPna z-n5gu%p~LvMt8lI%~y~r5ce@5u8*C^vUKs5&eA?ppZ_0nn~~4>!M!Y=lkw}%7!QSQ znVr6YI-WCIf&q7C(0;^kBjgOH?xwo&>(Dag)0;LRgv;2LjtY;FYFcooBg9YoNi*MZ zxg{)l+i`rtF}d!royf-_$G89Zb8ZWIA0-yVp_OQ_`Il|JMJC==8+Q#9Rbu z(k{REcRGjDSwu(f;G~np#{ticeF27BlH!Vrwass`YWYZbGY&5dm8FEi35yI zRuacV>Ils#ZZC)`hV%p$$kZ{fc1slvv%ik9n|ZH5u8VZ41rk~KCMEOr$oLjAqy1*0 z9=YVZ@gD+P!|#uYTE;jISh*lCu2%-%U)bazMQ<8aXPJXh*DZq7*?8QiC7fBf=4o_ahrD~h_Uc4?ctZadud@JaL$~jo-!c_s$Um;(X;zwMyt+u| zO`^J>Y~MNA&c~%Iv7}WouSejh+3dEL+G`4NL$TFa{t?45w=?V9{;Kr!3EAHgomF4C z)-IoHWyUUOtI;$2ZMeTTQaG;)_5fU&>{sz`gc{k-Wyi923E+#_6#`!lrv^z~i(+^d z>?egy^SIOb7Se4eg)>}g!}48h=>{a*c$VzdMSyNqZ06PDnIE{qs;i7=Wpd{k?*-me zB(hJH_2S(kl91_o^+QPU-1!N^EvUSq5L5Zg@O@jbN#x#O$7S>{Av6D3 z)8BoqTVGixLI_}im}X9ub-ucW6P`9=wMSw|_q)24wC(EnP%fNvZnh-DeB;Seby@2X zaGGnY#XiX^&xxL=VSAcT-{Iuf&}X-IG;QWtZa7q)#=_WjU++nDe-f5F>XN#`6M5i{ z>OH2ADKffIx)dF96t*M z#JF~%MZoOH#;`xLHQZ`;ZzRfwg39?qpWJ&!A&n_Hk51s&XzK0vPjYFmOI?`b3IuMS zSLnciP?*}BV7{3teP;T#+eYBz_M7kIl|K}(!?>?o)a;Z$H7d`7XEN07>&5#Kzms^$ z)b@--UmDB5yu#{zrSLSd4^hmi^%@I_)?viS_+fWO>JUEl4l1T-=b^IVk&-cK8&m+1 zrX4}Br4J7@jM+x(nZPQ4QYcNbjbqUzSVxYe6vwEQL-L#uq}_)?xMjc-J!e>9iqg8t zLzD>&aLit5K&~H|6fy#1^ z2VY`aa{GrXZ@PBn=&g(+YlUUP7%0eQYO5k*hwz|$L zZ}(Hh+xhSAvIYbdR4sn3_=}PoLvR3=b=Ub}g{`0KY8eQd{PqHdp zOi9e^qR@?$mLye)`YxE-G4W>gx?acvT<@LsR*)Hqr$uUmwi1gJUQ^NX>xvm|(Og8o zjQ5$Ug*l2-ezICT{6+pE?}#<4c{{O5!D_T0KvFdXyMor+gob{4Do+{c32AtkHFku` zhQ1r$Do!45_FJ}2ZbKpr%aC6h6ShPHjj;ot4xc>Ri7KwYPgAb0VRTm`!n*z1m?P}y z6t-?j^&WfdT{d-!qj?Ang4yEYRI6r{v;34gxAS;YLjT6-Rqr||1y*XL)a-^J>zGD3 zdp`_I@LShu)QhAGOW3PC9B)g%Td|d{Etiei(pDCXcpOfjt}U`H4|^9|I(_R&QHf-e z<%)@=-u4p}AyZpJx*t-Rk39A}r;r=`HmS8FJiXupzA8+2o#^LP9moGmQ(;9GuA|@2 T5k2UI|47nxSJGCcgpT%qgs8>3 From 179ad57177444a5db47ada4b9424c95f26c89c8a Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 24 Aug 2023 09:32:54 -0700 Subject: [PATCH 15/34] Update SRCGrob docs --- man/SRCGrob.Rd | 6 ------ 1 file changed, 6 deletions(-) diff --git a/man/SRCGrob.Rd b/man/SRCGrob.Rd index 0164650..ef11070 100644 --- a/man/SRCGrob.Rd +++ b/man/SRCGrob.Rd @@ -27,9 +27,6 @@ SRCGrob( main.cex = 1.7, node.radius = 0.1, node.col = "grey29", - seg1.col = "black", - seg2.col = "green", - line.lwd = 3, node.text.line.dist = 0.1, colour.scheme = CancerEvolutionVisualization::colours, draw.nodes = TRUE, @@ -73,9 +70,6 @@ SRCGrob( \item{main.cex}{Font size for the main plot title} \item{node.radius}{Node size} \item{node.col}{Node colour} - \item{seg1.col}{Colour of the first set of tree branch segments} - \item{seg2.col}{Colour of the second set of tree branch segments} - \item{line.lwd}{Branch segment thickness} \item{node.text.line.dist}{ Distance between node text and tree branches (as a value between 0 and 1) } From d3b30f8722516dfd289b1e4d47f6fd2dd320bf4a Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 24 Aug 2023 09:47:30 -0700 Subject: [PATCH 16/34] Remove line.lwd parameter --- R/SRCGrob.R | 3 +-- R/make.clone.tree.grobs.R | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/R/SRCGrob.R b/R/SRCGrob.R index 20ab0a4..8f0b7fe 100644 --- a/R/SRCGrob.R +++ b/R/SRCGrob.R @@ -19,7 +19,6 @@ SRCGrob <- function( main.cex = 1.7, node.radius = 0.1, node.col = 'grey29', - line.lwd = 3, node.text.line.dist = 0.1, colour.scheme = CancerEvolutionVisualization::colours, draw.nodes = TRUE, @@ -79,10 +78,10 @@ SRCGrob <- function( scale2 = scale2, yat = yat, wid = wid, - line.lwd = line.lwd, length.from.node.edge = length.from.node.edge, seg1.col = seg1.col, seg2.col = seg2.col, + default.branch.width = 4, add.polygons = add.polygons, sig.shape = sig.shape, spread = spread, diff --git a/R/make.clone.tree.grobs.R b/R/make.clone.tree.grobs.R index d2b9157..704112e 100644 --- a/R/make.clone.tree.grobs.R +++ b/R/make.clone.tree.grobs.R @@ -6,7 +6,7 @@ make.clone.tree.grobs <- function( scale2, wid, yat, - line.lwd, + default.branch.width, length.from.node.edge, seg1.col, seg2.col, @@ -121,7 +121,7 @@ make.clone.tree.grobs <- function( get.CP.polygons(clone.out); } - add.tree.segs(clone.out, node.radius, line.lwd, scale1, seg1.col, seg2.col); + add.tree.segs(clone.out, node.radius, default.branch.width, scale1, seg1.col, seg2.col); if (!is.null(cluster.list)) { message(paste( From 7588fbaaf40afc32ae43131b47aa28d00e945436 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 24 Aug 2023 10:04:15 -0700 Subject: [PATCH 17/34] Update test helper --- tests/testthat/helper-multitest.R | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/testthat/helper-multitest.R b/tests/testthat/helper-multitest.R index 57756df..72bf1c6 100644 --- a/tests/testthat/helper-multitest.R +++ b/tests/testthat/helper-multitest.R @@ -9,7 +9,6 @@ create.test.tree <- function(tree, node.text, sample, ...) { node.text.cex = 0.85, scale1 = 0.9, node.col = 'grey40', - line.lwd = 4, yaxis1.label = 'PGA', yaxis2.label = 'SNV', xaxis.label = 'CP', From 0bc51154c18c57ac06f93d29f7a95f89c0e5431d Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Fri, 1 Sep 2023 08:15:49 -0700 Subject: [PATCH 18/34] Update User Guide vignette with node style --- vignettes/UserGuide.Rmd | 56 +++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/vignettes/UserGuide.Rmd b/vignettes/UserGuide.Rmd index 14092f7..71d1844 100644 --- a/vignettes/UserGuide.Rmd +++ b/vignettes/UserGuide.Rmd @@ -94,7 +94,43 @@ branch.lengths.tree <- SRCGrob(branch.lengths); grid.draw(branch.lengths.tree); ``` -### Ex. 3: Showing Cellular Prevalence +### Ex. 3 Styling the Tree + +CEV gives the user control over numerous visual aspects of the tree. By specifying optional columns and values in the tree input data.frame, the user has individual control of edge colour, width, and line type. + +#### Optional Style Columns +| Style | Column | +| --- | --- | +| Node Colour | `node.col` | +| Node Label Colour | `node.label.col` | +| Node Border Colour | `border.col` | +| Node Border Width | `border.width` | +| Node Border Line Type | `border.type` | + +Default values replace missing columns and `NA` values, allowing node-by-node, and edge-by-edge control as needed. For sparsely defined values (for example, only specifying a single edge), it can be convenient to initialize a column with `NA`s, then manually assign specific nodes as needed. + +```{r echo=F} +node.style <- tree.input[, c( + 'parent', + 'node.col', 'node.label.col', + 'border.col', 'border.width', 'border.type' + )]; + +knitr::kable( + node.style, + row.names = TRUE + ); +``` + +```{r, fig.show='hide'} +node.style.tree <- SRCGrob(node.style); +``` + +```{r, fig.dim=c(5, 3.5), echo=F} +grid.draw(node.style.tree); +``` + +### Ex. 4: Showing Cellular Prevalence A `cellular.prevalence` column can also be added. These values must range between 0 and 1, and the sum of all child nodes must not be larger than their parent node's value. @@ -119,7 +155,7 @@ grid.draw(CP.tree); This secondary dataframe can be used to specify additional text corresponding to each node. -### Ex. 4: Node Text +### Ex. 5: Node Text Each row must include a node ID for the text. Text will be stacked next to the specified node. @@ -141,7 +177,7 @@ simple.text.tree <- SRCGrob(parent.only, simple.text.data); grid.draw(simple.text.tree); ``` -### Ex. 5: Specifying Colour and Style +### Ex. 6: Specifying Colour and Style - An optional `col` column can be included to specify the colour of each text. - A `fontface` column can be included to bold, italicize, etc. These values correspond to the standard R `fontface` values. - `NA` values in each column will default to `black` and `plain` respectively. @@ -167,7 +203,7 @@ common parameters in `SRCGRob`. ## Plot Size -### Ex. 6: Plot Width with Horizontal Padding +### Ex. 7: Plot Width with Horizontal Padding Some plots require more or less horizontal padding between the x-axes and the tree itself. The `horizontal.padding` parameter scales the default padding proportionally. For example, `horizontal.padding = -0.2` would reduce the padding by 20%. @@ -183,7 +219,7 @@ padding.tree <- SRCGrob( grid.draw(padding.tree); ``` -### Ex. 7: Branch Scaling +### Ex. 8: Branch Scaling Branches are scaled automatically, but users can further scale each branch with the `scale1` and `scale2` parameters. These values scale each branch proportionally, so `scale1 = 1.1` would make the first set of branch lengths 10% longer. @@ -201,7 +237,7 @@ grid.draw(scaled.tree); ``` -### Ex. 8: Plot Title +### Ex. 9: Plot Title The main title of the plot is referred to as `main` in plot parameters. `main` sets the title text, `main.cex` sets the font size, and `main.y` is used to move the main title up if more space is required for the plot. @@ -226,10 +262,10 @@ A y-axis will be added automatically for each branch length column (the left-sided axis corresponding to the first branch length column, and the right with the second length column). -### Ex. 9: Y-Axis +### Ex. 10: Y-Axis Ticks are placed automatically based on the plot size and the branch lengths. -### Ex. 10: Axis Title +### Ex. 11: Axis Title Axis titles are specified with the `yaxis1.label` and `yaxis2.label` parameters. ```{r, fig.show='hide'} @@ -248,7 +284,7 @@ axis.title.tree$vp$x <- unit(0.75, 'npc'); grid.draw(axis.title.tree); ``` -### Ex. 11: Axis Tick Placement +### Ex. 12: Axis Tick Placement The default axis tick positions can be overridden with the `yat` parameter. This expects a list of vectors, each corresponding to the ticks on an x-axis. @@ -270,7 +306,7 @@ yat.tree <- SRCGrob( grid.draw(yat.tree); ``` -### Ex. 12: Normal +### Ex. 13: Normal ```{r, fig.show='hide'} normal.tree <- SRCGrob( parent.only, From 5bfb2a8840752143cf0fce154b73ccab1c6cff74 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Fri, 1 Sep 2023 08:01:23 -0700 Subject: [PATCH 19/34] Add node style columns to vignette data --- vignettes/data/input.examples.Rda | Bin 382 -> 472 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/vignettes/data/input.examples.Rda b/vignettes/data/input.examples.Rda index 6876c109dc333bb3864bcb8afa583ee26900bb91..a2546c1a6c3cf488c86c2b61e14bd9552c74db63 100644 GIT binary patch literal 472 zcmV;}0Vn<+iwFP!000001FciNPQx$|cAJDY0V*V3fq{jHrXaDPR)WHY00HXiByJmF zk`P=KCb}W903(d>B7FfS2E<#igIeswPUAo~EG2i}=kLxxcRt*1)r^(_08oIc6o8^p z7ih;vJ1ZLis6`42Km|Ir28j?dJwNObs$OIa{VMcRuRmE->A49S+;>qE`K+>iA`gmmHss0+iyc?V6^*8#bE}dFn zI(|~E-}ML*z{WjfQAZ!sk+D*QjiGZYhYMvw>e%aa3Cr~#p|W7c4G2N*R93nxQIiyx z#Z^hw)_iz|F8G3mNEyNi`GlhqMt+BMt1`4i0_bRNr$+H@AH~3i_rv!aUmn>j-)|-}!So7+#2TrmgNm0?l?r z<0%^bdI;!}NDo2f@tR1w+uUnbv%t!NS{AHj!Fn!H!J6*WCXO7WM6~LEG?&U-DBC2l zHn;f@L(i8%uCqJ>vFGF@?2d~0hoQ0>q&_XRSa(v{ay#%z8#*XSp^S4C`$~9Kq@G$N OF!})ptewEl1ONaRjNG{Z literal 382 zcmV-^0fGJ>iwFP!0000019eipPQx$|zUHT;kw8ei0s{*XZ9!r|jRb`a0Rq(3P2Cb< zl90NBjciCPzz8F}NMC@70r3{>pccEaLu}NO?7Q#s`R?M+M?39?({=#B1j{IaX|oXQ zljGghO<)-YN?<{id57X_>IPvvq>R19G8S8loGuvlUTeQqD}s6vG>Txo2sX4rrTXlk z@fWCv%mjC3(GEfWxd2v&3^DW739}+s8$Ko|2vwjSDhCviz}G0s9oZqezynd)k^}H$ z9!Fgnn|?$@IM<6p+Cx6p>Q$5I%9S Date: Fri, 1 Sep 2023 08:28:54 -0700 Subject: [PATCH 20/34] Add line type options to User Guide vignette --- vignettes/UserGuide.Rmd | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/vignettes/UserGuide.Rmd b/vignettes/UserGuide.Rmd index 71d1844..0007efa 100644 --- a/vignettes/UserGuide.Rmd +++ b/vignettes/UserGuide.Rmd @@ -109,6 +109,22 @@ CEV gives the user control over numerous visual aspects of the tree. By specifyi Default values replace missing columns and `NA` values, allowing node-by-node, and edge-by-edge control as needed. For sparsely defined values (for example, only specifying a single edge), it can be convenient to initialize a column with `NA`s, then manually assign specific nodes as needed. +#### Line Types +Valid values for line type columns are based on lattice's values (with some additions and differences). + +| Line Type | +| --- | +| `NA` | +| `'none'` | +| `'solid'` | +| `'dashed'` | +| `'dotted'` | +| `'dotdash'` | +| `'longdash'` | +| `'twodash'` | + +#### Styled Nodes + ```{r echo=F} node.style <- tree.input[, c( 'parent', From df97205a1550fb5e61605f483b48e0c5da35b959 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Fri, 1 Sep 2023 08:48:45 -0700 Subject: [PATCH 21/34] Update User Guide vignette --- vignettes/UserGuide.Rmd | 19 ++++++++++++------- vignettes/data/input.examples.Rda | Bin 472 -> 528 bytes 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/vignettes/UserGuide.Rmd b/vignettes/UserGuide.Rmd index 0007efa..0883e03 100644 --- a/vignettes/UserGuide.Rmd +++ b/vignettes/UserGuide.Rmd @@ -96,7 +96,7 @@ grid.draw(branch.lengths.tree); ### Ex. 3 Styling the Tree -CEV gives the user control over numerous visual aspects of the tree. By specifying optional columns and values in the tree input data.frame, the user has individual control of edge colour, width, and line type. +CEV gives the user control over numerous visual aspects of the tree. By specifying optional columns and values in the tree input data.frame, the user has individual control of the colour, width, and line type of each node, label border, and edge. #### Optional Style Columns | Style | Column | @@ -106,6 +106,11 @@ CEV gives the user control over numerous visual aspects of the tree. By specifyi | Node Border Colour | `border.col` | | Node Border Width | `border.width` | | Node Border Line Type | `border.type` | +| | | +| Edge Colour | `edge.col.2`, `edge.col.2` | +| Edge Width | `edge.width.2`, `edge.width.2` | +| Edge Line Type | `edge.type.2`, `edge.type.2` | + Default values replace missing columns and `NA` values, allowing node-by-node, and edge-by-edge control as needed. For sparsely defined values (for example, only specifying a single edge), it can be convenient to initialize a column with `NA`s, then manually assign specific nodes as needed. @@ -123,14 +128,14 @@ Valid values for line type columns are based on lattice's values (with some addi | `'longdash'` | | `'twodash'` | -#### Styled Nodes +#### Styled Tree ```{r echo=F} -node.style <- tree.input[, c( - 'parent', - 'node.col', 'node.label.col', - 'border.col', 'border.width', 'border.type' - )]; +node.style <- subset( +tree.input, select = c( + -CP, + -angle + )); knitr::kable( node.style, diff --git a/vignettes/data/input.examples.Rda b/vignettes/data/input.examples.Rda index a2546c1a6c3cf488c86c2b61e14bd9552c74db63..903f6e4f08607d3b8635b4958e03174f428f6f36 100644 GIT binary patch literal 528 zcmV+r0`L7FiwFP!000001FclSZqq;z-NbgAxFxE@FL2;ei#n~u1tk&`ZU|6|dfnI? z+hV&m&Q^g_b3@_+9N`E*(jVZ&q3U07r)n9mcUk`{L2T&_D1A zAr5h!4skqiiMPM^c=J9XZWlm@xTFu(mnCCCCW<2o(YJva=%0K1vr?^o9Vtr)+A(RC ziW}e6{2grr6E|`1Ki2$*I>Y$Wz1qGzG2-yMXvZ%X>gCDvg%Q`(b@sVhUq;`HZ>Ro) z*P|cs1Q%XyRB?Kz-aO4DLone-ECi>239Drd#e~!7l_|%_n(Xr|NoAGme@M-Ml{lA@ z#Y+fDyJZolGi+IN55!c` zU|ND6(8aY|g1wQ(E#Ydthe@C8KHc4FgRl*TZLr-2J657jxZD|DIi|=dVE}LV=ec^C z+w-bot>Oz#GhqU2$TLZK7Fi)xkGl4);Z|qR_%Jp2-K!z#O>-fqG-7oM=h8Z{Up4Py S>ZON7E`9@%U4U-u1pol{iU14% literal 472 zcmV;}0Vn<+iwFP!000001FciNPQx$|cAJDY0V*V3fq{jHrXaDPR)WHY00HXiByJmF zk`P=KCb}W903(d>B7FfS2E<#igIeswPUAo~EG2i}=kLxxcRt*1)r^(_08oIc6o8^p z7ih;vJ1ZLis6`42Km|Ir28j?dJwNObs$OIa{VMcRuRmE->A49S+;>qE`K+>iA`gmmHss0+iyc?V6^*8#bE}dFn zI(|~E-}ML*z{WjfQAZ!sk+D*QjiGZYhYMvw>e%aa3Cr~#p|W7c4G2N*R93nxQIiyx z#Z^hw)_iz|F8G3mNEyNi`GlhqMt+BMt1`4i0_bRNr$+H@AH~3i_rv!aUmn>j-)|-}!So7+#2TrmgNm0?l?r z<0%^bdI;!}NDo2f@tR1w+uUnbv%t!NS{AHj!Fn!H!J6*WCXO7WM6~LEG?&U-DBC2l zHn;f@L(i8%uCqJ>vFGF@?2d~0hoQ0>q&_XRSa(v{ay#%z8#*XSp^S4C`$~9Kq@G$N OF!})ptewEl1ONaRjNG{Z From 857b4c1dde06d538629bd26a826e3ccb3bf04d63 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Fri, 1 Sep 2023 08:49:18 -0700 Subject: [PATCH 22/34] Update changelog --- DESCRIPTION | 2 +- NEWS | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 29f71de..a0fdf4f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: CancerEvolutionVisualization Title: Publication Quality Phylogenetic Tree Plots Version: 2.0.0 -Date: 2023-08-02 +Date: 2023-08-31 Authors@R: c( person("Paul Boutros", role = "cre", email = "PBoutros@mednet.ucla.edu"), person("Adriana Salcedo", role = "aut"), diff --git a/NEWS b/NEWS index db6c171..f0fe21a 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -CancerEvolutionVisualization 2.0.0 2023-08-02 (Dan Knight) +CancerEvolutionVisualization 2.0.0 2023-08-31 (Dan Knight) ADDED * Option to specify edge colour with "edge.col.1" and "edge.col.2" From 634dd88a3c1b9f7df496711f98405c61e18177d8 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Fri, 1 Sep 2023 08:58:28 -0700 Subject: [PATCH 23/34] Create multiple default branch length columns --- R/prep.branch.lengths.R | 14 +++++++++----- tests/testthat/test-prep.branch.lengths.R | 7 +++++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/R/prep.branch.lengths.R b/R/prep.branch.lengths.R index ca8f2df..0db49b7 100644 --- a/R/prep.branch.lengths.R +++ b/R/prep.branch.lengths.R @@ -11,9 +11,9 @@ get.default.branch.length.colnames <- function(num.columns) { } } -get.default.branch.lengths <- function(num.rows) { - lengths <- data.frame(a = rep(1, times = num.rows)); - colnames(lengths) <- get.default.branch.length.colnames(1); +get.default.branch.lengths <- function(num.rows, num.cols) { + lengths <- data.frame(a = rep(num.cols, times = num.rows)); + colnames(lengths) <- get.default.branch.length.colnames(num.cols); return(lengths); } @@ -78,12 +78,16 @@ prep.branch.lengths <- function(tree.df) { ) ); - if (length(length.cols) > 0) { + # TODO: Automatically create length2 if an edge.style.2 column is present. + if (length(length.cols) > 1) { lengths.df <- data.frame(tree.df[, length.cols]); colnames(lengths.df) <- get.default.branch.length.colnames(length(length.cols)); return(lengths.df); } else { - return(get.default.branch.lengths(nrow(tree.df))); + return(get.default.branch.lengths( + num.rows = nrow(tree.df), + num.cols = 1 + )); } } diff --git a/tests/testthat/test-prep.branch.lengths.R b/tests/testthat/test-prep.branch.lengths.R index 0fab239..0d0f391 100644 --- a/tests/testthat/test-prep.branch.lengths.R +++ b/tests/testthat/test-prep.branch.lengths.R @@ -69,7 +69,10 @@ test_that( expected.length <- 10; expect_equal( - nrow(get.default.branch.lengths(expected.length)), + nrow(get.default.branch.lengths( + num.rows = expected.length, + num.cols = 1 + )), expected.length ); }); @@ -80,7 +83,7 @@ test_that( expect_true(all( apply( - get.default.branch.lengths(3), + get.default.branch.lengths(num.rows = 3, num.cols = 1), MARGIN = 1, FUN = function(x) { x == expected.value; From b5318f5fcd9a85092559581c640235ecfc801dfb Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Fri, 20 Oct 2023 22:26:11 -0700 Subject: [PATCH 24/34] Update changelog --- DESCRIPTION | 2 +- NEWS | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index a0fdf4f..a781903 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: CancerEvolutionVisualization Title: Publication Quality Phylogenetic Tree Plots Version: 2.0.0 -Date: 2023-08-31 +Date: 2023-10-20 Authors@R: c( person("Paul Boutros", role = "cre", email = "PBoutros@mednet.ucla.edu"), person("Adriana Salcedo", role = "aut"), diff --git a/NEWS b/NEWS index f0fe21a..b75c566 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -CancerEvolutionVisualization 2.0.0 2023-08-31 (Dan Knight) +CancerEvolutionVisualization 2.0.0 2023-10-20 (Helena Winata, Dan Knight) ADDED * Option to specify edge colour with "edge.col.1" and "edge.col.2" @@ -7,18 +7,12 @@ ADDED columns in tree input dataframe * Option to specify edge linetype with "edge.type.1" and "edge.type.2" columns in tree input dataframe +* Generic functions to generate accompanying heatmaps REMOVED * "seg1.col" and "seg2.col" parameters (replaced by tree input columns). --------------------------------------------------------------------------- -CancerEvolutionVisualization 1.1.1 2022-11-18 (Helena Winata) - -ADDED -* Generic functions to generate accompanying heatmaps - - -------------------------------------------------------------------------- CancerEvolutionVisualization 1.0.1 2022-10-03 (Dan Knight) From 67e6e75e4c2e0c7fe952006dfb9c5e962f5c21b3 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Tue, 24 Oct 2023 16:53:06 -0700 Subject: [PATCH 25/34] Fix code style --- tests/testthat/test-prep.tree.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-prep.tree.R b/tests/testthat/test-prep.tree.R index c0efc5f..c4c1aa8 100644 --- a/tests/testthat/test-prep.tree.R +++ b/tests/testthat/test-prep.tree.R @@ -549,7 +549,7 @@ test_that( expect_true(all(match.default)); }); -test_that( +test_that( 'prep.node.label.colours returns valid values', { node.label.colours <- c('green', 'white'); tree.df <- data.frame( @@ -606,4 +606,4 @@ test_that( prep.node.label.colours(tree.df), regexp = '"node.col"' ); - }); \ No newline at end of file + }); From 53fb96e6c56b7b79fb8544fd79395c96de088d57 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Tue, 24 Oct 2023 16:53:14 -0700 Subject: [PATCH 26/34] Update test plot output --- tests/testthat/data/branching.plots.Rda | Bin 3118 -> 3457 bytes tests/testthat/data/linear.plots.Rda | Bin 9049 -> 9618 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/testthat/data/branching.plots.Rda b/tests/testthat/data/branching.plots.Rda index d10750cac24ff9cb3b5ed95c5c1a3aff7b862491..af1f4ea6b3cbc183e91ba172dec58ebb0e23d1cd 100644 GIT binary patch literal 3457 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 UvPN_}V?E Date: Mon, 30 Oct 2023 13:29:13 -0700 Subject: [PATCH 27/34] Update User Guide vignette styling section --- vignettes/UserGuide.Rmd | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/vignettes/UserGuide.Rmd b/vignettes/UserGuide.Rmd index a4da937..8b890c6 100644 --- a/vignettes/UserGuide.Rmd +++ b/vignettes/UserGuide.Rmd @@ -107,9 +107,9 @@ CEV gives the user control over numerous visual aspects of the tree. By specifyi | Node Border Width | `border.width` | | Node Border Line Type | `border.type` | | | | -| Edge Colour | `edge.col.2`, `edge.col.2` | -| Edge Width | `edge.width.2`, `edge.width.2` | -| Edge Line Type | `edge.type.2`, `edge.type.2` | +| Edge Colour | `edge.col.1`, `edge.col.2` | +| Edge Width | `edge.width.1`, `edge.width.2` | +| Edge Line Type | `edge.type.1`, `edge.type.2` | Default values replace missing columns and `NA` values, allowing node-by-node, and edge-by-edge control as needed. For sparsely defined values (for example, only specifying a single edge), it can be convenient to initialize a column with `NA`s, then manually assign specific nodes as needed. @@ -131,13 +131,15 @@ Valid values for line type columns are based on lattice's values (with some addi ```{r echo=F} node.style <- tree.input[, c( - 'parent', + 'parent', 'length1', 'length2', 'node.col', 'node.label.col', - 'border.col', 'border.width', 'border.type' + 'border.col', 'border.width', 'border.type', + 'edge.col.1', 'edge.type.1', + 'edge.col.2', 'edge.width.2' )]; knitr::kable( - node.style, + node.style |> subset(select = -c(parent, length1, length2)), row.names = TRUE ); ``` From 05c424034b7219a54d14ae80bdb5dc3062ab6fba Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Mon, 30 Oct 2023 13:40:38 -0700 Subject: [PATCH 28/34] Update changelog --- DESCRIPTION | 2 +- NEWS | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index a781903..f6eacfa 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: CancerEvolutionVisualization Title: Publication Quality Phylogenetic Tree Plots Version: 2.0.0 -Date: 2023-10-20 +Date: 2023-10-30 Authors@R: c( person("Paul Boutros", role = "cre", email = "PBoutros@mednet.ucla.edu"), person("Adriana Salcedo", role = "aut"), diff --git a/NEWS b/NEWS index 40c2e71..cc20dee 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -CancerEvolutionVisualization 2.0.0 2023-10-20 (Helena Winata, Dan Knight) +CancerEvolutionVisualization 2.0.0 2023-10-30 (Helena Winata, Dan Knight) ADDED * Option to specify edge colour with "edge.col.1" and "edge.col.2" From 975d7e0501a3d5900f360a2a089948510a9edc15 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Mon, 13 Nov 2023 11:00:35 -0800 Subject: [PATCH 29/34] Fix code style --- vignettes/UserGuide.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/UserGuide.Rmd b/vignettes/UserGuide.Rmd index 8b890c6..cb86a75 100644 --- a/vignettes/UserGuide.Rmd +++ b/vignettes/UserGuide.Rmd @@ -139,7 +139,7 @@ node.style <- tree.input[, c( )]; knitr::kable( - node.style |> subset(select = -c(parent, length1, length2)), + node.style[, !(colnames(node.style) %in% c('parent', 'length1', 'length2'))], row.names = TRUE ); ``` From 7f47d1075076716b640a1613a9ccc5a7085de2e0 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Mon, 13 Nov 2023 16:16:12 -0800 Subject: [PATCH 30/34] Fix branch length bug --- R/prep.branch.lengths.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/prep.branch.lengths.R b/R/prep.branch.lengths.R index 0db49b7..f26870b 100644 --- a/R/prep.branch.lengths.R +++ b/R/prep.branch.lengths.R @@ -79,7 +79,7 @@ prep.branch.lengths <- function(tree.df) { ); # TODO: Automatically create length2 if an edge.style.2 column is present. - if (length(length.cols) > 1) { + if (length(length.cols) > 0) { lengths.df <- data.frame(tree.df[, length.cols]); colnames(lengths.df) <- get.default.branch.length.colnames(length(length.cols)); From 7ad8b23f64680ca8c0fb33c90323185138270fd4 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Tue, 14 Nov 2023 16:43:21 -0800 Subject: [PATCH 31/34] Fix default edge width --- R/prep.tree.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/prep.tree.R b/R/prep.tree.R index 0383e31..6cd7bbc 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -69,7 +69,7 @@ prep.tree <- function( tree.df$edge.type.2 <- default.edge.type; } - default.edge.width <- 4; + default.edge.width <- 3; if ('edge.width.1' %in% colnames(tree.df)) { tree.df$edge.width.1[is.na(tree.df$edge.width.1)] <- default.edge.width; } else { From 5fee7c8dd83334d01534841c3d6e03e051537acc Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Tue, 14 Nov 2023 17:00:45 -0800 Subject: [PATCH 32/34] Update test plots --- tests/testthat/data/branching.fixed.plots.Rda | Bin 4559 -> 4691 bytes .../testthat/data/branching.radial.plots.Rda | Bin 5627 -> 5723 bytes tests/testthat/data/linear.plots.Rda | Bin 9618 -> 9636 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/testthat/data/branching.fixed.plots.Rda b/tests/testthat/data/branching.fixed.plots.Rda index 9b1affef9c009b10a1cb03b3793d9eccb9dcbbc6..4f6fdf17fdf5a947fc0894f3d13676d9563f543d 100644 GIT binary patch literal 4691 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 KfBuDyf$o3Ed&)lm literal 5627 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 diff --git a/tests/testthat/data/linear.plots.Rda b/tests/testthat/data/linear.plots.Rda index 7587ff77b0458d86fcad629fdd02533935f50724..aafb54112a5813ef3ea5d025686fe84e8832f047 100644 GIT binary patch literal 9636 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 tJHpIVyr$y&5XY{{v~G)&&3n literal 9618 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 lG}eOH5lv6FaDSascd Date: Tue, 14 Nov 2023 17:16:20 -0800 Subject: [PATCH 33/34] Update linear test data --- tests/testthat/data/linear.data.Rda | Bin 736 -> 831 bytes tests/testthat/data/linear.plots.Rda | Bin 9636 -> 9675 bytes tests/testthat/helper-multitest.R | 3 --- 3 files changed, 3 deletions(-) diff --git a/tests/testthat/data/linear.data.Rda b/tests/testthat/data/linear.data.Rda index 9ced492b53d488462d039c4a3aa404b612b07e22..ef037545943adaf2559ad0525d1092841df2cd31 100644 GIT binary patch literal 831 zcmV-F1Hk+riwFP!000001Ep2XZqq;z-o{R7N@#HH&I`#FDZ?Ouc4qSPmGm=hlpix<;_0d-hDXuxogv#%m6eY4lbqt)~f% z{P9f*-qkhNz@}|u%f*gKh*x8Faki^xc@8EPHVu`9;-ny=4I=W++hC_(!T6Vb^)*L%KtmzQTasDyIu1Pe{a~uyF zx<#_XiAch4)%wzZ@N@0qs`lgYo3Dmi;@^LX=0K~TJ|p>EdueKKV{flCBGkUjK51)* z!SR?6!zrs*Wf)TbZON`0TX9yUV>V|k5|UYbJQu&WzTMzek5S=_XgX%2E0McJOuzSi;z+ zJcuKh1K&RavA?wjtV}%Ii_>&o-=YC{tq7g^{&X@8DQA$zt&l~>d~8%z3>k-X$U}8_M>IbU%e)0T)0c*EGGfUb(viqnFydoivC(nvrNLIWbA*35VI|bbq1>&+W{yU! z0PQ3`(~2S>^jr2J7?=HcazcH67(_f}?`l?cNK+=UJ2_sg7qT}L=(;E8)wSSM`@j!r zn#$$@a7nzK+EJ2aSGeS_rz%+;=$794?sE(URX4Ua_o2?uUiX01-`O>LC26p+KPctC zZG!yr#Q|KIy1BgroM!LkvvnwT>-md8Z`-(j_d%bS@)|nwN*dR!ATQM9`Ew~r*>3+Y zs`*25Rn951k)D52I#+Oc;(*gI@c)AToAt^nnxX+2sI!M-QYJ43ryS|oJRQXmKcYS> zLMWHDA}F$P#GiIcOswz`+ln?5b0oRTg?|fDxUm&0iI%S&PZ%WE&L^C+_gs#|#UHVq Jj~PM;002{yl~@1( literal 736 zcmV<60w4V!iwFP!000001Ep2XZqq;z-o#EIrL;lZIdNrW?|S`nft2)D{fpWll>@3a zTc@$=*u~xeM;?JA2cCgP;RU#IMm#~wI@xg>w-uGJWX(4--|WuL%-RR5M|9z60U=}{ z)2Jb%p&)9!>94==5i;vasUZ`!lx)XQ67meoFqim*OO8zZG)0N7QJ z4S-ZUCJmUQvB9WSan~IWoFwoo&W9Fe#IpkTN_U8F2du(t^s`BFrj_RFj3;7rSAtJ0 z?AwI8E^&O~QO1G_vrW{lffIOyIfUAjY5S7RuwzZPcL{MTQOh>LggAr+YH1Z(E{0v| zGs=9+a{|k%)~)Sh>RFymZI3bEcieI_f<0FqmU_(bynCkDrVIyx=LN*J9HtIetW?Bx zoUgrSKUbc2@Q;`8zS(AJ|Ng5O4%GSl1?lJ3qM6;bot@H&Q0r1X+SiJs(~%s+ld#&A zLCnQj$(|p*M#9HoUe1_q-8s*~L;^*OqWA<_pG?Nbc|Ojs>mvC8dcE5NPn-%aqcnlJ z5@HCjx3K~&1&?>qJio4Q@Cc%o3!Muw8Bby^LrCL6944o7WY4PvGLHEmjG=`|dJ^KP z1&cH;^DeA~K3|VkmVU%gli#|`;9L^v_?!!Q93?Uj-&efmfajsMJ)YWU@bFS1wF zhiM{*T!gbFjLS+B3_Uo-KdD(xxN{We5-tBZG7BNO*7U;3 S@RQV6;^HqsBhN-52LJ%ws&UT% diff --git a/tests/testthat/data/linear.plots.Rda b/tests/testthat/data/linear.plots.Rda index aafb54112a5813ef3ea5d025686fe84e8832f047..506b831960dbd754ac9c33fea883091238203863 100644 GIT binary patch literal 9675 zcmb8Ubx>Se@bAmu4hil!2_J>s)LXqd$9nnd z#z-PIiOFeu`Pg-)Xzt$bdDUjW-g?4V^*6&PLs*!fGMeJo@qV}C4w)N&>zU&>1sw-I zU5%bVtY0Hj z-ZTF+;&A24GJ_2ZpHqv9Gi}w@FAabF*9Y4qcjUIR-Yg`|qoa>M?K>uJRHTt_ky1GJ z1%KJw5#z$ik67z;<{6F;yhTcUCzp79@_~^>jYZI9A4W)?Ld<-Q!!mQQ6(0i8#6)r3^2*3~#7P8LzYc*64bsD1BqOaPDdd7Tm^^Ex`? zJwMpXgs6KCYCxmsjLd2n{~-FL0hMZ~$pg0*&0XY^W(G%z8izR7K(*(23CFX=+@3*2 zqg7}gxy*YI@;dd2s>6JeWe0| zw;92_e|hji1eG36pZGpSx058eY0Wm%`M#FyGdmM*OyaTGpDq?Zh&+5->Bq94IFS|2 zNKL6S=9^S1xA!Sf)Wz3hYF=`mYpsC%wMS(0^?4VyWjeaDX3{qiDfc|K`ZP({Z?=#} ztj8Eiwy-;w`kMmxlU=*Dv6Cq;Swn)!+G9D?s4+bnO`b&5u<>A9m)d7GatpFBzT#xd z+~fXesd`qmLHd#l{^d^4@agQOVa=*-Bi1p~tN3hG&8NTTe6X#}ewUNl#J`1Gz!$g! zb%1Sdp0{uX^?sDjS+O%kM*Hj$DJT>U#lB~Ffo)NdO`Ldp>*ljs2vxAqz)Hlp)Rya7 zFGm*1PC?(or zj+_uw+K4qfv+&7XVLSA7iHs3=`W}VW@ku0ZHb%fMt^bbok4V1$AFs%X=(fymn&648eMXcXy`;X$}qr2Vh*%yY6&k>wSl|*@pYOPX_9_-NwEQEYbnn5C1E?_+qM3?aUrccwU7S&u$Cdw zQ615As2&fe!0#Wz!0c! ztDoe{G>mlPFY8j)(c=Yixb2cxz&Mf%6=(rv7B|Zcu!Zmw3tth`2)IE~?m)O9Q0@RM z0l<0)OBmoagrzrNJ-`wfcnuJRl;sHERt)IJndCzx*8uHc|5yb;5%Ad&pvd_42vBtV z3Ir%N{y72^ADr{_IliI^fC?TRhr1OZ%n+Vj^!A zE3iZCE_X&`yGaFfXXyNM{kAE%^0kQTG3dKkq1SXqu_yIUNFB-3<}CpISHnKqdX^Yp zw)^z;j)K^o+P?n8suu9cO=?C-!z1Y8G413DLI%|JE(QACG2q)Z(YUJ;p>^xc@wy!S z#_EmqEDL(t1 ziPEc|JE(Pg%Uinn8qHC0>?HaPnpoP((|o?yDX8_lrx7@@2NX%I_d8o#29EzB-t>19 z3au!k5Hg4P;&0qPU-!`L0ohuSiur%h%5I9jp4{Ey@6q%}%#{Td3RH!k`W}O3S29m5 zryLO_Lwum?)sw&Q=e%5R|F{z3GrZi)lblHdSsu>$8W3qEZ*H|R-K=mV8Ib2%n`_u4 z^JLIqT37s%W`&Bc0>>PZQOW4PP2%x+9G9M4Q%yYhP1d)aoP~X;+i~03?9dt_91V3z z-}gs720n&7ggx5UBh_Qo6Vy}G)75{d=c*T^MiXN5NV{m|^ZX z?7!J3+9%tm+NRylODRZhNFGRDNIpo0E#g%g7>aiJ1wW%d65Vp0xG&;W85oQ9`9(aF zKJwf;pTIQHz-)%;pN>)I-;{pPw5U8Yr0Q<|>56$wJkL>Tt$9#+W<=H79P0Y^m~sAF zX^Eyq)fs&KYmRgwKd#prs46!}A83v_00^;fdLm9xoCtkaj7#kC39xUKO@GJBYND2c z=_;#?uASVpRDeS+Rr})&HJPP`ZeMNqmt(p3+)9NI$I~}8LvP(S#;Tq6hg4JPwa8+b zZpqMKZ@F;GhmmaC6hS*uy8j8askVlMWxE|hg_lR5i7AI zbq06_d(__Mq|a@9JcA$tuhXBM08!ggX?vlzgPq6%>^7ce@A>FXAusRg46^65{>hdG zj}|Mp`zf?sQTDGLlQA#0(}KQ19oJd@75f68nRvrQnjypC<|M|4qEb?K^5=X>B0QD- zTU0cAlNPQj#3keU*%Pj|S8~TKLwa>wQ;cMd<;qVgP0 zp8|YOqj0>F%v!|^U^X9HsvQY^<8-V|7Qn|YBJNWsdTP8g4Xs|Kr7bjvL8+Oy`l<=p z_PmN=r+zHI+Gn&|EG<_guGf;=e9W#=u7&%Kbmk0TdFK{4+L;UC5~9hsSxF8WSPxs6 z5A9y*qR&jQ@0+K2QHKN4?O5603nrD=>LYw>Jl{NXze2k?!q6byXta1v1rW$z>EE1e zFqR%N*0op?;z5VA=Zd+iF*LHIcq`8V=PS}A(Y_9!78p)H&u7@*S3Z*d1nR{_{|(Ci zGDkx?qh8s5+wHK3XMZKbRl7(^sX<;80eTj|S-Ha!)A*c~srKRB!2^ql)2wS7$^!1h10poqI#;CLeNX7riM z;o5mw&ZpVX)=YOKv2e9kvNv9xNtMQaE~eON2lKYhv^9{y4BAvCn8>$fk~bVms$bSKtZwj$+Ijtmzj2(gf2Sb%0;f)bEJmV) z{Ds|&V#l$pg3oNzL8|lX#LIpcMPyd$>v(Q%ab%X`!Ec=Tabx5%@eMi1UsL4tt442K zDbAqvuL`#~?W5?iitNkRe($Bg#3k6m?@W>DqHod#kGZ5iS%$W+484golo}0sR8ry! zLa7!nIuxMOY&Tn*u{|&* zeik{=2tDwXy2!eXEjRc|+O-pSAJ<%FgdC!^3O+<=4KdcKr_Q=U&_kPa1=JxG>VfzW zwh(_3;M;+o5oXyz&&ad(AU6b45|A6BDKE$k*;E7MhHB~#+CliCix5SS<%q-`9neoS z$%jPl4iZA>#R3TddMQ9ch`k>`LP))WAR**lIgk)auMS8EwbvRXgx2c~@`XaRJhixtk>P#J;P15*@|`VgVEn9 zAjFxsx$M;%2q|cMx>&UV_hypT`?;EcnQ{Tm*`h(F2+tCggrL~B%lA^JzQB9at^4ze z8|1H6QM6(FB%oNRR^2})b3n2u(=Yn40pQSg=`mbNtk^dPJb5|t{U!aP^3m4O3b!9NV)}J#J!HKMt%S;5z|0BaJ|4MLQYxguDCL{Zt_B2M(<>B zZCF#Q>rrKJd7cH#?-0S1DHPjOS0XYmh0Wd*fBt}+tXy6>cm)D>Po4+56@H01`E{y} zTlk7OL9V@Zy!4TV>JCqX*A%RhnIroN3^l*~|b-J^oyeU0fY`O6q z-TVs)`15_)Z9#BM;I;2oOqswyFt$t&@riM3aK9gFlX#`(2~Sw4ggiZ-H5i_Cq;J9{F`rHQ$^_en*_eWv+%miCD#H*9E=S{*NUxMrZCi51P# z>EwM6ZaqSgd5gsg{|czsUgY(g6SmAuQvLem1HBAd2ef5f1u&hxG}JX!<7LMv4rC3lC7S0gk(*u}UaIPe7rl-kD5e7-6RR?OBludqXzwzM|CrEW&b@4i_qx<9cAWcK$Kv69+I`9Lnj*mY&VGh>@|I3(q@& zyXHo!Rkr>>N24@S-ZQi_lC$?`y#Lp2$v*8q!#?x=$9;}{o_+p(;aj8=l0l`)jpYAB zTT%&cOFEkaU6GG5=gCS1HGfsI8KrkOhqz)Nlh5;)dTXLpu^FfLHix+q9<$7Am9}X9 zs$w%q?{AKBr92jx_bh$%pzgdv%y@s%+BHsB;qZ+@d;9NaS<*R9&f%uQkG|iI1GkYh z9(uo9UG#mFgVqZLztOO{b{dat4ayL^Ti~$Iu%Xd>b7mxM*CZtKUgI!)&rA0sx9mvm z(m+F=N7mFu=Z>*6wNin4%2F6EWlKatL}Sr3!D!3FD9Hs8-sn}NVQZ4*`UpBl(w1T-(->V@g1Af>hECuKC(wNDTB_HVQ7mSoND%+KfmNBcwVQ}?aZ^q{r7h1{5! z16D?W)p%Gt%{rm{d%)4dPZMj>3em3t&2C3~-MYn}F_bk5^o3Woy5Nsa_w$ZZ7mvel zdwP#lf72Kzg*Xd&+L9yYZ4*bF%`Uin*I(PJfS{ThA{(SR#R^dTjga8_K^Q|>tIFv; zfJG3+1B{T67M5V%lOXgqt6FT6`)yV%f%eQvP@W)$@{ktl^vU*e1bSg_F6$4c@5G@c zXfgrAES$}nciY>j)|E6He2w?f3 zo&!%r5g_T~q%htqTeB6;4$m5Rq4583G{c3D&46zjmcTWQ`S5(erfP{La$f^v6^9Wa zR^0zDh6ytNGE9g?NYF#^kwsK>vrUkL+dkP|mVhxNNqht%GY#Z_2~Pg{clu{ZL{;@t z8Fa*N^8(Sxg(tnK@EX92M99yKb!}-#0*|1^F#BJej{qrrzztD8YsS?q$)oY_w_uWz zU+sTU_4f?rmp8&1yj+Xqs)rF=72QrtuNP#WYjZe3dfe}`ZU(_~^dLPBIy;Z4%Qbq? zbC(5WLl2$?oc6fzan4AvT^xdIPxa8crNqE?%VeJ!dxsGcq5x-baYdCD!%s$Oc>n7GCEhE-&FtTj z1Tk9l$;QQ@0Wn$lk%8~c#Ny%%^8Qs}Slz#JcG#o-ue|JV6=dIVz%5py+JBL7!Ii~U z?$3yDv~QFj|D_1eQWde#_U~tmj>#~&iHcOejgdQ|*9tZZo|{K|@q+_lM!->bsoZ7U z8*4buYK!CSr$2dqZH8t6&9}KNO0WDqG6AVGP6O*fVR`=D-!Zc6>=NnL)x3Eylp$q0 zNs`Yu@Yk<_(QTaE{Q(}CbH|LRwx1CqhO&PObn8Lcj1PXbu4GRm4=D+~(14q-%1tSe zz=|I~YnGj~3|m>Nf#rsy3{HcnWC9+!A|Q{w`~yJM&3F!83>=M6^s*&j~czgi;U9&3qx5U;@COwWz~=&U|Guj#Z+$!@(D3(+Gcng{@!bqv(W=sN)X<| zD|vKe2q#pdrUthho#b%)I{~g#n^vzlxGNUJcmG@brJ9ybmk5$#48IWIi^&hC%Mxz5 zhPkT}A98jQ04x;c@h|8S3<1Nafq5I|Dj5Hw=lc)+)qm)*;U$Sj!BFYkpPE_{er)}G zlK}EvSAjyLT#ODUCS3UIo87|&#He$>m2eUr5mFs-E}T8IzOZOLfm}K@e(a@eb-AhC zS(UMVq4hVX%1|u(&bUZjS?`2m>KJhvMYXpb?c^v;kibH;>>i=<$6f6~{>siPC_TYJ zqX{!g-kKvq0qLwTS`Kx+i^PS8?pBo%xoDRe(>E5^fa6PIWXnnM@$vE=(+^50nlqkIxqqfCg|08j(1HZsYg6@jG0P>8XX;cc8CQ0*7a zpj@?xOpSoUOfj_F-6vMa&k!u2P_8z_%`Rh9uAh<3j^*#^CVVUV%{tDk7#O1eAxUS> z`OC^fs2Q88ewgZhD=UkJG9Bz~6njXpl&*m`9gy$p&w!R+hm#euBTdSP@#mT3ro|fV z9C@-I1LjxWj1aap3VB?iNZa1o&ojA9f^}D0D*^S5l*Xxztl#7d$EsRS`m(?#9|&Ww#3{hF_I!-#AX>~CR62XYji(M@gTl9`nER$F5AGwyj z!ZwC#+O^7t!S2bLJyM2+NG#yHJ=it1dmj^6Rno(CE{tNZy8_r`N)+9dt$u%=;7&2R z#jSozZeQPfYg!^c(lj5tV@c`}ocpJLBNYq1bRA!Hb12dN|GU#;a&Nv-Pv}AFGP&$T zE#+;w2PGBBL^1Z`{aPgZiEwiV*)#QK5*>TsbB;-Knv{8Yr$Qpcp>sDcfxE<<1~}-b-CT3e7;bl@j*>Ov7Ta zjMV|Bwz@K6PTnqt@-5dMfSUDBak&vK11nMK_NPB;!H&L$byglP7o%5SW?O8!mYvZ| z)DhLce=;{0uRG8e67Zde)KC^ow2Nn!y*y#i{NY=;aT(^C2S(^xMOI>rui0cdW}_U3A@_1xrJ13$!^WkhnKfS2}~uHre(`@PkEbM0A|7| zq@)l{|`y$*IGTvRk^w`k+Ykv-hqjtf|DYf7F*uXjbIL z;7elmESW&wLP=a%F+bM}`+O+Zj=g7sXW!Q7U5!0|5=DY@lTnRZC7z>h2nP{^NwkWe zl0y!IZ)Ti@&RCF12Ia~LN`a=Z&ime*)eO-QDBf9U)#p;?&gs7~IT2xBwSqq?%{-Y? zSvMtrgmt=9biTZ$zw98FONpf4G;D)?9FD~)ZpWLPw`0`{;+PJtlu9!exAsm7v}D?z z`=@fLah;{0%R!>_v+eyL50$*mo(DT_!D5L|BHb3wj@=^V{JK%P zi4lPe*_3w+2_bIO`%o6C7N;kVy0ifZ(e>cF{XX(4lIx@%p*BvxtTUQV6G(APNLb<4 z`JU`_y}HDgoOg%WaUWuF$W<9-iCY#X)S>!)o2eGpn8Qwsiro`;@?F}`w&ljo_8Sow z!FO79CuEp4R@GK^JBDui+;|JlX(ls?2rz|wcT+=&)zV%uUZsqzT946@QR_`p4E7#U z;3jeD?MVEZM<5|s?Z@FKapnvpmea^fCB!D-7zIjmA7q>NyJ5KJ7Eb%#Y4;gMHgw}Y zF1ie63ka%_H*Lk?^jL1(tTSZBw9 z+YnGKj`WJ#j}PK2ia%E7%tK#>?%6XsnkGa7uVT>V9bf)YIZ=z2bFFzEb=GYv-GAx3 z|AYCp=m{w!?vGbdyzndge(jJuN+KiNW!6E8}|uQx1bw^_p}cr&|OCKe*4x|c?}HU{YY z>S_)b2QQPC$GhN)Xr!N|CQZ%t4>wx z9}NsoUOQcR$z&~)a`jFUYXqfRyYo_m#Dt{&J4e}2SSihupLy#*Rn6}Ph;=}uioCL< zOrsj{baU+50_jtT3R8KbGaJJXGNl~Oe;E3NDPZd_f_Rn4#ZbcM4NPIG>11|7R|xrX zyK&fP0-?(}tjkk8jB<fG7cujzA`A|glHSLm z=Q&2a{c)0?u(P4*Sl#$n>xA)?p;Y;;$`?GuU-lJ=3QS=-0$+9SWu92nJ!WSN{N-r~ zj>H*bB!Ueh2gW-ag)CQj1QZvmj7dCZ%N`_%Kdj);$M@4Jl4}T%JGXp+VV7yX-C#oh zLDXPJmralB8ryjJn~yDDtIzLNOfP+*dTQ!V4F-c_a$IjhbnjELqF(n;B1#g2NXU(L zMT0cH>`tsmxAXKJkyTZrgsM$nEMEoF&d`vbllWKN=>d1ew;I(Hz&6TAeVN9bZglC8 zF-oG(?y8I3-;Cs>S25gFNw*6>%{r29Dyve(&7NSrItqdv*z*dYs9Fc?bR8!#E@`}K zsRp+ydb9&>M=ECc)2u zW;fnBPPVAlzOmx!s7OnBKzKP^0Ioh@kR$)cn9jx^`-w|SS6)^{WY~*o`02!@>bm5A z_8|_lSyZwWF)$rhaBKa$U>AKlm3$-kq7Dx&c)H%*o)ao2We-CDUV`m$1m~mMb zrryN-erH+pq>XaaF_(n-mnE?vy-eZfcee>jpByvY*9c-}DU|57`I*%iurWh6Lz>F% zM{AE`Nh_Y{GMlDNb3Ji6uU{Vs<>)D$xm_Q`WRDBQk8+LQ6|7`RpDH@plTQ8p;$fP5 z|LMQ~5#c>7RmY!tI*eF99oK*--+lX^Ch=BnIxgNzNE zkCs-7p?5&sKZ8GRjo!b^8IQdYso?GHCHEa*aaU9tLJ)H>=R+ z5c5DzB65lv^!Pk<_;;PCiq<+bm{T{#`Y^|H`galcSI#T?(%!2CEn}2_Dg_7m0OTFL zy%ae4(1{mow^6Kgr$E=K&Dh?j%9uXYb+NxpZwlsGDS$o z(cq!I>Qk!gtm02aWqqaqBdpG8P{6+Fa_+>qJ`4q`E1W?rv|p^WMGf_Xws#oeX**n0`9p6UD%t zm%X+;C4&1`4U5&%RGWJLsyTgr$10Zn!cqw=_VCYS_pb}%hBno@i1}~xic?Cug^47+ z*!o4W%8)O{Wzt0NUGX-57IR)jHzjgZ-FoG!u`V2H1-ieQQ7sYvacD2Sa3^@&9OHEl zyX21y=Xt!7h1KVEwYz8|NT8pe0-0`7;^X?{nX37!0GoOLCNC<3HoQ3_ZMX->{VCEC zr6%Vyc>Nxy7GCLMFZ&yn3%{*ynEqa*S9bh6BauT`hlg_=pL{#~Bft9R`Z-DZZbHW| zb4=Br#z_VvSLw#LT@E$pbR4e?6^bW@s}KQ>dd?x9?L(&|(-#hAUlf{GO-)bkN~zM- zI+LSJcwc9fYQB>?9rZ4LNqv*7`7E4co>BBw`AP-Msp6~e=t(-Jr_y8y?Z+Eu^`t$vfwL8n32su|zY< zv~RKW>%zq&2@2@tI~QWxn;;24e3^adm(eJg#AW%aMBa{N3~dB@6R1OYOP+@0ne>4b9!}A7-Djs{Qj5gD;-;q7xMkU=lP|Yvmc2 zqwMnO(jl;ehR^D+;Y(6VdH25k^%jj;hZl^KQf)#)vE8qzSH<*FK^CX)n}Xn_-Ioif z#9>`u5t5HfmkT1P6z_hECBz%zp?4iVl*{xOEtN8aa7mv3N?xXG2Xa+iY+v~tuF?AS z_{aLEc3%{oO(jN<90Um*rbkst{=VsP&XrU|5I%1HT_obEI4fjqa_T(4p5VQNl^JJn zMWa9N+zt63v0%(a^<{+^Ox|bm-m#s}4ztfvYwUGGp@t6=t@9fblfs@%|%PM)Q2f~W3s zU&dsvX<@P)ms`*xo_NJyZY}T66a^S`H5YQ)#&Qssa^4q53nNOj?o{QK{#02jeb5-ZXPSD+ThpMIB0o>21~)9`G{_pyH`Ud-41?#ce>+m{F!s5J6pdaWW^jOqM5I# z^L`2SwO*G{ooN+!F;xFDsMdg33j{75t_Y79=q+n zxa4tK3>`A8KMDV1IDA{q%)1b9jt`Skek|=Da*98zKeRb&svf>QUA`}?ac6;L-JCwJ zGK%hWJg?o~68HoVd)WruF&)}L04GwM37ZX zEh$uIG0+K4sTpdMP`)4bJTc@BQ%er@NDTCdQ)+>FC6phEJ%A4CL>V9jb)pV1gF4X$ zgg~9>1Fu1y7z4VXPRs!tP$$-a52zE{78`PmmXw21PYd$H7^y~Cp$2xK+r~hSNs@BV z>P>_lCFKUto$}Az?Ax@NUl!D}ICTKwtk+xF$t0G;pSsuJYswm$t z3X+OU(844l9VJSRqExb3b-cq@QNC#klB!J5;v^znrF4#>IkH(dyhHIQ-y8)=O(tl` zZ*fq8*GB~yM${1DxXwi4PB*s$nD5OrqnL4PMT1>euvc$1V`%unl~hNU)V*7*J+Iq$ znQN}tKXCJL3pmz{A`KzK$~|eUESIzo-yZiH3w75Lf;7e*Hl`f!4)OQ^!Fj1Uax$bCE{WtL(H3aE-|lf0^>KmA`XR4}Puqav z^W2_39RNV~k?8Fsn-9oSIm|v3>;c%(bTj-S1i(mKg>Fn0>O;7O*{Z;&zawItu|MgbF$P7LDjc>xB5{xhz(^x^}A zUOeVrSsbHn{eY@(P_Gk2R@B&rr8WX0v!wAJWJ~e-PCVG-9YqKtdxk1|)(+Tko|W*_ zuFnYjE()=80vfR+#VB%fR-N#aYE6c2V zOrXv@b>rQ1H}J0LDkJ)y2;!*a@x8e~B=#Ng`(Jr2WN%g)0wUNKF=pbweD0YWhB)>z z2HjnCq5mK!-jJGYV~q87w)c;f#`&?n*CM*$g8w6gkqsk=2YY7b^2+CI5lj0|<1a`9 zOy1WGnlI3C7I83jR>Ju73R`=NUTaczOXL^`9qO z%{U@bAlqf!&9^9-$nORf4I7n(5UQD)mhN+LG=aJ>_EvHn;Lr54yGvacAe%tz-a-zT ziA`Uy^d@tfiA@)Lw`82iWIymGmZ326`={}}nmM}uIqD0VlB|oZi*xWf*h`|-G#(w+ zCobS_N^Hufr)lcpBem(*dlI=u*uv~?xIWbi^^)5R?R|{AC%j=kHC&%=-4Gz==i}Gp z_uxBOKLZd8@J&h&b`DApbq+}ncMkhOPSDnHn`vDYm#b@YtUCJrVoylcIGRmd zhnK7Ca%?(=C6QYJJknUKHo?-YS26;O4F@c;R_YqH)FxP&^-IQpiQ&M-x0R_zVs#1D zW`mM(U`jauqFvFPQOl%c0+=2yy%-`*wCRPKNE)ziIh^cG(?~aj{$R@qE??*WqHo7B zU)EdTXuW68DC$VH^5g9r-$pZU@;PpbNj~kQK2frvCdCOX)nzxa@rev}eW#RSJDeZO zigeN{@#3wVq+VRqY)71d<$Z#~&AFu}FA1xMT4VeDu0e#hSVj6b{UhWGZ5s9>Z9IWG z_gClo3 z?}Qc7-Br4eSud<`UAFO7g*kx@Uq2h4M~LR;saY8LmiI0wk%yG^6s^#FpbII!`h}I# zA)8;*RcCcpKOuGiH?Jx(6ixWy;qBsfO!6UTYM(c=tK!K1?wkKj8u$j?OzUFKJg!{u z@?@wC0oB<3?f>3MjK|FI&~M$^3d~1O z%n*w%UP$QIAdZ9U*>{&P=8Y&FC*1>f%C(`MmCo4E%;$iu??n;5TM@sp+vYBPX9^uT z(u2~r2vS@}@rkX)Z=RO^F7HLet2#Gz!rB7k$Mb$zbVKj4U^IC_0+!kMFco4)x>^q+ z*rIr8GSHh9CW;ss4DDeTbQgPzRa=D9z8SALMo)!$_SE>+R_vem@6 zp~SYx-&q#QWw>xUdamK-+Pt*{9O`;9brh_70sC_{ACxN2PIc3k=cYDlG2EKBEVNZ| znnRViB>H%}*mo2kZr%*0}z|gh}jIF+?1>T1$t0j$77}ibqH{ zmTx`lv>V!RF9q0`qQjfo^VHR2p)IMPpL$2a3ppN z+p+YYrLEg;i*Q}2pE4kXI%fN2y25r7yKK?2Z3MNj||Q4utNX;cJ55JX2nTUI!gW= zMg3&6c6f)vQNCFUk{V2AB}r4dN;e$BL|Trf`M<^G3%m-g*_yUbpTMEYL5{{ZbakQM zJ%wX~Homx#p3}tMbMnebi_s3$llCvxxD!}Mv1p0yC<1Ou!f=vNVs-l^p`~5K19{xi z&yP(EK#d9kagKeoSRuKJMbAo_fr#A75%@LL!0QEphKQl?fPuCK84qkofSQ8+RnZgRlWUBX`5jfa5$5raFrz3zIZJ0 zmW88ltCno6&BAD6YX;pJZ~Y`=J$A00?D;tnRk1-WE$V29oWYffl6f>l#QQJ0MH?S) z5d&3c(UIY;wWa&TeLO&~$0Ez#rv%`Z+4tZ6i!YMSEbvIqpjn!Ytwbcxi_o7z zw&5(6yOY(5ZNM_^u*&DYQDB)!(`hJ_78p1uv)|yS3eu5-M_fN`0deo(nQPQEEMM;9 zEe(9Jlv6jH!z2%=l>SgYEZ3(JuvozdZ(N=TQ|!O+Rd-1PShO3W9Tz(yioSS!`B~VF zflFWlu7YO)U#y?jwm#`3HKymK?uwx+m%z~BkJLQZo^1SW2P?W>Axv zza}A0S(&?jGQTHK+Cz}CTfm7^q9Srtyidbz5tB~lHZc*l8NvY${(07^@3Y;fVy63- zdY1-wH@yXj;_+bvtzI&oU7j*tU0(m!l?gwxG7-=e@DNB8s1cYJIIE+#>;Up@Wj~ zU~0JVqFW`*XsK?>209EwVW2!0|2RzOM;92Cx>`%Z-XswIz4U-;zo_|Axr+TSvFRbH zYMDG`3-=)WukSlkuflX6+a24jE_?uI|B%DB!`@1718iY`62! zX=1QtI$`1SH52O5w<^7#7K^eZ`R=*Llv&eo4Yc_$Vd{6c0aMl_`Fq(17hCF2z9jk8 zn$peDh^JJHQkN2Q-ic!8R1`3Hb)i3pOqwL0*DV-!TyS*C0?K(VdTu`TpH+rPLPKs- z2GwhlP{1Q)og)I;Ew~Vs1}$X(S0?K(4wC$O`(k!fPA&rm7LZ*GiY7^ZicsxrWk-r4 zn%*LA_B%8^Z&R1doLXOIR8EOGP-c#45GiWf_asbpjS)1jD->KUW6awmjMB<#UM8dl z6MklP66W7ZG-b%xU4=UfNMsVNT!s~uQ>tYQh?F*6N@#kbM760XrLWorqcBRjQ4>;8 z(nPp;aJ5#FFkci{`r!bX+QUyV=aK42bDxps+G$%M7^N6c8&-DPkGa^T3K)9U3Ka9F z>+@Z@G}%mOM=VVa8|KW)kaoCV2l-pd9(L5DsWlms1kFrUw0U}qr-$LrATuRM`^k3~ z%l#X83W|uoL&T-Alm*f$A&_CregzQq=w}9|E_Uz@Dz4Vjqm0$XrEwwhjicob?DaV( zB(w+h_S$L+VI=tpa)u|TkzF$XgHb94C5`phFcP~-XCWjObu{W|dPoUwDhV#?4W!>Bkk2I_-$>iPp4!P|W4D#psi-$KQ$fP4K%r!4gVfU)2}h29 zl&)Yw2Ir|f5~K8(ds7#A?^9ulltKnC?NMFnfGPhW*oO?AD&)_9pFd(pPFlYWCyo8F zh>IM+UVMX$C24*B2(EE{$HyF`<*CT1m;XbMN*-h0kg7glO4s7J|0OGs?;CMQ4wku{ zgWBpwa?1yBnQr|U3RuJMq=336?L$kUAjnLZy>?;b_W}#ZOn})cVCFBB1@zeKPuKED zY>32t%H}{Z9s3U(>QS^^YRD`$b`r`}N$@k~$z^f(g8_BE`|7>o(BX_3Qnk3vJ8%-S zSoW_Db^g=(*ODuIaRrQd*86@J4P3AS4>lSdk}WOLrS^%OsEf^vmb7|AJJNsfMQa zt-=|J4;}~u)yNErWVK%-=ap(~8Y(9oeH}?$xUoKx3-Fq27NiCIS644i#!%9b)Ki~| zPh(>z0+H!?*H8w4fc$>j(kdmFd0=X~^bcZCAv>elC zHI(_uel?~z9gEpg3@wvkSCZfY(liDOk;le#1nF}Puf53Cy+_~Pz6=t&zJl}}cIKrN z6tG>Q!RvL8Z+C&c$S|BJ6K{n2L?@$&usaX`3I9~QVO55qB_=lh;-tJQ6QlHUu}anY z=?=*glT=AUdjC5~TrHoTIl1?tR%p0dVHt?6JAOM1T&nRMjuDq-qpayOyQrSS8Y0B?zJQ!w<@Wy`s#CEaa1iQQCq}UWO^G?A}#1cQjyqz z!2o2E&y;f_^Muio5Gkis{@Z0Nx|EToDEN~xN_Qf;9lh-CqtMPAT zY!cr zH9DLrSC4v5-a>Dm@x*xMqe6ZTCdgM4IdY^rbfZvKSW2@svXZ2($*ITCCZ)S}rMfr4 ze(J;28I9{rMS(^+yi4UpnUqERhJ4fW=}|q>9W+5D;*1%c}S3lw1S`-k zyXt*MTiZ5p@nA*oy+tN=e#g2h%=ce|XUIC8Tg(~IY+k6%mHJh%%-o4Vo||Gkt?X;S znv5=cYI&`GhlBAMqNogSoGDFMH78p2-0p^;8^UW;G3A-$oGe=7TV{1h)J#IdC^~p; zTk&SRZ7~IAcMuR!ly$d}iH}oh&ZRyWQPolAcAks9CLXXf=gV*OEqpgi##Q-T_#prP zysgtemDFP3eh!}9{q$3Km|`=d`m2NE{Ck<?Jg^LZU=X z9{<5)L_@3X1g?s@K7Bn1D@=7&AfV_7v;UCs;DH@ji8x;y_9w&gPsC5C?}(j4_y4d- z4*Mu2ES2c1ZrH^-b~xhX4V>n)A0r&aR1HKSuCyn- z?+lyY`_pVpPM*@cDgqp|*3@KUMD{oaRM0txzu5CoC$txTXGrr4SLf)|fgc3`uX^w6 zR^KqUxE@83m*6Q_cRE>DJBJH+T43QfB|aD?+jD}WRSvI?$SPc?AkT5++XS~J-vl+q zvr)sYlYH8>B}!;TeXxTlhxGx5+JbxH+cy}L?`M~?J69bk=q|RGvG~LX|E|z5P3>Pl z$R~uIOUHxzGwHZ_+G)+y)W(in12cxiTr9>1*S(3=67i1tNzNM?Y`F}eK z=#9;A)pS6-uwdtllJCD)Wo<2w@G@36MQQgutC*G}a{;4=H zy@)lJ*Ctw%zol*=t6bRF;}lK2?!u9aWz-*MDB!PPtJo98vR}&HJN=O0<2tqtYgfKX zpjqA&L0;c(!0S=wR)Ms8pLB}u|cdwH*E4ahU2C3LNEDWjI(8Tl- z8{%<8>q;)e=2AnH zqST_-L$t0d$8cGD+v9|dY1_o!(;y-X54Y?AJvWv1L)ll6XTG6`3BKY?tEkMDz6q19 zy(*jwgQCC+!Wgh zQ)%%K`m<-a&V|`y&JYs+TFo=gvjSKIX6UG)dWd3vRo&{&%c?}JSt$5{b&!zO@Xu2! zwh`(=K;)B0U@npIF)zUHlw`5mI&gxV(ieW;8z>k^x3%NNx+9?ZTmL0Nl@U!x(=ruy zAb6z6%NAF7?|leAbaWffUO?>U>*2`HtaUEGW2dfkJCc>R?fI0fTS%0StLJH@?J7Xw zse^od+Zfuxm<`K=J-YGZsmiwXt%11Qesg1pnhJ4c(-{`O)JrnGS21Nju;u$(49D40 z`+2hIs)Ol5$y23{4r}D><8ghMQirtp-r1Dsn&xt!l4Jo7wCa4Mjtm}q!)0i)Zc z0QNX8`nWbTo1jR2?idd;jAk{XmSi=e7)c4!f8yDIrAlj$KrO@lw<3}sd_*(oh#sr4qrghhl=!K}h-jbOPF7;YP=hT-wcTld z$CEYaV5TErzX``biDC=LGb{gI2-|6rzNpDFiDDO`#6)DKulTx$nF*|W)rJrQr^F)O0tn!m0FYj<7eHSdjypKozl3_GO#h-W22Z&v;_7?59I z{L=7~S~0_2eq?-PGUI!A-Cn?yodOjtG1>Qpb8he*wu>tQ5_~WM7nqe+A`)3I73!Xv zq|Be>xq0o2ILPdvFYH2D+l?X@G=J)pj1gLwj_H)@M!cqHhZ&iZ+uU*)u^S#tNK~bG z@-ohG4IY?sN9(J7I%x8lha3zmujJE=*+0@2DlKu#DSSNgxT*qu9sEnu046PPgbH>1 zSr)8*9;D!ShnWCf9XCzbc_A)KA)Qd$_;np`eCs&lbfF~FQ=Z2Aw&Luy(4 zlDbD_J3?~q*5MgSck#fcU7n7`?)0Uwc+h9Z+m#$oZZsZG6#Dp%-Z5B%(M}=JFJJ9v zi`IEFqL;PN?E`?=E$dH7_R?yNmMqsGX0?TxNY-U*36?#8+oHjB;|&%muh#N2OoU&se0#Iz3ajy8VIG= tJHpIVyr$y&5XY{{v~G)&&3n diff --git a/tests/testthat/helper-multitest.R b/tests/testthat/helper-multitest.R index 0c721b2..d83c5df 100644 --- a/tests/testthat/helper-multitest.R +++ b/tests/testthat/helper-multitest.R @@ -1,7 +1,4 @@ create.test.tree <- function(tree, node.text, sample, ...) { - tree$edge.col.1 <- 'navy'; - tree$edge.col.2 <- 'gold'; - out <- SRCGrob( tree, node.text, From f51b0fefbe546cbc0092fefadf84eeb6637f8336 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Tue, 14 Nov 2023 18:36:50 -0800 Subject: [PATCH 34/34] Update branching test plots --- tests/testthat/data/branching.fixed.data.Rda | Bin 212 -> 329 bytes tests/testthat/data/branching.fixed.plots.Rda | Bin 4691 -> 4704 bytes tests/testthat/data/branching.radial.data.Rda | Bin 218 -> 344 bytes .../testthat/data/branching.radial.plots.Rda | Bin 5723 -> 5798 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/testthat/data/branching.fixed.data.Rda b/tests/testthat/data/branching.fixed.data.Rda index 53ec65e8f436c61ffdc6887e3bbae61a108ed75d..b1c6ce752b56173f09253ffea6a23ef24b36acaf 100644 GIT binary patch literal 329 zcmV-P0k-}hiwFP!000001C3HkPQx%1e9eb8p;VPvaR@A-uwVxZ!~qaU-8%7W5-B*9 zW2vx$vv5N8NG-Nwhc-|`q~vABGw);j{&tbXix>cW2>cQFq56gJ@!{_L3Lx+l7(oD$ zif5^yJS$3`lV$mgj7V%GVN_B8@6-sv*HMdSI?L;aPBwnOHWA^2h3bT*)u4y=`#Ojo0T7RvD`Lx67(oEhVy{ z-VXKHy9*(wPuSSfkt?yH0=cwkTp`b8abe+v*9=KkR~F9#+F(0=I`>X9EBL>q?-^ literal 212 zcmV;_04x6=iwFP!0000016@x&3c@fLeKx7J1x0Z35C+7>O$YG+qTm{9Yzs9?8qiJ8 z;tAaaYtkCQE_vVk@_v%lVmpbp5dZ>8S|Gj|;cwQ<(G;MbAuUjZ28TPvWt?U*VTbH0 z_DqXHvpv@w@CKC-#G*CzY|8Cv!-B`GLST+BcK*@nn>xpT`=9>rVZP)?QJA4$mDkJm znJXdnmj$_yiB88&XPooGIo&d{Ut$MkLL2f>oi5Ckb#2+*9A#O)47_WxS2p6PRzlSG Ocz*y$9YJ+(0RR9(`eDof diff --git a/tests/testthat/data/branching.fixed.plots.Rda b/tests/testthat/data/branching.fixed.plots.Rda index 4f6fdf17fdf5a947fc0894f3d13676d9563f543d..6b8442bc90ed2f63f4dd2cd8985d0f485c83ecac 100644 GIT binary patch literal 4704 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 literal 218 zcmV<0044t)iwFP!000001AR|T4*@X{efGn$36Z$@51NRJ8wc?Ngv7OWYe`l~w}~Ua z#V>SqQSGjh?ZKh*=FPk}GhNO%<9HJT@Dcb8_@Pb_u2+lU1PDA$8VJzVIM@oxll_5b zM9}m=b0S$GNlGOJynd;KZ_v29`bF1=nHJrrB?2>iu=O9U-}PDkt+(p^pTBl_$mx+4 zI_Z_iRmJ9+3dZG!MLFY{+>cymlGDOEZ80`qCOe^rI`XzSU5H)QG0Sc`D5ahnUX|EW U&bUAd#;QJEZ{z?iRFDAx0FoeQE&u=k diff --git a/tests/testthat/data/branching.radial.plots.Rda b/tests/testthat/data/branching.radial.plots.Rda index a9bd9faff8111a850135d45544c2d760f596316f..8db013c762f5d9d0453ee04fd15a6ec4379b73ca 100644 GIT binary patch delta 4457 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 SD8fQ?K64J@|