A rose diagram is a circular histogram. Angles are grouped into bins around a periodic interval, and bin frequencies are displayed radially.
The discontinuity between 0 and 2 * pi is
artificial. A circular display places these two values next to each
other.
library(ggplot2)
library(ggcircular)
ggplot(wind_directions, aes(x = direction)) +
geom_rose(bins = 16) +
scale_x_circular_degrees() +
coord_circular() +
theme_rose()Fewer bins emphasize broad directional patterns. More bins reveal local structure but increase sampling variability.
ggplot(wind_directions, aes(x = direction)) +
geom_rose(bins = 32) +
scale_x_circular_degrees() +
coord_circular() +
theme_rose()The normalize argument controls the computed radial
variable. The computed variables are also available through
after_stat().
ggplot(wind_directions, aes(x = direction)) +
geom_rose(aes(fill = after_stat(proportion)), bins = 16, normalize = "proportion") +
scale_x_circular_degrees() +
coord_circular() +
theme_rose()When area = TRUE, the displayed radial height is
square-root transformed. This can help when comparing frequencies by
visual area.
ggplot(wind_directions, aes(x = direction)) +
geom_rose(bins = 16, area = TRUE) +
scale_x_circular_degrees() +
coord_circular() +
theme_rose()Groups can be represented with fill, colour or facets.
ggplot(wind_directions, aes(x = direction, fill = season)) +
geom_rose(bins = 16, alpha = 0.7) +
facet_wrap(~ season) +
scale_x_circular_degrees() +
coord_circular() +
theme_rose()For axial data, use axial = TRUE and a scale limit of
c(0, pi).
ggplot(axial_orientations, aes(x = orientation, fill = group)) +
geom_rose(bins = 18, axial = TRUE) +
scale_x_circular_degrees(limits = c(0, pi)) +
coord_circular() +
theme_rose()Rose diagrams are descriptive. Apparent modes can depend on the bin origin and number of bins, so they should often be paired with a density estimate or summary statistic.