From 27675ad49cd3f753c1c7010805de6176fd17966a Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 7 May 2020 16:05:45 +0800 Subject: [PATCH 01/13] basic outline of base version of repel --- DESCRIPTION | 8 +++-- R/base-repel.R | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 R/base-repel.R diff --git a/DESCRIPTION b/DESCRIPTION index d80d326..9b08ea9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -15,12 +15,14 @@ Authors@R: c( person("Amir Masoud", "Abdol", role = "ctb"), person("Malcolm", "Barrett", role = "ctb", comment = c(ORCID = "0000-0003-0299-5825")), person("Robrecht", "Cannoodt", role = "ctb", comment = c(ORCID = "0000-0003-3641-729X")), - person("Michał", "Krassowski", role = "ctb", comment = c(ORCID = "0000-0002-9638-7785")) + person("Michał", "Krassowski", role = "ctb", comment = c(ORCID = "0000-0002-9638-7785")), + person("Michael", "Chirico", role = "ctb") ) -Title: Automatically Position Non-Overlapping Text Labels with 'ggplot2' +Title: Automatically Position Non-Overlapping Text Labels in plots Description: Provides text and label geoms for 'ggplot2' that help to avoid overlapping text labels. Labels repel away from each other and away from the - data points. + data points. Workhorse functions are exposed to accomplish the same in base + graphics. Remotes: github::tidyverse/ggplot2 Depends: diff --git a/R/base-repel.R b/R/base-repel.R new file mode 100644 index 0000000..f5728fd --- /dev/null +++ b/R/base-repel.R @@ -0,0 +1,82 @@ + +par(mfrow = c(3, 3), mar = c(0, 0, 0, 0)) +for (xadj in c(0, .5, 1)) { + for (yadj in c(0, .5, 1)) { + with(mtcars, { + plot(wt, mpg, main = paste(xadj, yadj)) + text(wt, mpg, rownames(mtcars), adj = c(xadj, yadj)) + }) + } +} + +par(mfrow = c(2, 2)) +for (font in 1:4) { + with(mtcars, { + plot(wt, mpg, main = font) + text(wt, mpg, rownames(mtcars), font = font) + }) +} + +pars(ps = 20) +par(mfrow = 1:2) +with(mtcars, { + plot(wt, mpg) + text(wt, mpg, rownames(mtcars)) +}) +with(mtcars, { + plot(wt, mpg) + repel_text(wt, mpg, rownames(mtcars)) +}) +get_boxes = function( + x, y, labels, adj, pos, offset, vfont, cex, font +) { + # par('ps') appears to be handled by strwidth + delx = strwidth(labels, cex = cex, font = font, vfont = vfont) + dely = strheight(labels, cex = cex, font = font, vfont = vfont) + + # not completely satisfactory, but should suffice: + # https://stackoverflow.com/questions/61651361 + cbind( + x1 = x - adj[1L]*delx, y1 = y - adj[2L]*dely, + x2 = x + (1-adj[1L])*delx, y2 = y + (1-adj[2L])*dely + ) +} + +repel_text = function( + x, y, labels, adj = NULL, pos = NULL, offset = .5, + vfont = NULL, cex = 1, col = NULL, font = NULL, + point.padding = 0, force = 1, force_pull = 1, + max.time = .5, max.iter = 10000L, max.overlaps = 10L, + direction = c('both', 'y', 'x'), ... +) { + if (!missing(pos)) stop("Not yet implemented") + if (!missing(offset)) stop("Not yet implemented") + + direction = match.arg(direction) + + # will grow adj if adj is length-1 + if (is.null(adj)) adj = c(par('adj'), NA_real_) + if (length(adj) == 1L) adj[2L] = .5 + if (anyNA(adj)) adj[is.na(adj)] = .5 + + repel = repel_boxes2( + data_points = cbind(x, y), + point_size = strheight('m', cex = cex, font = font, vfont = vfont), + point_padding_x = point.padding, + point_padding_y = point.padding, + boxes = get_boxes(x, y, labels, adj, pos, offset, vfont, cex, font), + xlim = lims[1:2], + ylim = lims[3:4], + hjust = adj[1L], + vjust = adj[2L], + force_push = force * 1e-6, + force_pull = force_pull * 1e-2, + max_time = max.time, + max_iter = max.iter, + max_overlaps = max.overlaps, + direction = direction + ) + + text(repel$x, repel$y, labels, adj = adj, pos = pos, offset = offset, + vfont = vfont, cex = cex, col = col, font = font) +} From 018b2f944a121d2171fe28c6754d61c1c4f34bec Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 7 May 2020 20:23:43 +0800 Subject: [PATCH 02/13] support pos; add segments from repelled text to points --- R/base-repel.R | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/R/base-repel.R b/R/base-repel.R index f5728fd..1ac437b 100644 --- a/R/base-repel.R +++ b/R/base-repel.R @@ -17,14 +17,14 @@ for (font in 1:4) { }) } -pars(ps = 20) +par(ps = 20) par(mfrow = 1:2) with(mtcars, { - plot(wt, mpg) + plot(wt, mpg, main = 'text()') text(wt, mpg, rownames(mtcars)) }) with(mtcars, { - plot(wt, mpg) + plot(wt, mpg, main = 'repel_text()') repel_text(wt, mpg, rownames(mtcars)) }) get_boxes = function( @@ -54,10 +54,24 @@ repel_text = function( direction = match.arg(direction) - # will grow adj if adj is length-1 - if (is.null(adj)) adj = c(par('adj'), NA_real_) - if (length(adj) == 1L) adj[2L] = .5 - if (anyNA(adj)) adj[is.na(adj)] = .5 + # from src/library/graphics/plot.c:C_text, setting pos is a shortcut + # for setting adj: 1->[.5, .5]; 2->[1, 0]; 3->[.5, 0]; 4->[0, 0] + # [I'm ignoring 'dd->dev->yCharOffset' which AFAICT is not exposed to + # R outside C, and which is described as "mysterious" in R-ints manual] + if (is.null(pos)) { + # will grow adj if adj is length-1 + if (is.null(adj)) adj = c(par('adj'), NA_real_) + if (length(adj) == 1L) adj[2L] = .5 + if (anyNA(adj)) adj[is.na(adj)] = .5 + } else { + pos = as.intger(pos) + if (length(pos) > 1L) stop("'pos' must have length one") + if (pos == 1L) adj = c(.5, .5) + else if (pos == 2L) adj = c(1, 0) + else if (pos == 3L) adj = c(.5, 0) + else if (pos == 4L) adj = c(0, 0) + else stop("Invalid value for 'pos' [",pos,"]; valid values are 1,2,3,4") + } repel = repel_boxes2( data_points = cbind(x, y), @@ -79,4 +93,6 @@ repel_text = function( text(repel$x, repel$y, labels, adj = adj, pos = pos, offset = offset, vfont = vfont, cex = cex, col = col, font = font) + + segments(x, y, repel$x, repel$y) } From b9426d9a12cbfb26818a9db9804f941ae33fe661 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 7 May 2020 21:39:16 +0800 Subject: [PATCH 03/13] isolate sandboxing code to its own script --- R/base-repel.R | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/R/base-repel.R b/R/base-repel.R index 1ac437b..667521e 100644 --- a/R/base-repel.R +++ b/R/base-repel.R @@ -1,32 +1,3 @@ - -par(mfrow = c(3, 3), mar = c(0, 0, 0, 0)) -for (xadj in c(0, .5, 1)) { - for (yadj in c(0, .5, 1)) { - with(mtcars, { - plot(wt, mpg, main = paste(xadj, yadj)) - text(wt, mpg, rownames(mtcars), adj = c(xadj, yadj)) - }) - } -} - -par(mfrow = c(2, 2)) -for (font in 1:4) { - with(mtcars, { - plot(wt, mpg, main = font) - text(wt, mpg, rownames(mtcars), font = font) - }) -} - -par(ps = 20) -par(mfrow = 1:2) -with(mtcars, { - plot(wt, mpg, main = 'text()') - text(wt, mpg, rownames(mtcars)) -}) -with(mtcars, { - plot(wt, mpg, main = 'repel_text()') - repel_text(wt, mpg, rownames(mtcars)) -}) get_boxes = function( x, y, labels, adj, pos, offset, vfont, cex, font ) { From 4e9d3c6ea4404ebf6be145cef1949e16ce264b6f Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 7 May 2020 21:47:10 +0800 Subject: [PATCH 04/13] do offset --- R/base-repel.R | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/R/base-repel.R b/R/base-repel.R index 667521e..626671b 100644 --- a/R/base-repel.R +++ b/R/base-repel.R @@ -26,7 +26,8 @@ repel_text = function( direction = match.arg(direction) # from src/library/graphics/plot.c:C_text, setting pos is a shortcut - # for setting adj: 1->[.5, .5]; 2->[1, 0]; 3->[.5, 0]; 4->[0, 0] + # for setting adj: 1->[.5, .5]; 2->[1, 0]; 3->[.5, 0]; 4->[0, 0]; + # application of offset is also as there # [I'm ignoring 'dd->dev->yCharOffset' which AFAICT is not exposed to # R outside C, and which is described as "mysterious" in R-ints manual] if (is.null(pos)) { @@ -36,12 +37,21 @@ repel_text = function( if (anyNA(adj)) adj[is.na(adj)] = .5 } else { pos = as.intger(pos) + offset = offset * par('cxy') if (length(pos) > 1L) stop("'pos' must have length one") - if (pos == 1L) adj = c(.5, .5) - else if (pos == 2L) adj = c(1, 0) - else if (pos == 3L) adj = c(.5, 0) - else if (pos == 4L) adj = c(0, 0) - else stop("Invalid value for 'pos' [",pos,"]; valid values are 1,2,3,4") + if (pos == 1L) { + y = y - offset + adj = c(.5, .5) + } else if (pos == 2L) { + x = x - offset + adj = c(1, 0) + } else if (pos == 3L) { + y = y + offset + adj = c(.5, 0) + } else if (pos == 4L) { + x = x + offset + adj = c(0, 0) + } else stop("Invalid value for 'pos' [",pos,"]; valid values are 1,2,3,4") } repel = repel_boxes2( From fe560b92f6ddc6ce3a1a297d28aa9317f062206b Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 7 May 2020 21:48:24 +0800 Subject: [PATCH 05/13] rename & first sliver of roxygen --- R/base-repel.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/base-repel.R b/R/base-repel.R index 626671b..07232d7 100644 --- a/R/base-repel.R +++ b/R/base-repel.R @@ -13,7 +13,8 @@ get_boxes = function( ) } -repel_text = function( +#' @export +text_repel = function( x, y, labels, adj = NULL, pos = NULL, offset = .5, vfont = NULL, cex = 1, col = NULL, font = NULL, point.padding = 0, force = 1, force_pull = 1, From 43af5f30de97842539583410f17328898f220f2d Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 8 May 2020 00:20:17 +0800 Subject: [PATCH 06/13] document @params for text_repel --- R/base-repel.R | 52 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/R/base-repel.R b/R/base-repel.R index 07232d7..146d604 100644 --- a/R/base-repel.R +++ b/R/base-repel.R @@ -13,16 +13,56 @@ get_boxes = function( ) } +#' text_repel +#' +#' This function provides an extension to \code{\link[graphics]{text}} that +#' strives to prevent overlapping text labels in your plot. Arguments are +#' aligned to \code{text} to the extent possible. +#' +#' @param x,y,labels,adj,pos,offset,vfont,cex,col,font These parameters +#' are all defined as in \code{\link[graphics]{text}}; see that page for more, +#' and see Details below for some further clarifications / caveats. +#' @param point.padding,force,force_pull,max.time,max.iter,max.overlaps,direction +#' These parameters are all defined as in \code{\link{geom_text_repel}}. +#' @param ... Additional parameters to be passed on to \code{\link[graphics]{text}}. +#' +#' @details A crucial step for the repellence algorithm is to identify a +#' bounding box for each of the \code{labels}. This is difficult to do +#' robustly/portably; best approximations are taken where appropriate. +#' +#' Specifically, \code{\link[graphics]{strwidth}} and \code{strheight} are +#' used to determine the width as plotted of \code{labels}. This appears to +#' work well for the default \code{adj}, less perfectly for \code{adj[1L]} +#' close to \code{0} or \code{1}. +#' +#' \code{pos} is mapped to a value of \code{adj} as follows: +#' * \code{pos=1L} becomes \code{adj=c(.5, .5)} +#' * \code{pos=2L} becomes \code{adj=c(1, 0)} +#' * \code{pos=3L} becomes \code{adj=c(.5, 0)} +#' * \code{pos=4L} becomes \code{adj=c(0, 0)} +#' +#' This is slightly different from \code{text()}, which further +#' accounts for the \code{yCharOffset} device attribute (this is not exposed +#' to the R API); see the \dQuote{R Internals Manual} and the source code +#' for \code{text} in \file{src/library/graphics/src/plot.c} of the R source. +#' +#' For \code{offset}, "character width" is simply mapped to +#' \code{\link[graphics]{par}('cxy')}. +#' #' @export text_repel = function( - x, y, labels, adj = NULL, pos = NULL, offset = .5, + x, y = NULL, labels, adj = NULL, pos = NULL, offset = .5, vfont = NULL, cex = 1, col = NULL, font = NULL, point.padding = 0, force = 1, force_pull = 1, max.time = .5, max.iter = 10000L, max.overlaps = 10L, direction = c('both', 'y', 'x'), ... ) { - if (!missing(pos)) stop("Not yet implemented") - if (!missing(offset)) stop("Not yet implemented") + # like in text.default + if (!missing(y) && (is.character(y) || is.expression(y))) { + labels = y + y = NULL + } + xy = xy.coords(x, y, recycle = TRUE, setLab = FALSE) direction = match.arg(direction) @@ -56,11 +96,11 @@ text_repel = function( } repel = repel_boxes2( - data_points = cbind(x, y), + data_points = cbind(xy$x, xy$y), point_size = strheight('m', cex = cex, font = font, vfont = vfont), point_padding_x = point.padding, point_padding_y = point.padding, - boxes = get_boxes(x, y, labels, adj, pos, offset, vfont, cex, font), + boxes = get_boxes(xy$x, xy$y, labels, adj, pos, offset, vfont, cex, font), xlim = lims[1:2], ylim = lims[3:4], hjust = adj[1L], @@ -74,7 +114,7 @@ text_repel = function( ) text(repel$x, repel$y, labels, adj = adj, pos = pos, offset = offset, - vfont = vfont, cex = cex, col = col, font = font) + vfont = vfont, cex = cex, col = col, font = font, ...) segments(x, y, repel$x, repel$y) } From 31ede8a5099cf49e4c2d4f2fe3c2ac54826f6aa0 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 8 May 2020 11:34:14 +0800 Subject: [PATCH 07/13] some bug fixes --- R/base-repel.R | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/R/base-repel.R b/R/base-repel.R index 146d604..76c56c8 100644 --- a/R/base-repel.R +++ b/R/base-repel.R @@ -63,6 +63,9 @@ text_repel = function( y = NULL } xy = xy.coords(x, y, recycle = TRUE, setLab = FALSE) + # duplicate so we can overwrite & still retain info to draw segments() + xx = xy$x + yy = xy$y direction = match.arg(direction) @@ -77,30 +80,32 @@ text_repel = function( if (length(adj) == 1L) adj[2L] = .5 if (anyNA(adj)) adj[is.na(adj)] = .5 } else { - pos = as.intger(pos) + pos = as.integer(pos) offset = offset * par('cxy') if (length(pos) > 1L) stop("'pos' must have length one") if (pos == 1L) { - y = y - offset + yy = y - offset adj = c(.5, .5) } else if (pos == 2L) { - x = x - offset + xx = x - offset adj = c(1, 0) } else if (pos == 3L) { - y = y + offset + yy = y + offset adj = c(.5, 0) } else if (pos == 4L) { - x = x + offset + xx = x + offset adj = c(0, 0) } else stop("Invalid value for 'pos' [",pos,"]; valid values are 1,2,3,4") } + lims = par('usr') + repel = repel_boxes2( - data_points = cbind(xy$x, xy$y), + data_points = cbind(xx, yy), point_size = strheight('m', cex = cex, font = font, vfont = vfont), point_padding_x = point.padding, point_padding_y = point.padding, - boxes = get_boxes(xy$x, xy$y, labels, adj, pos, offset, vfont, cex, font), + boxes = get_boxes(xx, yy, labels, adj, pos, offset, vfont, cex, font), xlim = lims[1:2], ylim = lims[3:4], hjust = adj[1L], From 76be157cfe5c1e713408ed753088e43e5135366b Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 8 May 2020 11:34:42 +0800 Subject: [PATCH 08/13] tests of defaults, adj, pos[+offset], vfont --- test-base-plots.R | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 test-base-plots.R diff --git a/test-base-plots.R b/test-base-plots.R new file mode 100644 index 0000000..00be2e4 --- /dev/null +++ b/test-base-plots.R @@ -0,0 +1,65 @@ +x = mtcars$wt +y = mtcars$mpg +labels = rownames(mtcars) + +repel_boxes2 = ggrepel:::repel_boxes2 + +# ---- DEFAULTS ---- +par(mfrow = 1:2) +plot(x, y, main = 'text()') +text(x, y, labels) + +plot(x, y, main = 'repel_text()') +text_repel(x, y, labels) + +# ---- ADJ ---- +par(mfrow = c(3L, 3L), mar = c(0, 0, 0, 0)) +for (xadj in c(0, .5, 1)) { + for (yadj in c(0, .5, 1)) { + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + mtext(side = 3L, line = -1, sprintf('xadj=%.1f | yadj=%.1f', xadj, yadj)) + text(x, y, labels, adj = c(xadj, yadj), col = 'gray') + text_repel(x, y, labels, adj = c(xadj, yadj)) + } +} + +# ---- POS ---- +par(mfrow = c(2L, 2L)) +for (pos in 1:4) { + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + mtext(side = 3L, line = -1, sprintf('pos=%d', pos)) + text(x, y, labels, pos = pos, col = 'gray') + text_repel(x, y, labels, pos = pos) +} + +# ---- POS WITH OFFSET ---- +par(mfrow = 3:4) +for (offset in c(0, .5, 1)) { + for (pos in 1:4) { + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + mtext(side = 3L, line = -1, sprintf('pos=%d | offset=%.1f', pos, offset)) + text(x, y, labels, pos = pos, offset = offset, col = 'gray') + text_repel(x, y, labels, pos = pos, offset = offset) + } +} + +# --- VFONT --- +par(mfrow = c(3L, 3L), mar = c(0, 0, 0, 0)) +for (ii in sample(nrow(Hershey$allowed), 9L)) { + vfont = c( + Hershey$typeface[Hershey$allowed[ii, 1L]], + Hershey$fontindex[Hershey$allowed[ii, 2L]] + ) + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + mtext(side = 3L, line = -1, sprintf('vfont=[%s,%s]', vfont[1L], vfont[2L])) + text(x, y, labels, vfont = vfont, col = 'gray') + text_repel(x, y, labels, vfont = vfont) +} + + +par(ps = 20) +par(mfrow = 1:2) From a87089da23e51a57f92ac73c7f89a34c477d668f Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 8 May 2020 15:19:13 +0800 Subject: [PATCH 09/13] more tests --- test-base-plots.R | 55 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/test-base-plots.R b/test-base-plots.R index 00be2e4..bf7978c 100644 --- a/test-base-plots.R +++ b/test-base-plots.R @@ -60,6 +60,57 @@ for (ii in sample(nrow(Hershey$allowed), 9L)) { text_repel(x, y, labels, vfont = vfont) } +# ---- CEX ---- +par(mfrow = c(3L, 3L), mar = c(0, 0, 0, 0)) +for (cex in c(.5, .6, .8, .9, 1, 1.1, 1.25, 1.33, 2, 5)) { + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + mtext(side = 3L, line = -1, sprintf('cex=%.2f', cex)) + text(x, y, labels, cex = cex, col = 'gray') + text_repel(x, y, labels, cex = cex) +} -par(ps = 20) -par(mfrow = 1:2) +# ---- CEX AS VECTOR ---- +par(mfrow = c(1L, 1L)) +plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') +box() +cex = runif(length(x), .5, 1.5) +text(x, y, labels, cex = cex, col = 'gray') +text_repel(x, y, labels, cex = cex) + +# ---- FONT ---- +## per src/library/graphics/src/plot.c:FixupFont, font +## can be 1,2,3,4,5 on Unix, up to 32 on Windows +par(mfrow = c(2L, 2L), mar = c(0, 0, 0, 0)) +for (font in 1:4) { + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + text(x, y, labels, font = font, col = 'gray') + text_repel(x, y, labels, font = font) +} + +# ---- FONT AS VECTOR ---- +par(mfrow = c(1L, 1L)) +plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') +box() +font = sample(1:4, length(x), replace = TRUE) +text(x, y, labels, font = font, col = 'gray') +text_repel(x, y, labels, font = font) + +# ---- PAR(PS) ---- + +# ---- POINT.PADDING ---- + +# ---- FORCE ---- + +# ---- FORCE_PULL ---- + +# ---- MAX.TIME ---- + +# ---- MAX.ITER ---- + +# ---- MAX.OVERLAPS ---- + +# ---- DIRECTION ---- + +# ---- ERRORS ---- From f75407044935b54cc050e5d88fc1195c1aa8fab3 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 8 May 2020 17:50:18 +0800 Subject: [PATCH 10/13] error for srt; tests for ps,point.padding,force&force_pull --- R/base-repel.R | 1 + test-base-plots.R | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/R/base-repel.R b/R/base-repel.R index 76c56c8..b9f3f1f 100644 --- a/R/base-repel.R +++ b/R/base-repel.R @@ -57,6 +57,7 @@ text_repel = function( max.time = .5, max.iter = 10000L, max.overlaps = 10L, direction = c('both', 'y', 'x'), ... ) { + if ('srt' %in% names(list(...))) stop("'srt' not yet supported") # like in text.default if (!missing(y) && (is.character(y) || is.expression(y))) { labels = y diff --git a/test-base-plots.R b/test-base-plots.R index bf7978c..8df79e3 100644 --- a/test-base-plots.R +++ b/test-base-plots.R @@ -85,6 +85,7 @@ par(mfrow = c(2L, 2L), mar = c(0, 0, 0, 0)) for (font in 1:4) { plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') box() + mtext(side = 3L, line = -1, sprintf('font=%d', font)) text(x, y, labels, font = font, col = 'gray') text_repel(x, y, labels, font = font) } @@ -98,12 +99,39 @@ text(x, y, labels, font = font, col = 'gray') text_repel(x, y, labels, font = font) # ---- PAR(PS) ---- +par(mfrow = c(2L, 2L), mar = c(0, 0, 0, 0)) +old = par('ps') +for (ps in c(8, 12, 18, 24)) { + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + mtext(side = 3L, line = -1, sprintf('ps=%d', ps)) + par(ps = ps) + text(x, y, labels, col = 'gray') + text_repel(x, y, labels) +} +par(ps = old) # ---- POINT.PADDING ---- +par(mfrow = c(2L, 2L), mar = c(0, 0, 0, 0)) +for (padding in c(0, .5, 1, 2)) { + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + mtext(side = 3L, line = -1, sprintf('point.padding=%.1f', padding)) + text(x, y, labels, col = 'gray') + text_repel(x, y, labels, point.padding = padding) +} -# ---- FORCE ---- - -# ---- FORCE_PULL ---- +# ---- FORCE, FORCE_PULL---- +par(mfrow = c(3L, 3L), mar = c(0, 0, 0, 0)) +for (force in c(.5, 1, 5)) { + for (force_pull in c(.5, 1, 5)) { + plot(x, y, axes = FALSE, main = '', xlab = '', ylab = '') + box() + mtext(side = 3L, line = -1, sprintf('force=%.1f | force_pull=%.1f', force, force_pull)) + text(x, y, labels, col = 'gray') + text_repel(x, y, labels, force = force, force_pull = force_pull) + } +} # ---- MAX.TIME ---- From 8a55322ace2bbc5888a7fd2752b40bf9881a89ed Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 8 May 2020 17:53:49 +0800 Subject: [PATCH 11/13] rename file in prep for adding saved figures --- test-base-plots.R => test-base/test-base-plots.R | 4 ++++ 1 file changed, 4 insertions(+) rename test-base-plots.R => test-base/test-base-plots.R (97%) diff --git a/test-base-plots.R b/test-base/test-base-plots.R similarity index 97% rename from test-base-plots.R rename to test-base/test-base-plots.R index 8df79e3..bd94add 100644 --- a/test-base-plots.R +++ b/test-base/test-base-plots.R @@ -3,8 +3,12 @@ y = mtcars$mpg labels = rownames(mtcars) repel_boxes2 = ggrepel:::repel_boxes2 +open_pdf = function(filename, dim) + pdf(filename, width = 7*dim[2L], height = 7*dim[1L]) # ---- DEFAULTS ---- +dim = 1:2 +open_pdf(' par(mfrow = 1:2) plot(x, y, main = 'text()') text(x, y, labels) From 3244eca89f08518d44b2a7269f93d4301434b2cd Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 8 May 2020 20:04:06 +0800 Subject: [PATCH 12/13] tracking images --- test-base/figures/adj.pdf | Bin 0 -> 29409 bytes test-base/figures/cex.pdf | Bin 0 -> 32951 bytes test-base/figures/cex_vector.pdf | Bin 0 -> 7491 bytes test-base/figures/defaults.pdf | Bin 0 -> 9614 bytes test-base/figures/font.pdf | Bin 0 -> 15880 bytes test-base/figures/font_vector.pdf | Bin 0 -> 7851 bytes test-base/figures/force.pdf | Bin 0 -> 27692 bytes test-base/figures/offset.pdf | Bin 0 -> 37630 bytes test-base/figures/point_padding.pdf | Bin 0 -> 14794 bytes test-base/figures/pos.pdf | Bin 0 -> 15680 bytes test-base/figures/ps.pdf | Bin 0 -> 15558 bytes test-base/figures/vfont.pdf | Bin 0 -> 758070 bytes test-base/test-base-plots.R | 58 +++++++++++++++++++--------- 13 files changed, 40 insertions(+), 18 deletions(-) create mode 100644 test-base/figures/adj.pdf create mode 100644 test-base/figures/cex.pdf create mode 100644 test-base/figures/cex_vector.pdf create mode 100644 test-base/figures/defaults.pdf create mode 100644 test-base/figures/font.pdf create mode 100644 test-base/figures/font_vector.pdf create mode 100644 test-base/figures/force.pdf create mode 100644 test-base/figures/offset.pdf create mode 100644 test-base/figures/point_padding.pdf create mode 100644 test-base/figures/pos.pdf create mode 100644 test-base/figures/ps.pdf create mode 100644 test-base/figures/vfont.pdf diff --git a/test-base/figures/adj.pdf b/test-base/figures/adj.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3b8532233cb1f2190c3ef10d676e6b23f9b29ee0 GIT binary patch literal 29409 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

)iw-^`(GxiLSSKng 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 OauNW3esz5f!2bbw-dDc> literal 0 HcmV?d00001 diff --git a/test-base/figures/defaults.pdf b/test-base/figures/defaults.pdf new file mode 100644 index 0000000000000000000000000000000000000000..342887a17737847ec434389e70ec0e5556c87e9c GIT binary patch literal 9614 zcmb8V2UL?=(>4s!q$(g%qy&^EB_VVvB2APYK)QesItheCYCw8NK$_A;`k^S&LI(lq zNJo&~k*0J|zdN4tKJR({|6A+JTFK&`y=Twd*X+HSxz=#&D60yI2#Zm02P_6G1q=p^ zn4u^{KoAh}i6e!qECpBz1-C*wAQ8$|XgG*Z`3@8Ug+Rn1QoyeW6v|Hl)j>Mp>f%U}xwH|)L-*9Na5q4;Mkhr**2nej|;EV>|0Icc^fTIkzM%uvf ze!HUq%v>lu)2qxLxO3OUH+?r8jh98&QOLyJeE90EBFe}%Y@2CH$+I!sloYw+;S9luda#7yEeZ02sefkCE|1Ijc z`E*x1`Fj+-a~t*H9OGK^B}9L(g;vw)(mSDDt)msnleO~~8DFuOcY;2STaS{jp5anf z2HX~_ld1GAlt>&cOpTAIjv`@(lXt?z-*7&6V!!G+j4wbS0Bdv9xns z6KcjDk)~(w+9wr$Jv2EV!0KulTa!_!(p@lAR1lH$N5YnoWcM9DE<7J$h;(*$T6p#e zf^N;J)Vx-6eU2-oR(YbUA4~3IQA2gpcp~HcNqY4v4cnY&>|xcm!nTxMh@wBIa;7zx zwi61c7>{?lAsK=W*l?!rDD9B!6&D74PHuYBa1iVOqVT*`=XIx#z!uG?RzaaO z*zy(I({YW=V{sbuypIw!*R@&>9dQ*p=`ODetIn?1edxgH&3sO&CQYTmShy!OUFIEL z3_MJ^SHQ!NH_viw$?oKtdbYIVFVKnp!0LB!r5I!W7izf#F?O zCZjY(tn^uLr5AGxH+~`xtRs&}1zB)g-%PrGk?XB-EzPV=&0gz}OOx#_i;Hc9c05Y# z_1cp$ZrC{W8M*A_)g9S_QkjbY5*Ev-b!^O@9nz`v;gr|_PnbhyXc^2V&6JY2-0B9- zZF@jMchm$MWw!X_3qN9;Qq!ac!yHzfMPRBti*cfm$*@IiQTXI<>#T%GXpJ%SR0}T+ z9a-bvi@$W4#`V>FpUmplYpI^V-#nut+-r`ZJEhjhBQour&Wg0XVcNd-HPr??51>4Ef)9_ zRB0wnMw$rhq-~^WB{E6f?Df`C^6sT`aRf$s>8IzKbkaEZ7X4np@r*r53k|zOp8ePP zgO(VB6kir&D#r;`pNJGF{60S#1?q78b{e-i~sGx=6=}vKzf8*~U=8 z_`Xd@Pt!?jtV*DhBCltlE|EUL$ik zh#22+y5e|M<4#N9;KXY|7uy!gR$~euUX3d!!OYclE-nwqXX*F*bR6D1Z}EN@XW)1{ zI{1f9WB3=H66L)!yQ~jG_G-w;r1mhsR>`CXUTaKZaM3&z^rf3?J>B}{PWfrYk8C4O zWAuT4!1Sz!^bO@+eQ`{>?08$=`1YrY%;yHe!9!DK>vZq;2Z~u`+bvClJ{85CzG3^Z z8((gv@#(`ew~mtMJ*Th&oCf~FVr`O-L@aOR{<%})o!yXIsbp7<;%d!zMGwxvwy|%QkW07!{y`xXM=jLBKEDszf z+%`EHICnfCvT0%^2yzKIB$MGDh}Jr#qHnk^FdMD^*)6Y-o!%xX4SI85CFqc=pYH8L zVo7)w*NT0@W1XG~Z_XH{)CA0mYa6vka-tw}*j+h|?mIIn!)mLXJ&WiNmTnwMYT=Q& zR_EA}+W6RC=hxk04@cB(onLa8VQpg;5eIEyXSOPCdthQI7DTsBiRgCiqE*c!);dV6 z5NLp2Dzg~Nb*eI{Ivb`1Yv8LKAS|`~oGJ*%bdZ!)#Q0$L2>!ki7up1T;dXR5)NXpJXLY=rd=cTn`D%QUtHzZDl9D2*2 zC+XM6V=%k1lMmeN+X6zXoV@!&Cg|L8vX2tFGbX;kB}Zq@QR7QddxVklfs`*4*`x={ zCqcs*&`lT@NH;8s-j+_YJ} z<8(6;*O}8Mm_#0V-Nj>4>$Co7UVJQ1IU&8~m_ZMIjOEz|?9;fjsqO^cSNw(iwRfWT zIoL-fK=iW2Rj!?6Vy%Uto10JTQbS@Dm@~xEDC9zh!yhQ<6cy-f{S2XU`j}Txf(^2-IQ5e&lMA4o?!F9}mw?Uxciyo1NCGVfpln?JRx= zuYHkScveHwbL`wUgS@ZeEf^wiHQgVB?MqYNNXuFajwiI$P2^SR?*CjJw4;1i{`@kX`&;4i!0m#s z78eS)j(%=@)4sxy84HOW4AtKg^c0KRpUb=#N33$gk!%uN-1Vo1o0ncV#!L zj3dP;mbot(f^Cm9-j>xa<0#*|bh6>5S|KRbByc0*K5^jGrEx8m48e9)nI6@)4-R2c zs4VAn4y!j0m?brCCVYFkKSle9?#t-jJ_{n|MH2Y=+ct+`)tZ8-9$NEvPHkimaH#Yg5Q9A2Eh&b41*+hQOeWmDUmizH-_2=fok)O1Gtv{}=xyc{b zAjhR#Te(DX9hQHqe(ltwwr8G7`p5LSY3f9C!}-GJaq&s{C)3^UMb|XPXExR(Q?zUA zvA(`YicB@~*ap>w)@0W!Hx^F&vyf%6Q#wWKlTZ5=i(VkD)`?<&OexBRY*Q5RLVoO> z5M-@~BP4q5U>8hV$6ZWa2UV)Y_m!s*?6X*(#&mxVFCQQ5FCo8I&ojqwOw7BO_`9E3 zSY&`LTs>1R?tAP^r=453^)dKdiLjhEU%vRZ^KIYibk15{LhcshY?KZ3=NXljJ=2}k z&$W&S_VQoo@1A|A0IKWnex6&C8aC<;{l9HkJ=)TzhcmW$csr5az!>{;Z~5)`xMfAT7rbB7V>q@bAk^ik;SvV;-B!jk1h1#^;=S0kll z*+5G4{naLP=z+@>P~zDmFW2lcX#{_8l`Fv}EcV05Ya$GT)To_~p+iRij^b-Z|He45 zn41*)rzE3}>aD1gzce;_AJZt9cjokX1>EQ)z$7)YJ;PCGED~$iy`WOcO8Cte2L2TDU&dHauM!cE0p(ZZ5d00V~cr*61If>Ai@CEFt5pz6^h0!$GyiR@21 ziLybs#C!99M0yC2U<@jx18|NTM56|+VF9>Ah)xQW?k?W};U=tvbQ6}v)lW1k-chV> zBSQeBpwEmMuCEhd4EmyZbr?05WdCvPaw;50{24k;x(S`*nqw_=iUo>=H9VsB=S3AN zR62%VHu!s7%o)nDq??LYh(_UwE&!_AU1$d<=yWyaB{JR)?_6fexhF4_W-K4my)P3d z+`X^$M*YzW9)NcqTuVcy&o^Kl{m#=e@u#+Ro%pQY-GUTAleiD&L-iTvPc)jhUnnc1 zlcEba0-&OiqF`z}tzf>Iw!(tXaNR9f`sSGdSc*j?r0mEFOIkT0K{%H5Dx%S``DhM& zK!HJTl)gEsOVKuf!QAaZno;pCp*fN*A$q{jfvpbbOQ!5H3WqML&0<$x=IpZ1I3f%) z9N2GHA-!nw_wZ`!QFxO|=ARf0*Zjtyw+JE!SZg~-zh}Bij zMwHE;+$y{5@i}mOYQ6;E?r_-wwaCBVGhH6TyT<)8EL60(S1P#wwkf){>{794S&0HK zX<5m9eHw7)YK50{i1XE3geqNXg@M=k!dbssOL8ORc!GQyK$WIX}c7tFx$=dCt zjJ1TwlNmlZ+nIChG?G`~Qt1MoTQyy7ZEaWus;vgNcXkSjcwpm@bVo_i{Fv$WsTY=ILKoqMKJK+g%p;2KoOkXh71!O7(8*$ z2IrBk_e%LTUNa}f0AW1?!up)%K)kDz@r5738H|Rg#&L>uy`)WTAiLb;H4)Z8?dGcy zO|oq8(p6V=4D)DSHQBm4P>$V%f8pPW$MgdOdqv5TWM^%C_Gtvc&ZuzXUZZZ5`a__k=Z5^wnn$h zF`5fg6>SHQ=*`{MrlFST62i7t-CY1i?wd`raS4XG5|H=0GIOL>P$6lv@5>jMZl&)@4Tr!$J30Z+O0Wm!XVk)75Es>RRo@A}@O~G+kwnr-+nzNST z&9Gax+rL?gV+^Af?Qv}H%z*`Nz_urxOr7sM_vGi-^-L|$`OKuo3DeFQ^*JMNzWDrx3Bt+7x|Mw|kh;<~trwQ1xfYIVexsPv#pO@{xbc<`L3| z++JXwT~c*=IhwT~x8I<67_hVtPV|7htg&4#jVEoB3106fXo`C7^W9ejQr@;4wB1eg zoxR+@w&_Q6R=^sz?`kW?%&)wMfH3&c-sMJft#S`bA|e>QOaFC5bPsD!ED*d@&;ES3BraUF^Ehv9@qAOYd2x<2mOV3SxBb;g z?>^RZdM9QN`|g1}*<4t;+W}D@TU6{|=W&%Phiy4sZ^`^Q%Q!Jz=C%)3x~Y80c%1QP z$b>-qIchs{_r=mTPhX2pi_oVJIf*F_1)o{Wp4xT9#HJhGKUukM&j~I5RmJI7_oyMU z^(b|dlGcxe5*qNWiN%6(!LauyDwt!|>}t@^`h-_`&|bT!G05*yoj>UZ@X{^Y=&Zmm zk3;uI%$N&j9zWY}_YwNx?D3-U*g(XOMA#&7KdSQ3u;pYS?`eA!zk%Fi>ZLIF{zs?7Wo* zjh^OSKa=Q3UK*N;yuxtuh}=*e_o8Ydg}6-ZFhNr zde_V0r2O47aKHsmU7whF(IGZQ{iS+m7C&hy>G$yI5{Bk1AyLi82SVW%dC8Y@$Lh?8 zf;#8S9~+&NhRp`i!AXjyd8Z^KjVu$`jqM)|^Trzz`Xw9jz*exMKT=4GFJDu56*lcS zX{Kpm`^v-~p6WE(tD#3(TC?ezr$I!)CU7StFS7ekKUA1IA71C^5?7Mgt5FYsGL~4a z$LlIqt?8`Brk*S?9KITTU>PFRB!5cQ6wLn$;F$lSYyV=K@nrI!WbfZ>^PeO$Slz+K z9b^i^lgluWIY2@qF#wqiu)vyd8wV>zq$kJ}0*r}3AW|T4h?x0*5Yl);`ELRl;JvN& z;AoI37+~H36L3$oIR#i1AfrLDvS3vxu)uE%U{z6&2%d=l&1{2JJkj^{(0C4BRu;c9 zVBQ&t(sQ-4{w)E!!|p4B#Q&cDKU_Fogg0#pexRhJXyp#K0ZHIzng7kM@&Czt<9+&v_s&T6(AS%~9yZu0*{G9nH8OF? z$sTq|jk-}SUih{M`PGLlaRgiv%KEO#y7Bp!p?veta+TuWaz%y^>b~6~W>y|`bG>#W z`GHL-^IU`1ZhzVw$FZMNR^#9oyIt%!jv($Lh@?%!i2NBhm*UC!8>nEz0US9H@jCOuWf5O;^qXC_s-yXRe-AeE)E3wX)ON2ltHG1va$&?v0 zW4Dx?VLEq>c6VyEnC1ZF;Q*I$AoS4-_iuuxzDF&O+7+e9%ClB`<<`wQh^O zVX#r(AbszZj)6WCVY*ud;mkZ{dZ95d=%W?}2Q}BCI{F|qk})?IMJ8V|8?!E;2y6#0 zjIVjQFu&uHnUs>2g188|H1Uo4n_r|Q96wEd9PGcttjuxJeq`wPlA53*A6_+e7Utr> zKw!Q_s8jzVtltt$5c#eNLxXi=$N4^neOMH<6DXOPF;geZa^eTC@1AAR_$yiX4#Jwg z?5>XctS_d7tRC zKkC!V)Qt1Nz@J#dT8*C{uix^IwZ5+mt)NSA#=7US)uVp+QO?S>J^i#obsYB2l8%VNJZut)!@Si9um28&=3# z9J-lfyKcJ9hi1VMP%G7B>)O+uF?f^RgplXAnpDs_lT=!2OI?l)W^C==gGzA-2iCMC zxf1za-3iuiPnoARqPQDSK>O?}?VZTyjwO9LN5Kqb^b{ zzTl(jHBuE75gm<0${r4ekj2-@IgfHAa*K7zbTSI%M-4{#94QWIHC3Hn_kS8#CqN6{ zVa|vWRyE8{8)93pT&F#dI%6OW%CU|XiDmNFVC7+`yj00td1EA2I)u41+A9C8(I0ol zS+^poJ5Uu*oJFcBe6IS?`H;xOVuNljqFt+{EX-uJ!UaAU%$vCKx*EFD*D^QI&0gJ& zzS8l1uXi7QqUw9a@ABQ)EKWZ9X!5dPHO1RjLOBUTs#5B;>Yn#*(H(|seQ zfvmEuHY;}%x2~G)EeZaBTbwSO+q@ZEU$`1UFS=E2uApR%HD(nNJXxG`yv@4Vw~cNS z^X*-GBrwW{zHO%KnICQ_rhlMs_D5>DQI4mwo7#R6-Q#Yxh|&+bCVBd~X#I`Q;rCF3 zDOG8GX(g{pRMa<;mHXEOJHi*07IY)|&iU;4to4J7wc&boqnJ_EP2)`|Y9-Npk|CHw z-g~5d(0hJ{$jFR`?;mD9jOlS>;AhLZ@rh`C;{bYQb%r^UF%UA)HfY-98Iu?jC@vpc zE%YkfAA30Zc}#V5wn%goJ32C2Q{+)JH=^K>>JaR-?D+MQRLMS?#wE6wbtgSRI&5ub zJXpM6?53EZ{muyMQ2O}r__vXs;o{*txrh2`W!pI!#f?hm!AEas47xP$XICn%y&13$ zrD%T;|_5_I8pCTZ(Z*Y?``kn1M)M$AGdz6oi(26k=`NYBqbp& zC9R>}4;5^`)@~m9BeXmwI_62V1QUi?4*E!x1~MRt5N~o)lyH+YwjH)a^mymM?++6ix~_FyF^V+mh6dfpi!p&%hjp?bkA zV`ifcQ?K3BA3Z{fPDVlG2w#6V;tZpUu9R&DE8xJsrd%>=0cw z)7Bm%nT{M!np>MDeg*~Q27S!ww;KM`BJ%0&_&#Y=Cxx|(ZH9-UjF)uj(>tpN<5R81 zUwtP}85#4{U#Um+=6ZF0Kl#qG7E`xbhceqT&qGkvDAzP1U>@cku|7fPL|3p^GVj0W z3N9$JD_*-dX!m&hF;_WF`Gm9G(ZeHtvvvr(UC6 z^9TtXdN#D3bKDl)o*aVZh$X*5Sx)ZHWJRxg^;7dRoMm@lGD$gCBUdliuJTLe2d}+z z8FJ}gr{!97d3GgssacmkG3NAk(Fp3$RD$XnMHry%~Hj!)UMD_<%1y?yZ z`SZOO76kj&3EP@$$3Ob?>h;@0zb(@!hDenTNr_tL!s+nOe3MeO4mGj_ z>H-hvkgJHMlcavbBn#~4g!k}@z8vSlM}3bL#VZRi1D~#Pg?PU9~{a%>Q^NQH_Si2K*7qY6{H}sok zv(jTp!`$1kTkP^Ip6_eA@(PxGdUuaGM&us3o2__Gk+(&>rq9w^%}SR~!fbAAERR?> zs(bIIN65LCf*X)~&O=k**L(*vHjcmE^_o4rcuP6J82i}9{3~wRwaC52FMEmXoZ}8D z8>vhfYZwkJW4^zl#UU3%>jK#Pj08_=}eX9d`wOnVt77PkA(ZUO*uXGU7kY4lYK@(<};`Cw~p^ zz<1G;2R{s%%WWU0H0b)f&kJq2{Hjm&pck#%eY-1gH`QP zrQOp1q@fglHF>BYfPM-G1kmMyPh0=z$|cw}1ky>|kpP2Rb|OtsABwF>$bq z0|Mg?l9m9wVUTFJGu#$UAtELQwm|~TDDLhKAg~?E>M4-pT3KW8sjjsH${OQh>kRh< zfzb}mHh{>*${K}4fWS{saQs9-)5_W!XcnOW+c*HG+#TFOU||FjZ3DLjflQ+3cz}p zC+Oc@FL)tPZfIG#04@QA!f#yuoTCPJehNoBSX)tm|HcJ`NAy3tVtyAB{|^R$q#qCb zzYGW|BAspiFIGHJa9awX3W8EV{`r6;#KlF$LAIcOWKf{6!GA!Ae`F#OK;`wnW#ZBh zpnUnaObU3h|1Fac5dnIH{w)*xFI@=qzvn@q(*LC^B_#&bVE=nPX^1pX`Ta{KA`Mh_ zf6LG)D+gyd3TT=Ff%P1`;Q$68@B@S`5~vaJkpRPxNHhrF%=9}d?r19%`ZrqAP-zJY LZf+HARf_)ut%jX3 literal 0 HcmV?d00001 diff --git a/test-base/figures/font.pdf b/test-base/figures/font.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d980ce1fa5ab4ada90f31d5a9b054d0015a33c6c GIT binary patch literal 15880 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