autograph 1.1.1
Graphing
- Fixed
grapht()example, which took too long to run, by couching it in\donttest{} - Improved
graphs()to accept bare longitudinal or dynamic networks- Splits it into waves or time slices automatically (consistent with
grapht()), instead of erroring with “invalid to use names()<- on an S4 object of class ‘dgCMatrix’”
- Splits it into waves or time slices automatically (consistent with
- Fixed various errors and warnings in
graphr()/graphs()on signed, directed, or changing networks:- Fixed recycling warnings (“longer object length is not a multiple of shorter object length”) in
graphr()on a complex network- arc geom’s
strengthparameter now excludes loop edges, which are drawn separately bygeom_edge_loop0()
- arc geom’s
- Fixed spurious warning (“no non-missing arguments to max; returning -Inf”) in
graphr()on a changing network without any adoption events (e.g.fict_potter)- such networks now rendered as standard changing networks rather than routed through the diffusion node-colour mapping
- Fixed fails at draw time with “invalid hex digit in ‘color’ or ‘lty’” in
graphr()on a signed multiplex network (e.g.fict_marvel)- ties on non-signed layers (which have a missing sign) are now drawn solid/positive rather than passing
NAto grid
- ties on non-signed layers (which have a missing sign) are now drawn solid/positive rather than passing
- Fixed error with “Aesthetics must be either length 1 or the same as the data” in
graphr()/graphs()on signed longitudinal or directed networks (e.g.to_waves(ison_monks))- per-tie sign linetypes are now mapped through
aes()(with an identity scale) so ggraph’s edge geoms expand and subset them consistently with edge colour and width
- per-tie sign linetypes are now mapped through
- Fixed
graphr(..., snap = TRUE)erroring on two-mode networks: their default “hierarchy” layout is now left un-snapped (with an informative message) since collapsing its layered coordinates onto a square grid is not meaningful, while snapping a two-mode network under a force-directed layout continues to work; also hardened the grid-snapping search so a coordinate landing exactly on a grid point is no longer mistaken for a node’s zero self-distance
- Fixed recycling warnings (“longer object length is not a multiple of shorter object length”) in
autograph 1.1.0
Package
- Test coverage raised by introducing functional testing infrastructure (
tests/testthat/helper-functional.Randtest-functional_*.R) for:- the layout family
- the
plot.*S3 method family - the
ag_*palette accessors across all themes -
graphr()’s aesthetic arguments each enumerated automatically and audited against fixture grids
- Removed the unused internal helper
seq_nodes() - Excluded the interactive-only palette helper
ggpizza()from coverage - Added migraph to Suggests (used in tests only)
Graphing
- Improved how
graphr()treats labels- Fixed labels overlapping nodes (closes #13): labels now keep clear of node borders automatically by giving ggrepel each node’s true rendered size, with
label_distadding a further points-based gap (mirroring igraph’svertex.label.dist) andlabel_repel = FALSEselecting a fixed offset instead of repulsion. - This also fixed a pre-existing bug where non-repelled labels rendered with a fully transparent fill under this package’s theme, making them invisible over nodes.
- Fixed labels overlapping nodes (closes #13): labels now keep clear of node borders automatically by giving ggrepel each node’s true rendered size, with
- Improved
grapht()has been rewritten for smoother, more consistent animations of dynamic networks- Node positions now transition seamlessly between waves using the dynamic stress layout from graphlayouts (
layout_as_dynamic()), with a newalphaargument controlling layout stability; other layouts are computed once on the aggregate network and held fixed - Changing node composition is now handled properly: every node that ever appears gets a stable position and fades in and out in place as it enters and exits the network
- New
isolatesargument ("keep"or"fade") controls whether temporarily isolated nodes stay visible or fade out;keep_isolatesis deprecated - Dynamic (time-stamped, event-based) networks such as
irps_nuclearare now split automatically into cumulative time slices viamanynet::to_slices(), so a single dynamic network object passed tographt()works without manual conversion - Interval (spell) networks that record tie
begin/endlifespans, such asirps_wwi, are now split automatically into one snapshot per change point showing the ties active in that spell, sographt(irps_wwi)works directly (previously it errored because such networks are dynamic but carry notimeattribute forto_slices());irps_wwiis now a runnable example in the documentation -
grapht()now uses the dynamic stress layout by default even for two-mode networks (rather than a hierarchy layout, which collapsed many nodes onto a line), suppresses node labels by default for networks with more than 30 nodes to keep frames legible, and fades densely overlapping ties so they read as a density gradient rather than a solid mass - Fixed an error when animating networks whose node names contain non-ASCII characters
- Waves without any ties are no longer silently dropped
- Closer visual parity with
graphr(): directed networks get arrowheads on segments trimmed at the target node, signed networks distinguish positive/negative ties by linetype and colour, mapped aesthetics use the same palettes with factor levels consistent across frames, and legends transition along with the animation - Aesthetic-resolution helpers are now shared between
graphr()andgrapht()(new R/graph_aes.R), so styling cannot drift between static and animated plots - Added a test suite for
grapht()(no gif rendering required) - Now aborts with a clear message when its input cannot be split into waves or slices, instead of failing much later with a cryptic igraph error (closes #40); the underlying cause —
to_waves()silently ignoring a time attribute not named “wave” — will be fixed in manynet 2.2.2, and the tutorial example now uses awaveattribute, which splits correctly with manynet 2.2.1
- Node positions now transition seamlessly between waves using the dynamic stress layout from graphlayouts (
- Added an
edge_bundleargument tographr()for bundling edges in dense networks (closes #19):-
TRUE/"force"uses force-directed bundling, with"path"and"minimal"selecting the other non-hierarchical algorithms - colour/width/linetype mappings are preserved and directed networks keep their arrowheads.
- This wires up ggraph’s non-hierarchical bundling geoms (added in ggraph 2.2.0), which were previously imported but never called, so the ggraph dependency is now
(>= 2.2.0)
-
- Fixed
edge_size = 0not fully suppressing edges on directed networks (closes #50): arrowhead length was hard-coded regardless ofedge_size, leaving a visible arrowhead when the line was hidden. Arrow length now scales with the resolved edge width (capped so heavily-weighted edges don’t get oversized heads) and is omitted entirely when the width is 0 - Fixed two-mode auto-shapes assigning circles to the second mode: the first mode now takes circles and the second squares, as intended
- Fixed
graphr()returning an empty plot for networks consisting only of isolates (e.g. the empty dyad/triad motifs): isolates are now kept whenever removing them would empty the graph - Fixed
graphs()erroring on lists containing tie-less networks (e.g.plot()on motif censuses): panels sharing a layout now keep isolates so every node has a coordinate in every wave - Fixed
graphr()erroring on weight or size attributes carrying measure classes (e.g.tie_measureresults from netrics stored as attributes) - Fixed a vector-recycling warning in
graphs()’ ego-network detection
Tutorials
- Fixed the “Tying up loose ends” exercise in the visualisation tutorial erroring on
tie_closeness()(closes #39): the tutorial now loads netrics and uses its measure functions (tie_by_closeness(),tie_is_triangular()), and every tutorial code chunk is now exercised by the functional tests below - Reworked the “Visualising Networks” tutorial to match the structure and features of the manynet v2.2 tutorials
- Rebranded the tutorial in autograph red, with larger, more readable text and matching ‘Run code’ buttons
- Added a checkbox Aims section, “Catching up”, “Going further”, “Beginner note”, and “In brief” callout boxes, per-page mini-tables of contents, and free play sections with a choose-your-own-data difficulty ladder
- Added hover-over glossary terms throughout and a closing Summary section with a function overview table and glossary
- Added quiz questions with feedback, and hints for the coding exercises
- New coverage of
edge_bundle,label_repel/label_dist, theisolatesargument,snapgrid-snapping, autograph’s own special-purpose layouts, and programmatic export withggsave() - New sections on directed networks (automatic, width-scaled arrowheads and manual control via
edge_size), automatic mode shapes in two-mode networks, and manually adjusting a layout’s coordinate table before passing it back viax/y - Added artist-themed gifs throughout, including as quiz-answer feedback
- Added a static, read-only version of the tutorial as a pkgdown article (“Tutorials” menu on the website), as in manynet
- Added functional testing of all tutorial code chunks (
tests/testthat/test-tutorials_autograph.R), mirroring manynet’s tutorial testing infrastructure
Layouts
- Fixed
layout_tbl_graph_layered()ordering nodes by the names rather than the positions of their neighbours in adjacent layers, which degraded every barycenter sweep to NA and raised warnings - Replaced deprecated
dplyr::case_match()withdplyr::recode_values()
Plotting
- Fixed
plot.matrix()erroring when nomembershipargument was supplied, for both one-mode and two-mode matrices
autograph 1.0.3
CRAN release: 2026-05-01
Plotting
- Fixed the error produced by a namespace reference in a call in
ergm_resby serializing it, moving to extdata, and loading it viaload_ergm_res()
autograph 1.0.1
Plotting
- Fixed the error in some flavours by removing environment references in included objects
- Closed #44 by adding example that uses
ggplot2::scale_colour_discrete()to tweak colour output
autograph 1.0.0
CRAN release: 2026-04-04
Plotting
- Closed #37 by adding EgoAlter sienaGOF plot
- Fixed #36 by using
.to_factor()inplot.ag_gof()to correct numeric ordering of statistics, and dropped cumulative correction inplot.sienaGOF() - Fixed #38 by dropping linetype in favour of colours even for bw theme in
plot.influenceTable() - Fixed option reference from
snet_themetostocnet_themeinplot.selectionTable()andplot.influenceTable() - Applied
ag_font()to migraph model plots for consistent typography - Reorganised plot scripts by purpose: summaries, tests, and analysis
- Fixed #46 by not appending “X” to the names when creating the data frame and moving factor coercion later in the process
Tutorial
- Fixed #41 by updating tutorials to use fill aesthetics (
scale_fill_*()) instead of colour aesthetics (scale_colour_*())
autograph 0.6.0
CRAN release: 2026-03-01
Graphing
-
graphr()now auto-dispatches tographs()when passed a list of graphs -
graphs()no longer requires patchwork to be loaded separately - Closed #12 by changing node aesthetics from
colortofillusing fillable shape codes (21–25) for nodes to support fill-based colour scales - Consolidated legend modifications into internal
graph_legends()helper - Improved legend labelling:
- edge sign legend now labelled “Sign”
- edge weight/width now labelled “Weight”/“Width”
- node mode/shape legend now labelled “Mode”/“Shape”
- Closed #8 by adding “isolates” argument to
graphr():-
"legend"(default) removes isolates from the graph but notes them in the legend -
"caption"removes isolates from the graph but notes them in the caption -
"keep"retains isolates in the graph as-is (closes #12)
-
Theming
- Removed
scale_*()functions as redundant with better theme support andmatch_color()
Layouts
- Replaced
{Rgraphviz}(Bioconductor) withigraph::layout_with_sugiyamafor Sugiyama/hierarchy layouts, removing the Bioconductor dependency - Improved Sugiyama layout with dummy node insertion and barycenter crossing minimisation for better edge routing
- Fixed #18 for lattice layout snapping by rotating the layout to optimise edge verticality and horizontality
autograph 0.5.1
Plotting
- Improved
plot.gof.ergm()(closes #31)- Now works on directed and two-mode networks and dyadwise shared partners
- Now has more informative error message if statistic not available
- Now accepts more descriptive and gof-formula consistent statistic names
autograph 0.5.0
CRAN release: 2025-11-19
Plotting
- Added
plot.goldfish.changepoints() - Added
plot.goldfish.outliers() - Added
plot.mnet()to avoidigraph::plot.igraph()dispatching
Graphing
- Restructured scripts for improved maintenance and development in the future
- Fixed
ggplot2::geom_violin()call ingraphr()to avoid warnings with ggplot2 v4.0.0 - Improved
graphr()internals to rely on a NULL “layout” parameter and.infer_layout() - Improved
graphr()to usematch_color()for diffusion palettes - Fixed
graphs()handling of changing networks
autograph 0.4.2
Plotting
- Fixed node overflow issue and restored marginal density plot in
plot.ag_conv()by dropping+.ggplot() - Added automatic legend labelling where node_size or node_color or edge_color is given
autograph 0.4.1
CRAN release: 2025-09-11
Plotting
- Improved ergm convergence diagnostic plotting by working on the results object, mostly avoiding startup conflict warning
- Dropped marginal density plot in
plot.ag_conv()to fix ggplot2 v4.0.0-related node overflow issue
autograph 0.4.0
CRAN release: 2025-09-10
Package
- Fixed DOI in CITATION
- Improved README introduction
- Improved README graphing illustration, including igraph comparison figure
- Improved README plotting illustration, added SAOM/ERGM GOF comparison figure
Theming
- Improved
stocnet_theme()documentation - Improved
stocnet_theme()to register a font family for plots- A vector of potential fonts is included for some themes
- The first font found on the system will be used, and user notified
- If no fonts are found, the default R font (“sans”) will be used
- A message is printed to inform the user if the default is used, and how to install missing fonts via extrafont
- Added font options for “iheid”, “oxf”, “ethz”, “uzh”, and “rug” themes
- Added
ag_font()for retrieving the registered font family - Improved
match_colors()documentation - Exported
is_dark()and made it vectorised - Added
match_colors()andis_dark()tests - Dropped
theme_*()functions in favour ofstocnet_theme() - Dropped
theme_*()tests - Added
stocnet_theme()tests - Added “cmu” theme for Carnegie Mellon University
Graphing
- Improved
graphr()by using registered fonts where available - Improved
graphr()by usingag_qualitative()for discrete colour scales
Plotting
- Improved
plot.selectionTable()andplot.influenceTable()documentation by consolidating them together into one help file - Improved
plot.ag_conv(),plot.ag_gof(), and plot_interp by using registered fonts where available - Improved
plot.sienaGOF()to use lower case auxiliary statistic description
autograph 0.3.1
Plotting
- Added
plot.ag_conv()as a new plotting method for convergence diagnostics- Plots MCMC traces as a line plot with loess smoothing highlighting the trend
- Plots overall density plot of the samples on the right margin
- Improved plotting of
{MoNAn}trace objects by usingplot.ag_conv() - Added
plot.mcmc.list()for plotting MCMC samples fromergm::ergmresults objects, usingplot.ag_conv()
autograph 0.3.0
Package
- Added package documentation
- Added citation
- Dropped dependencies tidyr, cli, and concaveman
- Added more description to the function overview sections on the website
- Added CODECOV_TOKEN to Github secrets for test coverage reporting
Graphing
- Fixed
graphr()not using theme colours for node and edge aesthetics
Plotting
- Added new plot class and method for centralising GOF plotting
- Improved
plot.sienaGOF()andplot.gof.stats.monan()to use new plotting method - Added
plot.gof.ergm()for plotting ERGM GOF objects - Improved GOF plotting by adding boxplot within the violins
- Improved GOF plotting by adding crosses for outliers
- Improved GOF plotting by adding dashed line for 0.05 and 0.95 quantile bounds
- Improved GOF plotting by dropping statistics without variance
- Improved GOF plotting by using
cumulative = FALSEby default
- Improved
- Fixed issue with pre-v1.3.20 RSiena::gof() objects, thanks @TomSnijders
- Added testing of GOF plotting
- Added testing of measures plotting
Theming
- Added
set_stocnet_theme()alias forstocnet_theme() - Fixed issue with ‘oxf’ and ‘unige’ themes not being recognised
Data
- Added
res_ergm_goffor testing and illustration ofplot.gof.ergm()
Tutorial
- Added visualisation tutorial from manynet
- Improved introduction
- Improved section on titles, labels, and legends
- Improved section explaining base and grid graphics
- Added section demonstrating difference between
igraph::plot(),ggraph::ggraph(), andgraphr() - Added table describing the main arguments of
graphr()and the visualisation dimensions to which they relate - Added section showing how to use “node_shape” (poorly)
- Improved section showing how to use “node_colour” and “node_group”
- Added section showing how to use “node_size”
- Added section showing how to set a theme
- Added section showing how to use “edge_colour” and “edge_size”
- Improved section introducing patchwork,
graphs(), andgrapht() - Added plotting section to viz tutorial
autograph 0.2.0
CRAN release: 2025-08-22
Plotting
- Added
graphr(),graphs(), andgrapht()from manynet for quick plotting of one or more graphs - Improved
+.ggplot()to check whether second object inherits ggplot class (thanks @teunbrand for fixing #110) - Fixed issue with edge_linetype in signed, directed networks with weights (closed #14)
- Updated README with examples of
graphr()and others
Themes
- Added themes for Oxford and UNIGE (closed #1)
- Improved
stocnet_theme()to add option to “stocnet_theme” (previously “snet_theme”) - Added
is_dark()to check whether a theme is dark or light - Added
match_color()to return closest matching colors from a palette
Layouts
- Added layout_valence() for signed graphs (closed #6)
- Added configurational layouts from manynet
- Added aliases for various layout_tbl_graph_*() functions
autograph 0.1.2
CRAN release: 2025-07-02
Themes
- Fixed default for
ag_sequential()
MoNAn
- Added
plot.traces.monan() - Added
plot.gof.stats.monan()
autograph 0.1.0
Theming
- Added
stocnet_theme()for setting a theme that can then be reused across successive plots (closes #3)- For example,
stocnet_theme("iheid")for IHEID colour theme
- For example,
- Added
ag_*()palettes, for example:-
ag_highlight()to select the highlight colours of a particular palette
-
- Added
match_color()for matching one or more hexcodes to a palette’s offerings
Plotting
- Added manynet plot methods
- Added
plot.diff_model() - Added
plot.matrix() - Added
plot.learn_model() - Added
plot.network_measures() - Added
plot.network_motif() - Added
plot.tie_measure() - Added
plot.node_measure() - Added
plot.node_member() - Added
plot.node_members() - Added
plot.node_motif()
- Added
- Added migraph plot methods
- Added
plot.netlm() - Added
plot.netlogit() - Added
plot.network_test() - Added
plot.diffs_model()
- Added
- Added RSiena plot methods
- Added
plot.sienaGOF() - Added
plot.influenceTable() - Added
plot.selectionTable()
- Added
Layouts
- Added
layout_tbl_graph_matching()for positioning nodes according to theirmanynet::to_matching()partners - Added first version of
layout_tbl_graph_layered()for layering nodes according to a Sugiyama-type layout
