This is a major milestone for eulerr. The 8.0.0 release introduces a complete rewrite of the underlying C++ codebase, now relying instead on the Rust library Eunoia, which is a library I have developed. Here are some of the highlights this brings:
nlm() method. The CMA-ES fallback
replaces the previous use of the GenSA package, and is invoked whenever
the LM method reaches a minimum that's above a level of error (configurable by
the user).2^n - 1-sized vector anywhere.decc985)44c9a1a)308167a)annotations argument for annotating intersections (19d2d87), closes #70+, / and | (d974c08), closes #46gap and separate labels by gap and tether (17802a2)template to quantities in plot() (59ddd71), closes #994ed75b4), closes #69 and #4b6ce232), closes #13loss_aggregator (03e7dea)max_sets in control for capping max sets (621a898), closes #85by_groups to plot() for panel-specifics (f2d5533), closes #125decc985)ceb3138)530fb11)6400fae)symbol_size to configure legend symbol (1491a49), closes #60rotate parameter (706735c), closes #12top and left for labeling strips (c1a87fb), closes #123021ceb4)3b7a32e),
closes #111caf1c76),
closes #83venn_eulerr
(244a657),
closes #78quantities$format for number formatting
(b01e69b),
closes #756e297a5),
closes #76bg option for plot.euler()
(bf70290),
closes #74quantities
(4c7d091),
fixes #112plot.euler() + labels
(cea5e43),
closes #118a58fce5),
closes #1094880f5e),
closes #116air.toml in Rbuildignore to fix R CMD check warning.arma::is_finite() in C++ code.loss and loss_aggregator. There is a new
vignette that showcases this new feature.adjust_labels in plot.euler() has been deprecated and
removed to fix sanitizer warnings.inst/CITATIONPI to M_PI to support STRICT_R_HEADERS in C++ code (#82, thanks
@eddelbuettel)euler() with adjust_labels = TRUE)
no longer repels text labels away from the edges of the shapes in the diagram.stringsAsFactors = TRUE inside all relevant functions in euler() to
avoid errors in upcoming R version.venn() exceeds 5 (##65)euler() and
venn() (##64, @privefl)data.frame inputs to euler() when categorical variables
are character vectors and not factors.plot.euler(), percentages can be added to the plot in addition to or
instead of counts by providing a list to the quantities argument with an
item type that can take any combination of counts and percent. This
change also comes with a redesign of the grid graphics implementation for
labels.eulerr_options() gains a new argument padding which controls the amount of
padding between labels and quantities. (##48)plot.euler() now uses code from the ggrepel package to prevent labels
from overlapping or escaping the plot area if adjust_labels is set to
TRUE.cex for quantity labels has changed from 1.0 to 0.9.data slot in the object created by
calling to plot.euler() (##57)venn() is a new function that produces Venn diagrams for up to 5 sets. The
interface is almost identical to euler() except that a single integer can
also be provided. A new vignette, Venn diagrams with eulerr, exemplifies its
use.plot.euler() when a list of Euler diagrams is
given has been improved. Setting fontsize or cex now results in
appropriately sized strips as one would expect.eulergram() objects from plot.euler() now have a proper grob name for the
canvas grob, so that extracting information from them is easier.euler() now correctly says "ellipses" and not
"coefficients".data.frame or matrix inputs now work properly when values are numerical.
(##42)error_plot() is a new function that offers diagnostic plots of fits from
euler(), letting the user visualize the error in the resulting Euler
diagram.euler() once again uses the residual sums of squares, rather than the stress
metric, as optimization objective, which means that output is always scaled
appropriately to input (##28).plot.euler() now uses the
polylabelr package to
position labels for the overlaps of the ellipses, which has improved
performance in plotting complicated diagrams considerably and reduced the
amount of code in this package greatly.euler.data.frame() method (and by proxy the euler.matrix() method) can
now take matrices with factors in addition to the previously supported logical
and integer (binary) input. The function will dummy code the variables for the
user.plot.euler() have been made defunct.plants, to exemplify the list method for euler().fruits, to exemplify the data.frame method for euler().euler.data.frame() gains an argument sep, which is a character vector used
to separate dummy-coded factors if there are factors or characters in the
input.organisms, to exemplify the matrix method for euler().pain, to exemplify the table method for euler().euler.table() gains an argument, factor_names, for specifying whether the
factor names should be included when generating dummy-coded variables in case
the input is a data.frame with character or factor vectors or if the input is
a table with more than two columns or rows.euler.list() now passes its ellipsis argument along properly. (##33, thanks,
@banfai)plot.euler() now returns a gTree object. All of the plotting mechanisms
are now also found in this function and plot.eulergram() and
print.eulergram() basically just call grid::grid.draw() on the result of
plot.euler(). This change means that functions such as
gridExtra::grid.arrange() now work as one would intuit on the objects
produced by plot.euler().NA in the resulting data.frame
of ellipses.GenSA::GenSA() from
RcppDE::DEoptim().plot.euler().euler.data.frame() now works as expected for tibbles (from the tibble
package) when argument by is used.plot.euler() has been rewritten completely from scratch, now using a custom
grid-based implementation rather than lattice. As a result, all
panel.*() functions and label() have been deprecated as well as arguments
fill_alpha, auto.key, fontface, par.settings, default.prepanel,
default.scales, and panel. The method for plotting diagrams has also
changed---rather than overlaying shapes on top of each other, the diagram is
now split into separate polygons using the polyclip package. Instead of
relying on semi-transparent fills, the colors of the fills are now blended in
the CIELab color space (##16).eulerr_options() have been provided in order to set default
graphical parameters for the diagrams.counts and outer_strips to plot.euler() are now defunct.euler() now always returns ellipse-based parameters with columns h, k,
a, b, and phi, regardless of which shape is used. This item was
previously named "coefficients", but it now called "ellipses" instead and a
custom coef.euler() method has been added to make cure that coef() still
works.quantities and labels arguments of
plot.euler() now works correctly (##20).GenSA::GenSA() to
RcppDE::DEoptim().stats::nlm() again.label is now a proper generic with an appropriate method (label.euler()).counts argument in one of the
vignettes.auto.key = TRUE and labels were not in
alphabetic order. (##15)%\VignetteEngine{knitr::knitr} to both vignettes. It had
mistakenly been left out, which had mangled the resulting vignettes.shape = "ellipse" in
euler(). This functionality accompanies an overhaul of the innards of the
function.stats::optim(..., method = "L-BFGS-B") to stats::nlminb().GenSA::GenSA() when the fit from
nlminb() isn't good enough, by default for 3 sets and ellipses, but this
behavior can be controlled via a new argument control.diagError and regionError metrics have been changed from
diag_error and region_error to reflect the original names.label() function has been added to extract locations for the overlaps
for third party plotting (##10).counts argument to plot.euler() and panel.euler.labels() have been
deprecated in favor of the more appropriate quantities.fill_opacity in plot.euler() that was deprecated in
v2.0.0 has been made
defunct.eulerr() has been replaced with euler() (see update 1.1.0) and made
defunct.euler:
euler.list() produces diagrams from a list of sample spaces.euler.table() produces diagrams from a table object, as long as there
are no dimensions with values greater than 2.plot.euler() has been rewritten (again) from the ground up to better match
other high-level functions from lattice. This change is intended to be as
smooth as possible and should not make much of a difference to most users.polygon_args, mar, and text_args to plot.euler() have been
made defunct.plot.euler() handles conflicting arguments better.eulerr now use registration.euler() now allows single sets (##9).plot.euler() now use a bold font face by default in order to
distinguish them from the typeface used for counts.key in plot.euler() has been deprecated and replaced with
auto.key. Notice that using key does not throw a warning since the
argument is used in lattice::xyplot() (which plot.euler() relies on).fill_opacity is softly deprecated and has been replaced with
fill_alpha for consistency with other lattice functions.border argument in plot.euler() works again (##7).eulerr() and its related methods been deprecated and are being replaced by
euler(), which takes slightly different input. Notably, the default is now
to provide input in the form of disjoint class combinations, rather than
unions. This is partly to make the function a drop-in replacement for
venneuler::venneuler.plot.euler() has been completely revamped, now interfacing xyplot() from
lattice. As a result, arguments polygon_args, mar, and text_args have
been deprecated.counts argument to plot.eulerr, which intersections and
complements with counts from the original set specification (##6).key argument to plot.eulerr that prints a legend next to the
diagram.atan2() from RcppArmadillo.cost and now forces the function to use
sums of squares, which is more or less equivalent to the cost function from
venneuler.plot.euler() now chooses colors adapted to color vision
deficiency (deuteranopia). With increasingly large numbers of sets, this
adaptation is relaxed to make sure that colors are kept visually distinct.euler() now uses nlm() instead of optim(method = "Nelder-Mead") for its
final optimization.print.eulerr.cost argument
(currently eulerAPE or venneuler).by argument to
eulerr. The result is a list of Euler diagrams that can be plotted in a grid
arrangement via a new plot method.mar argument to plot.eulerr with a default that produces symmetric
margins.stress statistic from venneuler.print.eulerr method.