Polygon label outside

polygon_label_outside(
  sp,
  which_sp = NULL,
  center = NULL,
  distance = NULL,
  distance_fraction = 0.05,
  center_method = c("label", "bbox"),
  vector_method = c("label", "farthest"),
  segment_method = c("nearest", "vector"),
  offset_fraction = c(0, -0.05),
  min_degrees = 15,
  sp_buffer = 0,
  relative = TRUE,
  font_cex = 1,
  seed = 1,
  debug = FALSE,
  verbose = FALSE,
  ...
)

Arguments

sp

sp::SpatialPolygonsDataFrame or sp::SpatialPolygons object, which may contain multiple polygons.

which_sp

integer or NULL; when which_sp contains one or more integer values, they refer to polygons in sp, and each will be analyzed in sequence. When which_sp=NULL then all the polygons in sp will be analyzed in sequence.

center

numeric vector or matrix with two values indicating the center position. When center=NULL then the center is determined using a method defined by center_method.

distance

numeric value indicating the absolute coordinate distance away from the perimiter of sp to place labels. This value is effectively the same as buffer used in rgeos::gBuffer(). A vector of values can be provided, to apply to each polygon in which_sp. When distance=NULL the distance_fraction is used.

distance_fraction

numeric which defines distance as a fraction of the x-axis and y-axis range. Note that distance_fraction is only used when distance=NULL.

center_method

character string indicating the method to determine the center:

  • "label" uses the mean x,y coordinate of all the polygon label positions;

  • "bbox" uses the mean x,y coordinate of the bounding box that encompasses sp.

The effect is to extend outer labels radially around this center point. Using the mean label position with center_method="label" is helpful because it ensures labels are extended in all directions even when most labels are in one upper or lower section of the sp polygons.

vector_method

character string indicating the point to draw a vector from the center position for each polygon:

  • "farthest" chooses the farthest point in each polygon from the center point;

  • "label" uses the position of the label.

Using vector_method="farthest" works well to label the outer edge of each polygon. Using vector_method="label" works well when the polygon label is set based upon the interior open area of the polygon.

segment_method

character string indicating how to draw the line segment from the outside label back to the polygon:

  • "vector" defines the line segment by extending the line used by vector_method along the same direction;

  • "nearest" defines a new line to the nearest point on the polygon.

min_degrees

numeric value passed to spread_degrees() with the minimum angle in degrees for labels to be placed around the outside of a polygon.

sp_buffer

numeric value passed to polygon_label_segment() which defines a buffer when determining the line segment position at each polygon in which_sp. A negative value is recommended, which will create a buffer inside the polygon, causing the line segment to end slightly inside each polygon. This effect may be preferred when more than one polygon boundary is overlapping. An example value sp_buffer=0.1. Note that sp_buffer is applied to each polygon in which_sp and a vector of values can be provided.

seed

numeric value passed to set.seed() to ensure reproducible results, or seed=NULL to enable random results.

debug

logical indicating whether to plot the results using base R graphics. When debug=2 it will also add some visual decorations showing the center point, the points determined by polygon boundaries.

verbose

logical indicating whether to print verbose output.

...

additional arguments are ignored.

Details

This function takes a sp::SpatialPolygons object and determines an appropriate position for one or more labels outside the full polygon. For each label two coordinates are returned, one for the label and one for a line segment that is drawn to its relevant polygon border.

The expected input is sp::SpatialPolygonsDataFrame which contains multiple polygons, and one of the polygons should be labeled. However, the function should also work with sp::SpatialPolygons.

This function differs from some other functions in that it places multiple labels in context of each other, to minimize overlapping labels. It also positions labels outside the full set of polygons, even when labeling one of the polygons in the input sp. For example polygon_label_outside(sp, which_sp=2) will generate a label position for the second polygon in sp and position it outside the full polygon set.

To combine multiple sp::SpatialPolygons objects, use sp::rbind(..., makeUniqueIDs=TRUE). To combine sp::SpatialPolygonsDataFrame with another spatial object, convert to generic sp::SpatialPolygons first using sp::geometry() then apply sp::rbind().

The basic workflow:

  1. A center point is either provided, or determined using the polygons in sp using the center_method.

  2. For each polygon in which_sp a directional vector is defined using vector_method, which effectively draws a line from the center through the chosen point for each polygon. The end result is an angle for each label.

    • vector_method="farthest" chooses the farthest point from the center for each polygon.

    • vector_method="label" chooses the best polygon label position for each polygon, using sp_polylabelr() which calls polylabelr::poi().

  3. The chosen label angles are spread using spread_degrees() to ensure the angles are at least min_degrees apart from each other. Groups of labels are spaced around the mean angle for each set of labels that are too close together. This step defines the label position outside the full sp polygon.

  4. The last step is to define a line segment from the outer label position back to the corresponding polygon boundary, using polygon_label_segment(). This step has two approaches with subtle differences:

    • segment_method="vector" draws the line segment toward the reference coordinate for each polygon, as defined by vector_method. This method visually draws the line segment toward where a label might be expected inside the polygon, which may be visually most intuitive. However, if the label angles have been changed by spread_degrees() then sometimes this point is not the closest or most intuitive for the label.

    • segment_method="nearest" draws the line segment toward the nearest polygon coordinate to the label position. Depending upon the polygon shape, the nearest point may or may not be preferred.

Limitations:

  • This method does not limit labels within a plot boundary, therefore a plot may need to be re-drawn such that labels will fit inside the plot x-axis and y-axis ranges. When using venndir() the argument expand_fraction is intended for this purpose, for example try venndir(..., expand_fraction=0.2).

  • This method does not detect label size, nor label overlaps, when positioning labels around the plot. For example, one may ideally want larger min_degrees angles at the top and bottom, but smaller min_degrees on the left and right, to accommodate the flow of text. A workaround may be to use a vector of distance or distance_fraction values to alter the distance of certain labels after visual review.

Examples

setlist <- list(A=letters, B=sample(letters, 4));
C <- sample(setdiff(letters, setlist$B), 4);
setlist$C <- C;

vo <- venndir(setlist, proportional=FALSE, expand_fraction=0.2);
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text        x        y vjust hjust halign rot padding r r_unit
#> 5         A&B    4 4.999106 6.748495   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x        y vjust hjust halign rot padding r r_unit
#> 6         A&C    4 3.773922 4.632696   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text       x        y vjust hjust halign rot padding r r_unit
#> 1           A **A** 1.90869 6.955722   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set text        x        y vjust hjust halign rot padding r r_unit
#> 4           A   18 3.019531 6.238855   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       1           pt   4
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 2           B **B** 8.091055 6.956222   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** 5.003101 1.700411   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
segment1 <- polygon_label_outside(sp=vo$venn_spdf, sp_buffer=-0.1, debug=TRUE)


# example drawing labels manually
vo <- venndir(setlist, proportional=FALSE, expand_fraction=0.2);
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text        x        y vjust hjust halign rot padding r r_unit
#> 5         A&B    4 4.999106 6.748495   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x        y vjust hjust halign rot padding r r_unit
#> 6         A&C    4 3.773922 4.632696   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text       x        y vjust hjust halign rot padding r r_unit
#> 1           A **A** 1.90869 6.955722   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set text        x        y vjust hjust halign rot padding r r_unit
#> 4           A   18 3.019531 6.238855   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       1           pt   4
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 2           B **B** 8.091055 6.956222   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:06:58) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** 5.003101 1.700411   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
segment1 <- polygon_label_outside(sp=vo$venn_spdf, sp_buffer=-0.1)
for (i in seq_along(segment1)) {
lines(segment1[[i]], col=vo$venn_spdf$border[i], lwd=2)
text(
   x=segment1[[i]][2,1],
   y=segment1[[i]][2,2],
   labels=names(segment1)[i],
   adj=c(segment1[[i]][1,"adjx"],
      segment1[[i]][1,"adjy"])
   )
}
# an alternative is to use jamba::drawLabels()
jamba::drawLabels(txt=vo$venn_spdf$label[i],
   boxColor=vo$venn_spdf$color[i],
   labelCex=1.5,
   adjX=segment1[[i]][,"adjx"],
   adjY=segment1[[i]][,"adjy"],
   x=segment1[[i]][2,1], y=segment1[[i]][2,2])


D <- sample(letters, 4);
setlist$D <- D;
vo4 <- venndir(setlist, sets=1:4);
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x        y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 5.933488 1.768335   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text       x       y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.84112 5.80306   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text        x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 3.136693 2.329982   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 8         A&D    2 5.120438 0.9337739   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 8 #262626FF       14         NA       NA       1       1           pt   8
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 1           A **A** 0.1166635 4.570002   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text        x       y vjust hjust halign rot padding r r_unit
#> 5           A   16 1.685066 4.29172   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 2           B **B** 3.221462 8.312583   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** 7.053857 8.311838   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:06:59) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 10.13339 4.570171   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4
polygon_label_outside(vo4$venn_spdf, debug=TRUE, sp_buffer=-0.1)


par("xpd"=TRUE);
par("mfrow"=c(4,2));
st <- "nearest";
vo <- venndir(setlist, proportional=TRUE, seed=1,
   expand_fraction=0.2, do_plot=FALSE);
for (vm in c("farthest", "label")) {
for (cm in c("label", "bbox")) {
   for (st in c("vector", "nearest")) {
      plot(vo$venn_spdf, xlim=c(-5, 5))
      title(cex.main=0.8,
         line=1.6,
         main=paste0("vector_method:", vm,
            "\ncenter_method:", cm,
            "\nsegment_method:", st));
      segmentxy <- polygon_label_outside(sp=vo$venn_spdf,
         which_sp=2:length(vo$venn_spdf),
         sp_buffer=-0.1,
         center_method=cm,
         vector_method=vm,
         debug=TRUE)
   }
}
}

par("mfrow"=c(1,1))

par("mfrow"=c(1, 2));
st <- "nearest";
for (cm in c("label", "bbox")) {
for (vm in c("farthest", "label")) {
   for (st in c("vector", "nearest")) {
      set.seed(12);
      vo <- venndir(setlist, proportional=TRUE,
         expand_fraction=0.2);
      title(cex.main=1,
         main=paste0("vector_method:", vm,
            "\ncenter_method:", cm,
            "\nsegment_method:", st));
      segmentxy <- polygon_label_outside(sp=vo$venn_spdf,
         center_method=cm,
         vector_method=vm,
         debug=2)
   }
}
}

#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 1.013339 -0.2580648   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.030612 0.2289342   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.237139 1.239278   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.02682582 -0.6965299   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x         y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.593034 -1.013114   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -2.904726 -1.589289   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text          x       y vjust hjust halign rot padding r r_unit
#> 2           B **B** -0.2781953 3.08569     0   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.951586 2.509887     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 1.390146 2.702163     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4

#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 1.013339 -0.2580648   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.030612 0.2289342   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.237139 1.239278   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.02682582 -0.6965299   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x         y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.593034 -1.013114   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -2.904726 -1.589289   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text          x       y vjust hjust halign rot padding r r_unit
#> 2           B **B** -0.2781953 3.08569     0   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.951586 2.509887     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:00) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 1.390146 2.702163     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4

#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 1.013339 -0.2580648   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.030612 0.2289342   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.237139 1.239278   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.02682582 -0.6965299   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x         y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.593034 -1.013114   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -2.904726 -1.589289   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text          x       y vjust hjust halign rot padding r r_unit
#> 2           B **B** -0.2781953 3.08569     0   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.951586 2.509887     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 1.390146 2.702163     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4

#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 1.013339 -0.2580648   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.030612 0.2289342   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.237139 1.239278   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.02682582 -0.6965299   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x         y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.593034 -1.013114   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -2.904726 -1.589289   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text          x       y vjust hjust halign rot padding r r_unit
#> 2           B **B** -0.2781953 3.08569     0   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.951586 2.509887     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 1.390146 2.702163     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4

#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 1.013339 -0.2580648   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.030612 0.2289342   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.237139 1.239278   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.02682582 -0.6965299   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x         y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.593034 -1.013114   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -2.904726 -1.589289   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text          x       y vjust hjust halign rot padding r r_unit
#> 2           B **B** -0.2781953 3.08569     0   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.951586 2.509887     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:01) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 1.390146 2.702163     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4

#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 1.013339 -0.2580648   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.030612 0.2289342   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.237139 1.239278   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.02682582 -0.6965299   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x         y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.593034 -1.013114   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -2.904726 -1.589289   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text          x       y vjust hjust halign rot padding r r_unit
#> 2           B **B** -0.2781953 3.08569     0   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.951586 2.509887     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 1.390146 2.702163     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4

#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 1.013339 -0.2580648   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.030612 0.2289342   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.237139 1.239278   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.02682582 -0.6965299   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x         y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.593034 -1.013114   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -2.904726 -1.589289   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text          x       y vjust hjust halign rot padding r r_unit
#> 2           B **B** -0.2781953 3.08569     0   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.951586 2.509887     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 1.390146 2.702163     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4

#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text        x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 1.013339 -0.2580648   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 2.030612 0.2289342   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.237139 1.239278   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.02682582 -0.6965299   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x         y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.593034 -1.013114   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -2.904726 -1.589289   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text          x       y vjust hjust halign rot padding r r_unit
#> 2           B **B** -0.2781953 3.08569     0   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.951586 2.509887     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:02) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 4           D **D** 1.390146 2.702163     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4

vo <- venndir(setlist, proportional=TRUE);
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text         x           y vjust hjust halign rot padding r
#> 9       A&B&D    2 -1.190155 -0.03631255   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 9     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 9   9
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text         x          y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 -2.311179 0.08774424   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 1.644541 0.1547713   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text           x          y vjust hjust halign rot padding r
#> 8         A&D    2 -0.06924115 -0.1668882   0.5   0.5    0.5   0       3 3
#>   r_unit label_col fontsize border_col box_fill box_lty box_lwd padding_unit
#> 8     pt #262626FF       14         NA       NA       1       1           pt
#>   num
#> 8   8
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 5           A   16 0.2808884 1.825941   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text        x        y vjust hjust halign rot padding r r_unit
#> 1           A **A** 0.670684 3.086065   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 2           B **B** -3.171028 0.3651506     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text        x          y vjust hjust halign rot padding r r_unit
#> 3           C **C** 3.133002 -0.1430182   0.5     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 4           D **D** -2.985684 -1.124365     1     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4
segmentxy <- polygon_label_outside(sp=vo$venn_spdf, debug=2)


set.seed(1)
vo <- venndir(setlist, proportional=TRUE, expand_fraction=0.3);
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:9 
#>   overlap_set text         x          y vjust hjust halign rot padding r r_unit
#> 9       A&B&D    2 0.7551151 -0.3501513   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 9 #262626FF       14         NA       NA       1       1           pt   9
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:6 
#>   overlap_set text          x        y vjust hjust halign rot padding r r_unit
#> 6         A&B    2 0.08287535 0.555899   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 6 #262626FF       14         NA       NA       1       1           pt   6
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:7 
#>   overlap_set text         x        y vjust hjust halign rot padding r r_unit
#> 7         A&C    4 -1.046969 1.676951   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 7 #262626FF       14         NA       NA       1       1           pt   7
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:8 
#>   overlap_set text        x         y vjust hjust halign rot padding r r_unit
#> 8         A&D    2 1.470657 -1.222763   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 8 #262626FF       14         NA       NA       1       1           pt   8
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:5 
#>   overlap_set text         x          y vjust hjust halign rot padding r r_unit
#> 5           A   16 -1.937101 -0.6403962   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 5 #262626FF       14         NA       NA       1       1           pt   5
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:1 
#>   overlap_set  text         x         y vjust hjust halign rot padding r r_unit
#> 1           A **A** -3.542676 -1.041456   0.5   0.5    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 1 #262626FF       14         NA       NA       1       2           pt   1
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:2 
#>   overlap_set  text        x         y vjust hjust halign rot padding r r_unit
#> 2           B **B** 2.533295 0.6895298     0     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 2 #262626FF       14         NA       NA       1       2           pt   2
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:3 
#>   overlap_set  text         x        y vjust hjust halign rot padding r r_unit
#> 3           C **C** -1.302605 3.074536     0     1    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 3 #262626FF       14         NA       NA       1       2           pt   3
#> ##  (18:07:03) 07Jul2023:   draw_gridtext_groups(): grob_group_roundrect(),  k:4 
#>   overlap_set  text        x         y vjust hjust halign rot padding r r_unit
#> 4           D **D** 2.341993 -1.273083     1     0    0.5   0       3 3     pt
#>   label_col fontsize border_col box_fill box_lty box_lwd padding_unit num
#> 4 #262626FF       14         NA       NA       1       2           pt   4
segmentxy <- polygon_label_outside(sp=vo$venn_spdf,
   debug=TRUE, segment_method="nearest")
segmentxy <- polygon_label_outside(sp=vo$venn_spdf, 
   debug=TRUE, segment_method="vector")