Graphics and reporting principles#

ggstyle borrows the discipline of projects such as ggstatsplot while retaining a much narrower purpose. The library manages time axes and presentation; it does not select or run statistical tests.

Show the data#

Position on a common scale is easier to compare than area, angle, or decorative encodings. Time-series values therefore remain on ordinary matplotlib axes, and synchronized panels use common date positions and limits whenever comparison is intended.

Make transformations explicit#

Collapsed time is useful but changes the meaning of horizontal distance. The mode is available through ggstyle.DateAxis.summary(), appears in generated captions, and is documented as an axis transformation rather than presented as ordinary calendar time.

Keep calculation separate from rendering#

Confidence or prediction ribbons accept caller-provided bounds. ggstyle does not infer whether a band is a confidence interval, choose a statistical model, or compute a hypothesis test as a side effect of plotting. Statistical work belongs to libraries such as statsmodels and SciPy; ggstyle can present their explicit outputs.

Keep displayed and extractable meaning synchronized#

Information used in a caption is generated from the same ggstyle.AxisSummary available to application code. This avoids manually copying observation counts, ranges, timezones, or gap semantics into reports.

Do not hide excluded data#

Explicit date data containing missing values raises unless missing="drop" is passed. When values are dropped, their count remains available in summaries and generated captions.

Prefer a small orthogonal API#

Tick placement, formatting, range, grid cadence, coordinate mode, and annotations remain independent controls. Grouped views use ggstyle.sync_dates() instead of separate grouped_* copies of every plotting function.