Draws a hand-drawn Gantt chart: one roughened bar per task from x (start)
to xend (end) on a discrete y – the whiteboard project-planning look.
Map an optional progress aesthetic (0 to 1) to overlay a slimmer, darker
solid bar over the completed fraction of each task. Works with dates,
date-times or plain numbers on the x axis, and with every fill_style
(including "watercolor"); corner_radius rounds the bar ends.
Usage
GeomSketchGantt
geom_sketch_gantt(
mapping = NULL,
data = NULL,
stat = "identity",
position = "identity",
...,
height = 0.55,
progress_shade = 0.65,
corner_radius = 0.15,
fill_style = "hachure",
roughness = 1,
bowing = 1,
n_passes = 2L,
seed = NULL,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)Arguments
- mapping
Aesthetic mappings created by
ggplot2::aes(). Requiresx,xendandy; optionallyprogress(completed fraction, 0-1).- data
Data to display.
- stat
Statistical transformation. Default
"identity".- position
Position adjustment. Default
"identity".- ...
Other arguments passed on to the layer.
- height
Bar height in y units. Default 0.55.
- progress_shade
Channel multiplier (< 1 darkens) for the progress overlay's fill. Default 0.65.
- corner_radius
Corner rounding of the bars; see
geom_sketch_rect(). Default 0.15.- fill_style
Bar fill style; see
geom_sketch_rect(). Default"hachure".- roughness, bowing, n_passes, seed
Sketch parameters.
- na.rm
Remove missing values silently? Default
FALSE.- show.legend
Logical; include in legend?
- inherit.aes
Override default aesthetics?
See also
Other sketch-geoms:
GeomSketchAbline,
GeomSketchArrow,
GeomSketchBoxplot,
GeomSketchBracket,
GeomSketchCallout,
GeomSketchChicklet,
GeomSketchCol,
GeomSketchContourFilled,
GeomSketchCurve,
GeomSketchDotplot,
GeomSketchDumbbell,
GeomSketchEdge,
GeomSketchEllipse,
GeomSketchEngrave,
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()
Examples
library(ggplot2)
plan <- data.frame(
task = factor(c("Design", "Build", "Test", "Ship"),
levels = rev(c("Design", "Build", "Test", "Ship"))),
start = as.Date(c("2026-01-05", "2026-01-19", "2026-02-09", "2026-02-23")),
end = as.Date(c("2026-01-23", "2026-02-13", "2026-02-27", "2026-03-06")),
done = c(1, 0.7, 0.25, 0)
)
ggplot(plan, aes(x = start, xend = end, y = task, fill = task,
progress = done)) +
geom_sketch_gantt(seed = 1L, show.legend = FALSE) +
theme_sketch()
