varname.color to replace fixed muted("red")point.size argumentggvector() gains an angle argument for the text labels. Default NULL computes each
label's angle from its own vector's direction, as before; supply a fixed number (e.g. 0
for horizontal labels) to use the same angle for every label instead. Exposed on ggbiplot()
as varname.angle.
ggbiplot()'s clip argument now defaults to "off" (was "on"). This is a default-behavior
change: a long variable name, or one pushed outward by a large varname.adjust, can extend
past the panel edge (ggplot2 computes axis limits from each layer's anchor coordinates only,
not the rendered text's extent) — "off" lets that overflow draw into the margin instead of
silently truncating it. Pass clip = "on" to restore the old hard-clipping behavior.
reflect() is now an S3 generic. The existing prcomp/princomp/PCA/lda behavior is
unchanged, and it gains data.frame, matrix, and list methods that negate the given
columns (by name or index) directly, so other packages/objects can register their own
reflect.<class>() method instead of needing changes here.
All reflect() methods also gain a scale
argument (default 1): the selected columns become -scale * columns instead of just
-1 * columns, useful to stretch or shrink variable vectors in a biplot at the same time as
reflecting them (a negative scale scales without reflecting).
|>lda() objects to those handled by reflect()ggvector(), exported, to draw labeled vectors from a common origin using
ggarrow::geom_arrow_segment(). ggbiplot() now uses this internally to draw variable
vectors and their labels, replacing the previous geom_segment() + grid::arrow() code.
ggarrow is now a package dependency (Imports).ggbiplot() gains a varname.gap argument to pull variable-vector arrowheads back
(in mm) from their true endpoint, e.g. to keep them clear of the correlation circle or
of crowded labels. Exposed on ggvector() as gap.ggvector()'s (and so ggbiplot()'s) default arrow linewidth is now 0.9, down from
1.4 (which matched the shaft width of the old grid::arrow()-based rendering).
ggarrow's default arrow_head_wings() ornament reads visually heavier than the old
plain triangular arrowhead at the same linewidth, so 1.4 now looks noticeably thicker
than the pre-ggarrow arrows did; 0.9 was chosen to look comparable. Use
vector.args = list(linewidth = 1.4) to get the old shaft weight back.ggbiplot() gains a vector.args argument: a named list forwarded to the ggvector()
call that draws the variable-vector arrows, e.g. list(arrow_head = ggarrow::arrow_head_line())
for a different arrowhead shape. Anything not matched by a ggvector() argument passes on
to ggarrow::geom_arrow_segment() (justify, force_arrow, sep, distort, ...).ggbiplot gains geom.ind and geom.var arguments for more flexible handling of the geometries used to display the
observation points and variable labels.ggbiplot gains a clip argument to control if points, labels, etc. are clipped to the axis limits.This is a modest upgrade to the initial release, adding a number of features.
ggbiplot() and ggscreeplot()`reflect() now also reflects supplementary variables from FactoMineR::PCA()ade4::dudi.pca()ggbiplot() gains an axis.title argumentggscreeplot() gains color, shape, linetype and linewidth argumentsget_SVD() intended the simplify the interface to various PCA functions.get_SVD() in ggbiplot() and ggscreeplot()ggscreeplot()data(crime) used in README giving a more complete example.geom_polygon() rather than geom_path() for ellipses to allow them to be filled.var.factor argument to expand or reflect the variable vectorsstat_ellipse()geom_polygon()) or unfilled (geom_path())