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’”
- 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
strength parameter now excludes loop edges,
which are drawn separately by geom_edge_loop0()
- 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
NA to grid
- 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
- 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
Tutorials
- Updated visualisation tutorial with a bit more structuring of
further options
autograph 1.1.0
Package
- Test coverage raised by introducing functional testing
infrastructure (
tests/testthat/helper-functional.R and
test-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_dist adding a further
points-based gap (mirroring igraph’s vertex.label.dist) and
label_repel = FALSE selecting 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.
- 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 new alpha
argument 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
isolates argument ("keep" or
"fade") controls whether temporarily isolated nodes stay
visible or fade out; keep_isolates is deprecated
- Dynamic (time-stamped, event-based) networks such as
irps_nuclear are now split automatically into cumulative
time slices via manynet::to_slices(), so a single dynamic
network object passed to grapht() works without manual
conversion
- Interval (spell) networks that record tie
begin/end lifespans, such as
irps_wwi, are now split automatically into one snapshot per
change point showing the ties active in that spell, so
grapht(irps_wwi) works directly (previously it errored
because such networks are dynamic but carry no time
attribute for to_slices()); irps_wwi is 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() and grapht() (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 a
wave attribute, which splits correctly with
{manynet} 2.2.1
- Added an
edge_bundle argument to graphr()
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 = 0 not fully suppressing edges on
directed networks (closes #50): arrowhead length was hard-coded
regardless of edge_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_measure results 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, the
isolates argument, snap grid-snapping,
autograph’s own special-purpose layouts, and programmatic export with
ggsave()
- 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 via
x/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() with
dplyr::recode_values()
Plotting
- Fixed
plot.matrix() erroring when no
membership argument was supplied, for both one-mode and
two-mode matrices
autograph 1.0.3
Plotting
- Fixed the error produced by a namespace reference in a call in
ergm_res by serializing it, moving to extdata, and loading
it via load_ergm_res()
autograph 1.0.2
Plotting
- Fixed the error produced by a namespace reference in a call in
ergm_res
autograph 1.0.1
Package
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
Tutorials
- Fixed the tutorial to use netrics functions
autograph 1.0.0
Package
- Updated startup message to declare the set theme
Graphing
- Improved
node_shape to accept more categories
- Moved
node_is_isolate and
node_adoption_time to internal helpers to reduce
dependencies
- Fixed #47 by overriding shape to fillable (21)
- Fixed #10 and #52 by adding label distance parameter
- Fixed #17 and #40 by improving
grapht()
Plotting
- Closed #37 by adding EgoAlter sienaGOF plot
- Fixed #36 by using
.to_factor() in
plot.ag_gof() to correct numeric ordering of statistics,
and dropped cumulative correction in plot.sienaGOF()
- Fixed #38 by dropping linetype in favour of colours even for bw
theme in
plot.influenceTable()
- Fixed option reference from
snet_theme to
stocnet_theme in plot.selectionTable() and
plot.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
Package
Graphing
graphr() now auto-dispatches to graphs()
when passed a list of graphs
graphs() no longer requires {patchwork} to
be loaded separately
- Closed #12 by changing node aesthetics from
color to
fill using 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 and match_color()
Layouts
- Replaced
{Rgraphviz} (Bioconductor) with
igraph::layout_with_sugiyama for 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
Package
- Shortened startup messages
Plotting
- Added
plot.goldfish.changepoints()
- Added
plot.goldfish.outliers()
- Added
plot.mnet() to avoid
igraph::plot.igraph() dispatching
Graphing
- Restructured scripts for improved maintenance and development in the
future
- Fixed
ggplot2::geom_violin() call in
graphr() to avoid warnings with ggplot2 v4.0.0
- Improved
graphr() internals to rely on a NULL “layout”
parameter and .infer_layout()
- Improved
graphr() to use match_color() for
diffusion palettes
- Fixed
graphs() handling of changing networks
autograph 0.4.2
Package
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
Theming
- Added “hwu” theme for Heriot-Watt University
- Improved highlight and divergent theme setting to use switch
- Added some discussion about colour-blindedness to palettes
documentation and viz tute
- Added some instruction on how to customise themes more
specifically
autograph 0.4.1
Package
- Improved startup message to ignore class
Theming
- Added “iast” theme for the Institute of Advanced Studies,
Toulouse
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
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() and is_dark()
tests
- Dropped
theme_*() functions in favour of
stocnet_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 using
ag_qualitative() for discrete colour scales
Plotting
- Improved
plot.selectionTable() and
plot.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
Data
- Renamed
res_monan_traces to
monan_conv
- Renamed
res_monan_gof to monan_gof
- Renamed
res_ergm_gof to ergm_gof
- Renamed
res_siena_gof to siena_gof
- Renamed
res_siena_influence to
siena_influence
- Renamed
res_siena_selection to
siena_selection
autograph 0.3.1
Package
- Fixed old citation style issue for CRAN
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 using
plot.ag_conv()
- Added
plot.mcmc.list() for plotting MCMC samples from
ergm::ergm results objects, using
plot.ag_conv()
Data
- Added
ergm_res for testing and illustration of
plot.mcmc.list(), use ergm_res$sample to
access the MCMC sample
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() and
plot.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 = FALSE by
default
- 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 for
stocnet_theme()
- Fixed issue with ‘oxf’ and ‘unige’ themes not being recognised
Data
- Added
res_ergm_gof for testing and illustration of
plot.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(), and
graphr()
- 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(), and grapht()
- Added plotting section to viz tutorial
autograph 0.2.0
Package
- Added (currently) necessary dependencies
- Removed unnecessary manynet dependencies
Plotting
- Added
graphr(), graphs(), and
grapht() 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
Package
- Fixed line break issues in DESCRIPTION
Themes
- Fixed default for
ag_sequential()
Layouts
- Fixed “layout_layered” to accept typical ggraph parameters
manynet
- Added return value statements
migraph
- Added return value statements
RSiena
- Added return value statements
MoNAn
- Added
plot.traces.monan()
- Added
plot.gof.stats.monan()
autograph 0.1.1
Package
autograph 0.1.0
Package
- Initial setup, with all the goodies
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
- 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 migraph plot methods
- Added
plot.netlm()
- Added
plot.netlogit()
- Added
plot.network_test()
- Added
plot.diffs_model()
- Added RSiena plot methods
- Added
plot.sienaGOF()
- Added
plot.influenceTable()
- Added
plot.selectionTable()
Layouts
- Added
layout_tbl_graph_matching() for positioning nodes
according to their manynet::to_matching() partners
- Added first version of
layout_tbl_graph_layered() for
layering nodes according to a Sugiyama-type layout
Data
- Added some precooked results for testing and illustration