geom-crossbar
Crossbar layer: a box from ymin to ymax with a horizontal bar at y.
Mapping must provide x, y, ymin, ymax. The width parameter sets the box width in x data units for continuous x, and as a fraction of the per-category slot width for discrete x.
Usage
geom-crossbar(
mapping: none,
data: none,
width: 0.6,
colour: auto,
fill: auto,
stroke: 0.6pt,
middle-stroke: 1.2pt,
alpha: auto,
stat: "identity",
position: "identity",
inherit-aes: true,
)Parameters
| Parameter | Default | Description |
|---|---|---|
mapping |
none |
Layer-specific aesthetic mapping built with aes. Must map x, y, ymin, ymax. |
data |
none |
Layer-specific dataset, or a function applied to the plot data returning the layer frame. Falls back to the plot data when none. |
width |
0.6 |
Box width. In x data units for continuous x; a fraction of the slot width for discrete x. |
colour |
auto |
Stroke colour for the box and the median bar. auto falls back to the theme ink, since the outline and median carry the crossbar’s structure even when fill supplies the body colour. |
fill |
auto |
Box fill colour. auto resolves via the fill scale or a neutral default. |
stroke |
0.6pt |
Stroke thickness for the box outline. |
middle-stroke |
1.2pt |
Stroke thickness for the median bar. |
alpha |
auto |
Box opacity in [0, 1]. |
stat |
"identity" |
Statistical transform name. Usually "identity". |
position |
"identity" |
Position adjustment name. Defaults to "identity"; use "dodge" to place groups side by side per fill level. |
inherit-aes |
true |
Whether to merge the plot-level mapping into this layer’s mapping. |
Returns
Layer dictionary consumed by plot.
Examples
Box from lo to hi with the median bar at y.
#let d = range(1, 5).map(i => (
x: i,
y: i,
lo: i - 0.6,
hi: i + 0.6,
))
#plot(
data: d,
mapping: aes(x: as-factor("x"), y: "y", ymin: "lo", ymax: "hi"),
layers: (geom-crossbar(),),
width: 10cm,
height: 6cm,
)Map fill to a categorical column to colour the box per group.
#let d = range(1, 5).map(i => (
x: i, y: i, lo: i - 0.6, hi: i + 0.6,
k: if calc.rem(i, 2) == 0 { "even" } else { "odd" },
))
#plot(
data: d,
mapping: aes(x: as-factor("x"), y: "y", ymin: "lo", ymax: "hi", fill: "k"),
layers: (geom-crossbar(alpha: 0.6),),
width: 10cm,
height: 6cm,
)