NEWS for the Gmisc package
vertical_axis and horizontal_axis
connector types for flowcharts. These opt-in connectors preserve the
source box’s x- or y-axis and project it onto the target boundary,
giving true 90-degree vertical/horizontal arrows for shared wide or tall
target boxes. Existing vertical and horizontal
connector behavior is unchanged.phaseLabel() for flowchart box lists: a
one-call-per-stage helper that adds a CONSORT-style phase label
(e.g. Allocation, Follow-up, Analysis)
centred between a stage’s arms, sitting slightly above it and drawn on
top. The label width adapts to the stage — spanning the central gap
(plus a small corner overlap) for two arms, or the full stage width as a
banner for three or more arms — and can be set explicitly via
width. It correctly handles nested arm lists (arms that are
themselves lists of boxes) by resolving their merged bounding box.on_top to insert() for flowchart box
lists. A box inserted with insert(..., on_top = TRUE) is
drawn on top of the other boxes and connections, regardless of its
position in the list, and the marker is preserved through subsequent
move()/align() operations. This is the
lower-level overlay mechanism that phaseLabel() builds
on.insert() now resolves grouped (list) neighbours via
their merged bounding box, so a box can be inserted between grouped
stages without error.phaseLabel() centred between randomisation
arms.flowchart()
+ pipe (|>) style API in
inst/examples/connectGrob_example.R,
inst/examples/spreadBox_ex.R, and
inst/examples/alignBox_ex.R.box_fn_args parameter to boxGrob()
for passing extra arguments directly to the box drawing function. The
default is now list(r = unit(5, "pt")), giving every box a
fixed 5 pt corner radius (approximately equivalent to the widely-used 5
px CSS border-radius) regardless of box size — solving the
issue where larger boxes had visibly rounder corners than smaller ones.
Override per box or globally via
options(boxGrobFnArgs = list(...)).equalizeHeights() for flowchart box lists,
mirroring the existing equalizeWidths(). It sets selected
boxes to a shared height (defaulting to the tallest among the selection)
and supports the same subelement path syntax as
equalizeWidths().exclude to
spreadVertical()/spreadHorizontal() and the S3
spread() wrapper, allowing side branches to be left out of
the main spread while preserving them in the flowchart list for later
align(), move(), and connect()
calls.spread() span handling: explicit
from/to spans now work naturally with
margin as an inset inside that span (for example
spread(axis = "x", from = 0, to = 0.7, margin = 0.05)
spreads within the left 70% of the viewport with padding), and
subelement spreads can use deferred position() endpoints
such as from = position("log", "top", "y").references to
alignVertical()/alignHorizontal() and the S3
align() wrapper. Supplying two references aligns the target
to their midpoint on the selected axis, useful for centering side boxes
between the main boxes before and after them.moveBox()/move()
justification semantics: for absolute moves, just = "right"
makes x the right border, just = "left" makes
x the left border, and the same edge-based interpretation
applies vertically for top/bottom.connect() API for
connect("source", "group", type = "side"). The shared
fan-out bus now honors side_route = "outside" and
side_offset before branching to the destination boxes,
which keeps side-branch arrows away from the source box edge.connect() API for
connect(list("a", "b"), "target", type = "side"). The
shared return bus now honors side/end_side and
side_route/side_offset, routing to the
requested outer side instead of letting each line independently pick the
closest side of the target.connect(..., type = "side") connectors
so they honor side_route/side_offset. The
vertical segment now steps out from the source box edge by the offset
(matching the grouped fan-in/fan-out behavior); previously the offset
was ignored and the line hugged the box edge. Use
side_route = "edge" to keep the old edge-hugging
route.label can now be used directly on a grouped
type = "side" fan-out; the label is centered on the offset
bus, drawn on the outgoing line, and uses a semi-transparent white
background by default so the line remains visually legible.boxEllipseGrob(), boxDatabaseGrob(),
boxDocumentGrob(), boxDocumentsGrob(),
boxDiamondGrob(), and boxTapeGrob() together
with spread()/align() positioning.fan_in_top trunks now terminate
exactly on the target’s top edge.position() with relative moves.equalizeWidths() for flowchart box lists,
allowing selected boxes (including nested subelement paths
and list-of-boxes targets) to share a common width while preserving
center positions.txt_padding to boxGrob() and support
for a global default via
options(boxGrobTxtPadding = ...).tests/testthat/test-equalizeWidths.R and
tests/testthat/test-boxGrob-padding-option.R.boxHeaderGrob() for creating flowchart boxes with
centered header text and left-justified body text (e.g., bullet points).
Fully compatible with all Gmisc flowchart helpers
(coords(), distance(),
connectGrob(), spreadVertical(),
alignHorizontal(), etc.).subelement and
reference in alignVertical,
alignHorizontal, spreadVertical,
spreadHorizontal, and moveBox, allowing nested
paths (e.g. c("detail", 1)) and multiple targets
(e.g. list(c(...), c(...))).get_list_element_by_path() and
set_list_element_by_path() to support nested selection and
assignment.inst/examples/alignBox_ex.R,
inst/examples/spreadBox_ex.R) and added tests
(tests/testthat/test-align-deep-path.R,
tests/testthat/test-spread-move-deep-path.R,
tests/testthat/test-align-subelement-deep.R) covering
deep-path selection and informative error messages.subelement resolution when a list of boxes is
piped into alignHorizontal() or
alignVertical() while providing a named
reference argument; the piped list is now unwrapped so
nested targets (e.g., c("step_1", "non-surgical")) are
correctly found and aligned.prConvert2Coords,
allowing for merged bounding box calculations in npc
units.moveBox to support moving lists of boxes
(groups) as a single unit, with improved name preservation.subelement parameter to
spreadVertical, spreadHorizontal,
alignVertical, and alignHorizontal for
targeting specific elements within a list of boxes.pathJoin for vector inputsdifftime as numeric to
getDescriptionStatsBygetDescriptionStatsBy and dropped old deprecated parameter
conversion:
show_missing_digits ->
show_missing.digitsshow_missing -> useNAsig.limit -> statistics.sig_limtwo_dec.limit ->
statistics.two_dec_limgetDescriptionStatsBy when providing a
character inputgetDescriptionStatsBy S3 aware with
tidyselect pattern for generating tables.yamlDump can now take a character string and assume
that is a json that needs conversionset_column_labels and
set_column_units for using dplyr syntax for
Hmisc::label and Hmisc::units operations.getDescrptionStatsBy can now have a
custom name (also changed default name to “Units”)getSvdMostInfluential now returns the data needed for
plottingboxGrobmergeList merges vectors
into vectors instead of assuming that they should be bound as a
matrixboxPropGrob height calculation, bad
handling of missing arguments and ignored gpar arguments (issue
#46)boxGrobsmoveBox for moving boxGrob
objectsalignVertical and alignHorizontal
for aligning boxGrob objectsspreadVertival and spreadHorizontal
for spreading boxGrob objects over the
viewporthtmlTable removed due to the 2.0 api change,
nbow. the css.rgroup should be set using set
htmlTable::setHtmlTableTheme or by passing the
output through
htmlTable::addHtmlTableStyle.yamlDump for quick object reviewpathJoin for joining paths without worrying about
trailing ‘/’time2spanTxt for printing time span
descriptorstringsAsFactors in
next R releaseTransition-classpopViewport() not adequately leaving
the transitionClass viewport treeviewport naming in
Transition-class that was creating a conflict with multiple
plotsclass(x) != class(y) could
be of length > 1digits.nonzero for allowing values with extra
digits where values are close to 0sprintf to txtRound for many of
the descriptorsretrieveboxGrob (Thanks Alan
Haynes)retrieve and
hasbezierArrowFn’s c++ codeTransition-classTransition options for arrowsTransition,
boxGrob and boxGrobPropdescGetMissing (Thanks
Peter)getDescriptionStatsBy with
custom functionTransition-class can now handle non-square matrix
inputtxtInt
functiongetDescriptionStatsBy -
thanks rvlevitin (iss#13)getDescriptionStatsBygetDescriptionStatsByTransition class that can handle multiple
transitions in contrast to transitionPlotbezierArrowGradient has a simpler handling of the
gradient proportiongetDescriptionStatsBy function is now accompanied
by mergeDesc that takes care of merging everything into one
tablegetDescriptionStatsBytransitionPlot: The color_bar_labels are now
automatically extracted from the transition_flow inputtransitionPlot: Fixed bug so that the end viewport is
the roottransitionPlot: Fixed grid arrow bugtransitionPlot: When using 3D matrices and two colors
there should only be a colorbar when used with gradient arrowstransitionPlot: If line width is smaller than the
minimum width it is now set to 0htmlTable and some of the formatters have now moved to
the htmlTable packageforestplot2 has now moved to the
forestplot packagemergeDesc in order to merge lists from
getDescriptionStatsBy forhtml = TRUE instead of
FALSEshow_missing is now useNA in order to
match the table() call handling of missinghtmlTable handling of no-blank
spaces ( )htmlTable now remember the … argument and passes it on
to the print.htmlTable() and cat()htmlTable viewer handling (thanks Adam
Smith)htmlTable() instead of the Hmisc::latex()forestplot2htmlTable bug: The function can now handle matrices
without column nameshtmlTable bug: The function deletes and warns when
n.rgroup/n.cgroup < 1htmlTable and moved one of the
examples therehtmlTable - thanks
jphipliphtmlTable
rgroups - thanks rareddtransitionPlot - fixed arrow size and empty boxeshtmlTablebezierArrowGradientbezierArrowGradient/transitionPlotsforestplot2 and the transitionPlot
functionsforestplot2 functiontransitionPlot defaultsbezierArrowGradienthtmlTable allowing for direct
visualisation in RStudio of the tables. Outside RStudio the
utils::browseURL is used.htmlTable added table spanner functionality, some
man-page update, removed the default NULL arguments in favor of the
missing() funciton, and a few minor bugfixes.forestplot2 when using
pointsforestplot2
functionforestplot2 - the
prFpGetGraphTicksAndClips used the exp() for regular values.htmlTable now includes
caption inside the table when compatibility=‘LibreOffice’transitionPlottransitionPlot texthtmlTable caused too large colspans when cgroup was
setforestplot2 ability create customly drawn
confidence intervals/boxesforestplot2forestplot2 compatibility for the summaryhtmlTable functionhtmlTablehtmlTable() where you now can format
the table counter text and change to Arabic numerals.forestplot2 with headersforestplot2forestplot2forestplot2forestplot2forestplot2forestplot2getDescriptionStatsBy
with more detailed errors when unit/total columns don’t matchforestplot2 functions and
added the option of having a set line heightforestplot2forestplot2 fix so that it properly handles data.frames
as argumentsforestplot2 is updated - the widths are now
relative to the window size, there is a margin option, and many of the
inside functions have moved to helpers outside. Also fixed the alignment
of the summary label to work better.getDescriptionStatsBy and
describeProp function.getDescriptionStatsBy,
describProp and describeFactors is now optional.htmlTable
functionhtmlTable… again.htmlTablehtmlTablehtmlTable cgroup.just issuehtmlTable is now rendering correct w3c-validated
codehtmlTable function with align
now accepting vectorsmergeLists() function for merging multiple
liststransitionPlot to avoid overlapping
background arrowshtmlTable
alignment and a few bugs!transitionPlot ability to indicate proportions in
the rectanglestransitionPlot linestransitionPlothtmlTable - throws error if a one
dimensional x is providedgetSvdMostInfluential functionforestplot2