A hand-drawn take on network/graph plotting. geom_sketch_edge() draws a
roughened connector between (x, y) and (xend, yend); geom_sketch_node()
draws roughened node markers with optional handwriting labels. Pair them
with sketch_graph(), which computes node positions with a pure-R
force-directed layout (force_layout()) and returns the two data frames
these geoms expect - no graph package required.
GeomSketchEdgegeom_sketch_edge(
mapping = NULL,
data = NULL,
stat = "identity",
position = "identity",
...,
curvature = 0,
roughness = 1,
bowing = 1,
n_passes = 2L,
seed = NULL,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
GeomSketchNode
geom_sketch_node(
mapping = NULL,
data = NULL,
stat = "identity",
position = "identity",
...,
roughness = NULL,
bowing = NULL,
n_passes = 2L,
seed = NULL,
label_size = 3.2,
label_colour = "grey15",
label_family = NULL,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
A ggplot2 layer object.
Aesthetic mappings created by ggplot2::aes().
Data to display. For geom_sketch_edge() the rows need
x/y/xend/yend; for geom_sketch_node() they need x/y (and an
optional label). Typically the $edges and $nodes from sketch_graph().
Statistical transformation and position adjustment.
Default "identity" for both.
Other arguments passed on to the layer.
Edge bend. 0 (default) draws straight roughened edges;
non-zero gives arc edges (a quadratic Bezier), like
geom_sketch_curve().
Sketch parameters; see
geom_sketch_path(). For geom_sketch_node(), roughness is a mappable
aesthetic (per node).
Remove missing values silently? Default FALSE.
Standard layer arguments.
Handwriting label size (mm). Default 3.2.
Label colour. Default "grey15".
Label font family. Defaults to the first installed
handwriting face (as geom_sketch_text() uses).
sketch_graph(), force_layout().
Other sketch-geoms:
GeomSketchAbline,
GeomSketchArrow,
GeomSketchBoxplot,
GeomSketchBracket,
GeomSketchCallout,
GeomSketchChicklet,
GeomSketchCol,
GeomSketchContourFilled,
GeomSketchCurve,
GeomSketchDotplot,
GeomSketchDumbbell,
GeomSketchEllipse,
GeomSketchEngrave,
GeomSketchGantt,
GeomSketchHex,
GeomSketchLine,
GeomSketchLinerange,
GeomSketchLollipop,
GeomSketchMarkCircle,
GeomSketchMarkHull,
GeomSketchPath,
GeomSketchPoint,
GeomSketchPolygon,
GeomSketchRect,
GeomSketchRibbon,
GeomSketchRug,
GeomSketchSegment,
GeomSketchSfPolygon,
GeomSketchSlope,
GeomSketchSmooth,
GeomSketchSpoke,
GeomSketchTextRepel,
GeomSketchViolin,
StatSketchBeeswarm,
StatSketchCalendar,
StatSketchDensityRidges,
StatSketchFunnel,
StatSketchPie,
StatSketchPyramid,
StatSketchRadar,
StatSketchStream,
StatSketchTreemap,
StatSketchWaffle,
StatSketchWaterfall,
annotate_sketch(),
annotate_sketch_arrow(),
annotate_sketch_callout(),
annotate_sketch_highlight(),
geom_sketch_alluvial(),
geom_sketch_arc_diagram(),
geom_sketch_bin2d(),
geom_sketch_bump(),
geom_sketch_chord(),
geom_sketch_contour(),
geom_sketch_count(),
geom_sketch_dendrogram(),
geom_sketch_density(),
geom_sketch_density2d(),
geom_sketch_ecdf(),
geom_sketch_function(),
geom_sketch_histogram(),
geom_sketch_jitter(),
geom_sketch_marimekko(),
geom_sketch_mosaic(),
geom_sketch_parallel(),
geom_sketch_qq(),
geom_sketch_quantile(),
geom_sketch_rose(),
geom_sketch_sunburst(),
geom_sketch_text(),
sketch_graph()
library(ggplot2)
edges <- data.frame(
from = c("A", "A", "B", "C", "C", "D"),
to = c("B", "C", "C", "D", "E", "E")
)
g <- sketch_graph(edges, seed = 1L)
ggplot() +
geom_sketch_edge(data = g$edges,
aes(x = x, y = y, xend = xend, yend = yend), seed = 1L) +
geom_sketch_node(data = g$nodes,
aes(x = x, y = y, label = name), size = 6, seed = 2L) +
coord_equal() +
theme_void()
Run the code above in your browser using DataLab