Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
8cd543d
Add coord_polar coordinate system
iangow May 1, 2026
d7f694f
Rewrite coord_polar to use Matplotlib's native PolarAxes
iangow May 1, 2026
bc21452
Add radial coordinate system
iangow May 2, 2026
80667e9
Extend coord_radial: partial-arc fixes, thetalim/rlim, theta axis labels
iangow May 2, 2026
7347950
Add theta_labels parameter to coord_radial for full-circle theta axis…
iangow May 2, 2026
6916129
Add pad to theta tick labels to clear the outer circle spine
iangow May 2, 2026
fb42ab7
Expose theta_label_pad parameter on coord_radial
iangow May 2, 2026
a829df1
Fix theta_label_pad being overwritten by facet margin padding
iangow May 2, 2026
b9a7b20
Fix theta breaks with negative angles causing partial-arc regression
iangow May 3, 2026
6f5ca36
Fix start-angle rotation hiding bars for full-circle plots
iangow May 3, 2026
b4cfa0f
Hide polar spine when panel_border=element_blank()
iangow May 3, 2026
472dbef
Set clip_on=False on geom_text artists in PolarAxes
iangow May 3, 2026
89f29a6
Transform polar segment endpoints
iangow May 3, 2026
c7f5ff2
Document polar coordinates
iangow May 4, 2026
c675aaa
Add coord polar and radial coverage tests
iangow May 5, 2026
66ac9b8
Fix polar coordinate type checking
iangow May 5, 2026
d006abe
Remove coord polar notebook
iangow May 5, 2026
0ad26b5
Move projection selection to coord classes
iangow May 27, 2026
530cfbc
Move axes setup to coord classes
iangow May 27, 2026
05a1a4b
Move polar border blanking to themeable
iangow May 27, 2026
65a3d69
Document custom themeable extension path
iangow May 27, 2026
0a2cf79
Added `guide_axis_theta()` (initial pass).
iangow May 27, 2026
99921ca
fix guide_axis_theta: use 'auto' mode so angle is relative to tangent
iangow May 27, 2026
c71e9d4
Document guide_axis_theta semantics
iangow May 28, 2026
b373f12
fix(coord_polar): swap axis titles when theta='y'
has2k1 Jun 17, 2026
0ec324e
fix(coord_polar): correct polar coordinate setup
has2k1 Jun 17, 2026
05b6ce1
fix(coord_radial): align rotate_angle labels to spokes and keep them …
has2k1 Jun 17, 2026
2f5a75d
fix(coord_radial): draw radial axis labels above the geoms
has2k1 Jun 17, 2026
7e1d66e
feat(coord_radial): add reverse argument and per-panel range derivation
has2k1 Jun 17, 2026
e206179
fix(coord_polar): layer gridlines below geoms, axis labels above
has2k1 Jun 17, 2026
0c68a36
test(coord_polar): fix stale p9polar assertion, drop introspective test
has2k1 Jul 8, 2026
a50f31f
fix(coord_polar): skip cartesian per-side axis setup
has2k1 Jul 8, 2026
c13b860
fix(theme): guard axis_line blank_ax against non-cartesian spines
has2k1 Jul 8, 2026
2146c5d
feat(coord): bind coord._owner to the plot at draw setup
has2k1 Jul 8, 2026
1d4fb29
fix(coord_radial): read guide_axis_theta angle via coord._owner
has2k1 Jul 8, 2026
b0a9fe2
feat(layout): reserve polar panel clearance for theta/r axis decorations
has2k1 Jul 8, 2026
0c299f6
feat(theme): add axis_line_theta/axis_line_r for polar spines
has2k1 Jul 8, 2026
862e964
fix(coord_radial): persist themed theta/r spine visibility across draws
has2k1 Jul 8, 2026
d2560ee
test(coord_polar): cover axis_line control of polar/radial spines
has2k1 Jul 8, 2026
dd1e5de
docs(coord_radial): tighten p9PolarAxes.draw docstring precision
has2k1 Jul 8, 2026
89dc0a1
fix(coord_radial): make axis_line polar spine locking re-entrant
has2k1 Jul 8, 2026
5d39f43
feat(typing): add PolarSide alias for theta/r side names
has2k1 Jul 9, 2026
8dff09e
feat(utils): widen side_artists/MARGIN_SIDE for polar sides
has2k1 Jul 9, 2026
61125f8
feat(mpl): make axis_at resolve polar theta/r sides
has2k1 Jul 9, 2026
123e8d3
feat(mpl): add axis_at_side bookkeeping to p9PolarAxes
has2k1 Jul 9, 2026
96e5df1
fix(coord_polar): activate theta/r tick sides from scale position
has2k1 Jul 9, 2026
22b0780
refactor(coord_polar): reuse p9PolarAxes.thetaaxis/raxis instead of a…
has2k1 Jul 9, 2026
997f64c
feat(coord_radial): remove r_axis_inside, drive r placement from scal…
has2k1 Jul 9, 2026
e5d3d43
feat(theme): add axis_text_theta/axis_text_r themeables for polar panels
has2k1 Jul 9, 2026
186fb48
fix(coord_radial): preserve themed r-axis tick style across mpl reset…
has2k1 Jul 9, 2026
ad59ea3
feat(theme): add axis_ticks_major_theta/axis_ticks_major_r themeables
has2k1 Jul 9, 2026
dd6359f
feat(theme): add axis_ticks_minor_theta/axis_ticks_minor_r themeables
has2k1 Jul 9, 2026
48fa6b7
docs(tests): clarify axis_ticks_minor_theming test only exercises r-axis
has2k1 Jul 9, 2026
ea7910e
fix(theme): stop zeroing polar tick length, add axis_ticks_length_the…
has2k1 Jul 9, 2026
5785400
docs(theme): explain why axis_ticks_length_theta/r don't split by bou…
has2k1 Jul 9, 2026
7b452ac
test(coord_polar): cover scale position driving theta/r side choice
has2k1 Jul 9, 2026
6e8cf7c
feat(theme): expose polar theta/r themeables in theme signature and docs
has2k1 Jul 9, 2026
024731f
refactor(coord_polar): lock r-axis tick style from setup_ax
has2k1 Jul 9, 2026
960356f
fix(coord_polar): put theta tick labels on the mark's side
has2k1 Jul 10, 2026
5ae1c97
fix(coord_polar): let scale position move only the axis title
has2k1 Jul 14, 2026
4b22230
fix(coord_radial): restore theta minor grid breaks
has2k1 Jul 15, 2026
857d74b
fix(coord_polar): expand theta axis per the expand flag
has2k1 Jul 15, 2026
7294990
refactor(coord): make coord_radial the base, coord_polar its alias
has2k1 Jul 15, 2026
1904c62
test(coord): rename polar tests to coord_radial, keep one alias test
has2k1 Jul 15, 2026
e21fded
refactor(coords): separate radial data and display axes
has2k1 Jul 15, 2026
2d6bbf2
fix(coord_radial): align r axis with start
has2k1 Jul 17, 2026
ad6d132
fix(coord_radial): align radial axis text
has2k1 Jul 17, 2026
0de57c3
fix(coord_radial): hide unoccupied radial axis line
has2k1 Jul 17, 2026
5852f1b
fix(coord_radial): keep radial axis at start
has2k1 Jul 17, 2026
9699665
fix(coord_radial): align explicit full-circle axes
has2k1 Jul 17, 2026
3a00915
fix(coord_radial): equalize theta label clearance
has2k1 Jul 17, 2026
337cca4
fix(coord_radial): trim unused theta label descent
has2k1 Jul 20, 2026
b7f2aa6
fix(coord_radial): reverse theta in place, not by mirroring
has2k1 Jul 21, 2026
6b06e7c
fix(coord_radial): reverse radial geometry
has2k1 Jul 21, 2026
2b61f33
feat(coord_radial): render a second r-axis at the end spoke
has2k1 Jul 22, 2026
96867ad
refactor(iapi): allow a polar side on sec_axis_view.position
has2k1 Jul 22, 2026
59c19b1
feat(coord_radial): wire a secondary r-axis from scale sec_axis
has2k1 Jul 22, 2026
7244518
test(coord_radial): verify secondary r-axis theming and title sides
has2k1 Jul 22, 2026
7e5e7f0
test(coord_radial): secondary r-axis with theta='y'
has2k1 Jul 22, 2026
15d364c
fix(coord_radial): correct secondary r-axis spine spoke and drop dead…
has2k1 Jul 22, 2026
325d3a4
fix(coord_radial): register secondary-axis lim_changed callback signal
has2k1 Jul 23, 2026
06c93cb
fix(coord_radial): negate secondary r-axis breaks under reverse="r"
has2k1 Jul 23, 2026
3b34bfe
feat(coord_radial): render the full-circle secondary r-axis
has2k1 Jul 23, 2026
310db84
fix(coord_radial): keep secondary r-axis marks on the spoke and above…
has2k1 Jul 23, 2026
efbee99
fix(coord_radial): move secondary r-axis to the spoke opposite the pr…
has2k1 Jul 23, 2026
e086df9
fix(coord_radial): reposition axis titles when theta="y"
has2k1 Jul 23, 2026
be581e2
feat(coord_radial): aspect from tight sector bounding box
has2k1 Jul 23, 2026
e535eb6
fix(coord_radial): fill the panel with partial arcs
has2k1 Jul 23, 2026
c6d724f
test(coord_radial): assert partial arcs fill panels undistorted
has2k1 Jul 23, 2026
ae844c3
test(coord_radial): visual baselines for partial-arc spacing
has2k1 Jul 23, 2026
929080a
fix(coord_radial): fill narrow donut arcs to the panel edge
has2k1 Jul 27, 2026
f1f7ea1
fix(coord_radial): render the wedge background undistorted
has2k1 Jul 27, 2026
6bc8705
fix(coord_radial): clip geoms to the arc on a single render
has2k1 Jul 27, 2026
646c532
fix(coord_radial): stop r-labels reserving spurious panel margin
has2k1 Jul 27, 2026
b31c184
fix(coord_radial): reserve gulley and strip space for polar decorations
has2k1 Jul 28, 2026
edeec46
fix(coord_radial): stop the donut hole from drawing an axis line
has2k1 Jul 29, 2026
f4801d8
refactor(coord_radial): drop the direction parameter
has2k1 Jul 29, 2026
2777d66
docs(coord_radial): correct the polar spine visibility rationale
has2k1 Jul 29, 2026
57a77e8
refactor(guides)!: remove guide_axis_theta
has2k1 Jul 30, 2026
b08e703
test(coord_radial): drop tests that assert render state
has2k1 Aug 11, 2026
b8d9272
test(coord_radial): add arc and donut baseline images
has2k1 Aug 11, 2026
e3d938b
test(coord_radial): add theta-axis, expansion and zoom images
has2k1 Aug 11, 2026
f16a519
test(coord_radial): add reverse-axis baseline images
has2k1 Aug 11, 2026
6749cee
test(coord_radial): add geom-interaction baseline images
has2k1 Aug 11, 2026
f9c1bb6
test(coord_radial): add axis-line baseline images
has2k1 Aug 11, 2026
2b77cb8
test(coord_radial): add tick, label and grid theming images
has2k1 Aug 11, 2026
231d049
test(coord_radial): add axis-title and secondary-axis images
has2k1 Aug 11, 2026
c4e6df5
test(coord_radial): add facet, label-gap and legend images
has2k1 Aug 11, 2026
0402cc3
test(coord_radial): review and trim the image matrix
has2k1 Aug 11, 2026
45c7624
docs(coord_radial): correct what expand buffers
has2k1 Aug 12, 2026
d90bf2a
test(themes): add the extension-themeable baseline image
has2k1 Aug 12, 2026
09102b2
feat(coord_radial): place the secondary theta breaks on the arc
has2k1 Aug 12, 2026
f065d88
feat(coord_radial): draw the secondary theta axis on the inner rim
has2k1 Aug 12, 2026
a74684b
test(coord_radial): cover secondary theta axis variants
has2k1 Aug 12, 2026
0365c1b
refactor(coord_flip): narrow the secondary axis side before flipping it
has2k1 Aug 12, 2026
e4f5b91
fix(themes): hide the radial tick labels when axis_text_r is blank
has2k1 Aug 12, 2026
326b559
fix(coord_radial): reject zero-width arcs
has2k1 Aug 13, 2026
55f402f
fix(coord_radial): transform all position aesthetics
has2k1 Aug 13, 2026
1faae45
fix(layout): keep polar tick labels inside the figure
has2k1 Aug 13, 2026
16722b3
fix(layout): reserve polar space only where a label reaches
has2k1 Aug 13, 2026
6afc200
refactor(coord_radial): centralise polar label geometry
has2k1 Aug 13, 2026
a7140e4
fix(coord_radial): align theta labels with their ticks
has2k1 Aug 13, 2026
cebc705
fix(coord_radial): align r labels with their spokes
has2k1 Aug 13, 2026
dbceebf
fix(layout): reserve space by polar label direction
has2k1 Aug 13, 2026
5b1b510
refactor(coord_radial): move polar geometry to panel axes
has2k1 Aug 13, 2026
596006f
test(coord_radial): add the baseline images
has2k1 Aug 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions doc/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,5 @@ objects.json
objects.txt
objects.inv
gallery/thumbnails

**/*.quarto_ipynb
30 changes: 30 additions & 0 deletions doc/_quartodoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -403,13 +403,25 @@ quartodoc:
contents:
- aspect_ratio
- axis_line
- axis_line_r
- axis_line_r_end
- axis_line_r_start
- axis_line_theta
- axis_line_theta_inside
- axis_line_theta_outside
- axis_line_x
- axis_line_x_bottom
- axis_line_x_top
- axis_line_y
- axis_line_y_left
- axis_line_y_right
- axis_text
- axis_text_r
- axis_text_r_end
- axis_text_r_start
- axis_text_theta
- axis_text_theta_inside
- axis_text_theta_outside
- axis_text_x
- axis_text_x_bottom
- axis_text_x_top
Expand All @@ -419,19 +431,35 @@ quartodoc:
- axis_ticks
- axis_ticks_length
- axis_ticks_length_major
- axis_ticks_length_major_r
- axis_ticks_length_major_theta
- axis_ticks_length_major_x
- axis_ticks_length_major_y
- axis_ticks_length_minor
- axis_ticks_length_minor_r
- axis_ticks_length_minor_theta
- axis_ticks_length_minor_x
- axis_ticks_length_minor_y
- axis_ticks_major
- axis_ticks_major_r
- axis_ticks_major_r_end
- axis_ticks_major_r_start
- axis_ticks_major_theta
- axis_ticks_major_theta_inside
- axis_ticks_major_theta_outside
- axis_ticks_major_x
- axis_ticks_major_x_bottom
- axis_ticks_major_x_top
- axis_ticks_major_y
- axis_ticks_major_y_left
- axis_ticks_major_y_right
- axis_ticks_minor
- axis_ticks_minor_r
- axis_ticks_minor_r_end
- axis_ticks_minor_r_start
- axis_ticks_minor_theta
- axis_ticks_minor_theta_inside
- axis_ticks_minor_theta_outside
- axis_ticks_minor_x
- axis_ticks_minor_x_bottom
- axis_ticks_minor_x_top
Expand Down Expand Up @@ -565,6 +593,8 @@ quartodoc:
- coord_equal
- coord_fixed
- coord_flip
- coord_polar
- coord_radial
- coord_trans

- title: Composing Plots
Expand Down
4 changes: 4 additions & 0 deletions doc/changelog.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ title: Changelog
transformation of the primary axis with [](:class:`~plotnine.sec_axis`), or as a
mirror of the primary axis with [](:func:`~plotnine.dup_axis`).

- [](:class:`~plotnine.coord_radial`) can now draw an angular scale's secondary
axis around the inner rim. Add a [](:class:`~plotnine.sec_axis`) to the scale
and set `inner_radius > 0`.

- Added [](:class:`~plotnine.composition.plot_layout`) with which you can customise the
layout of plots in composition.

Expand Down
4 changes: 4 additions & 0 deletions plotnine/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
coord_equal,
coord_fixed,
coord_flip,
coord_polar,
coord_radial,
coord_trans,
)
from .facets import (
Expand Down Expand Up @@ -291,6 +293,8 @@
"coord_equal",
"coord_fixed",
"coord_flip",
"coord_polar",
"coord_radial",
"coord_trans",
"dup_axis",
"element_blank",
Expand Down
Loading
Loading