ultraplot 2.4.0__tar.gz → 2.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. {ultraplot-2.4.0 → ultraplot-2.5.0}/.github/workflows/publish-pypi.yml +5 -49
  2. ultraplot-2.5.0/.zenodo.json +30 -0
  3. {ultraplot-2.4.0 → ultraplot-2.5.0}/CITATION.cff +6 -2
  4. {ultraplot-2.4.0/ultraplot.egg-info → ultraplot-2.5.0}/PKG-INFO +1 -1
  5. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/api.rst +10 -0
  6. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/fonts.py +82 -0
  7. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/insets_panels.py +72 -1
  8. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/projections.py +54 -0
  9. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/subplots.py +8 -0
  10. {ultraplot-2.4.0 → ultraplot-2.5.0}/pyproject.toml +1 -0
  11. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/__init__.py +1 -0
  12. ultraplot-2.5.0/ultraplot/_subplots.py +398 -0
  13. ultraplot-2.5.0/ultraplot/_version.py +1 -0
  14. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/base.py +196 -9
  15. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/geo.py +791 -7
  16. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/colors.py +22 -1
  17. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/constructor.py +20 -3
  18. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/figure.py +184 -405
  19. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/gridspec.py +3 -3
  20. ultraplot-2.5.0/ultraplot/internals/__init__.py +227 -0
  21. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/docstring.py +53 -43
  22. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/fonts.py +83 -2
  23. ultraplot-2.4.0/ultraplot/internals/__init__.py → ultraplot-2.5.0/ultraplot/internals/kwargs.py +59 -202
  24. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/rcsetup.py +63 -0
  25. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_axes.py +44 -0
  26. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_colors.py +72 -1
  27. ultraplot-2.5.0/ultraplot/tests/test_docstring_helpers.py +63 -0
  28. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_figure.py +141 -0
  29. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_fonts.py +180 -0
  30. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_geographic.py +188 -3
  31. ultraplot-2.5.0/ultraplot/tests/test_inset.py +372 -0
  32. ultraplot-2.5.0/ultraplot/tests/test_kwargs_helpers.py +80 -0
  33. ultraplot-2.5.0/ultraplot/tests/test_release_metadata.py +106 -0
  34. ultraplot-2.5.0/ultraplot/tests/test_subplot_manager.py +406 -0
  35. ultraplot-2.5.0/ultraplot/tests/test_textalign.py +620 -0
  36. ultraplot-2.5.0/ultraplot/textalign.py +640 -0
  37. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/ui.py +6 -2
  38. {ultraplot-2.4.0 → ultraplot-2.5.0/ultraplot.egg-info}/PKG-INFO +1 -1
  39. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot.egg-info/SOURCES.txt +8 -2
  40. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot.egg-info/scm_file_list.json +403 -397
  41. ultraplot-2.5.0/ultraplot.egg-info/scm_version.json +8 -0
  42. ultraplot-2.4.0/tools/release/publish_zenodo.py +0 -364
  43. ultraplot-2.4.0/tools/release/sync_citation.py +0 -168
  44. ultraplot-2.4.0/ultraplot/_version.py +0 -1
  45. ultraplot-2.4.0/ultraplot/tests/test_inset.py +0 -29
  46. ultraplot-2.4.0/ultraplot/tests/test_release_metadata.py +0 -143
  47. ultraplot-2.4.0/ultraplot.egg-info/scm_version.json +0 -8
  48. {ultraplot-2.4.0 → ultraplot-2.5.0}/.github/ISSUE_TEMPLATE.md +0 -0
  49. {ultraplot-2.4.0 → ultraplot-2.5.0}/.github/dependabot.yml +0 -0
  50. {ultraplot-2.4.0 → ultraplot-2.5.0}/.github/micromamba-condarc.yml +0 -0
  51. {ultraplot-2.4.0 → ultraplot-2.5.0}/.github/workflows/build-ultraplot.yml +0 -0
  52. {ultraplot-2.4.0 → ultraplot-2.5.0}/.github/workflows/main.yml +0 -0
  53. {ultraplot-2.4.0 → ultraplot-2.5.0}/.github/workflows/test-map.yml +0 -0
  54. {ultraplot-2.4.0 → ultraplot-2.5.0}/.gitignore +0 -0
  55. {ultraplot-2.4.0 → ultraplot-2.5.0}/.pre-commit-config.yaml +0 -0
  56. {ultraplot-2.4.0 → ultraplot-2.5.0}/.readthedocs.yml +0 -0
  57. {ultraplot-2.4.0 → ultraplot-2.5.0}/CODEOFCONDUCT.md +0 -0
  58. {ultraplot-2.4.0 → ultraplot-2.5.0}/CONTRIBUTING.rst +0 -0
  59. {ultraplot-2.4.0 → ultraplot-2.5.0}/INSTALL.rst +0 -0
  60. {ultraplot-2.4.0 → ultraplot-2.5.0}/LICENSE.txt +0 -0
  61. {ultraplot-2.4.0 → ultraplot-2.5.0}/README.rst +0 -0
  62. {ultraplot-2.4.0 → ultraplot-2.5.0}/UltraPlotLogo.svg +0 -0
  63. {ultraplot-2.4.0 → ultraplot-2.5.0}/codecov.yml +0 -0
  64. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/1dplots.py +0 -0
  65. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/2dplots.py +0 -0
  66. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/Makefile +0 -0
  67. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_ext/notoc.py +0 -0
  68. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_scripts/fetch_releases.py +0 -0
  69. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/custom.css +0 -0
  70. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/custom.js +0 -0
  71. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/example_plots/cartesian_example.svg +0 -0
  72. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/example_plots/colorbars_legends_example.svg +0 -0
  73. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/example_plots/colormaps_example.svg +0 -0
  74. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/example_plots/panels_example.svg +0 -0
  75. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/example_plots/projection_example.svg +0 -0
  76. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/example_plots/subplot_example.svg +0 -0
  77. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/logo_blank.svg +0 -0
  78. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/logo_long.png +0 -0
  79. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/logo_long.svg +0 -0
  80. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/logo_social.png +0 -0
  81. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/logo_social.svg +0 -0
  82. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_static/logo_square.png +0 -0
  83. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/_templates/whatsnew_sidebar.html +0 -0
  84. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/about.rst +0 -0
  85. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/basics.py +0 -0
  86. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/cartesian.py +0 -0
  87. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/colorbars_legends.py +0 -0
  88. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/colormaps.py +0 -0
  89. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/colors.py +0 -0
  90. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/conf.py +0 -0
  91. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/configuration.rst +0 -0
  92. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/contributing.rst +0 -0
  93. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/cycles.py +0 -0
  94. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/README.txt +0 -0
  95. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/colors/01_cycle_colormap.py +0 -0
  96. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/colors/02_diverging_colormap.py +0 -0
  97. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/colors/README.txt +0 -0
  98. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/geo/01_robin_tracks.py +0 -0
  99. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/geo/02_orthographic_views.py +0 -0
  100. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/geo/03_projections_features.py +0 -0
  101. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/geo/04_choropleth.py +0 -0
  102. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/geo/README.txt +0 -0
  103. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/layouts/01_shared_axes_abc.py +0 -0
  104. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/layouts/02_complex_layout_insets.py +0 -0
  105. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/layouts/03_spanning_labels.py +0 -0
  106. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/layouts/README.txt +0 -0
  107. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/legend_types/01_semantic_legends.py +0 -0
  108. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/legends_colorbars/01_multi_colorbars.py +0 -0
  109. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/legends_colorbars/02_legend_inset_colorbar.py +0 -0
  110. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/legends_colorbars/03_semantic_legends.py +0 -0
  111. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/legends_colorbars/README.txt +0 -0
  112. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/01_curved_quiver.py +0 -0
  113. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/02_network_graph.py +0 -0
  114. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/03_lollipop.py +0 -0
  115. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/04_datetime_series.py +0 -0
  116. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/05_box_violin.py +0 -0
  117. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/06_ridge_plot.py +0 -0
  118. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/07_radar.py +0 -0
  119. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/07_sankey.py +0 -0
  120. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/08_chord_diagram.py +0 -0
  121. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/08_ternary.py +0 -0
  122. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/09_phylogeny.py +0 -0
  123. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/10_circos_bed.py +0 -0
  124. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/11_topic_ribbon.py +0 -0
  125. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/12_taylor_diagram.py +0 -0
  126. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/examples/plot_types/README.txt +0 -0
  127. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/external-links.rst +0 -0
  128. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/faq.rst +0 -0
  129. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/index.rst +0 -0
  130. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/install.rst +0 -0
  131. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/lazy_loading.rst +0 -0
  132. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/make.bat +0 -0
  133. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/networks.py +0 -0
  134. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/requirements-rtd.txt +0 -0
  135. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/sphinxext/custom_roles.py +0 -0
  136. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/sphinxext/jupytext_cache.py +0 -0
  137. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/stats.py +0 -0
  138. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/ultraplotrc +0 -0
  139. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/usage.rst +0 -0
  140. {ultraplot-2.4.0 → ultraplot-2.5.0}/docs/why.rst +0 -0
  141. {ultraplot-2.4.0 → ultraplot-2.5.0}/environment.yml +0 -0
  142. {ultraplot-2.4.0 → ultraplot-2.5.0}/logo/PermanentMarker-Regular.ttf +0 -0
  143. {ultraplot-2.4.0 → ultraplot-2.5.0}/logo/environment-logo.yml +0 -0
  144. {ultraplot-2.4.0 → ultraplot-2.5.0}/logo/logo.py +0 -0
  145. {ultraplot-2.4.0 → ultraplot-2.5.0}/logo/run-linter.sh +0 -0
  146. {ultraplot-2.4.0 → ultraplot-2.5.0}/logo/webicon.py +0 -0
  147. {ultraplot-2.4.0 → ultraplot-2.5.0}/logo/whyUltraPlot.svg +0 -0
  148. {ultraplot-2.4.0 → ultraplot-2.5.0}/noxfile.py +0 -0
  149. {ultraplot-2.4.0 → ultraplot-2.5.0}/requirements-minimal.txt +0 -0
  150. {ultraplot-2.4.0 → ultraplot-2.5.0}/setup.cfg +0 -0
  151. {ultraplot-2.4.0 → ultraplot-2.5.0}/tools/ci/build_test_map.py +0 -0
  152. {ultraplot-2.4.0 → ultraplot-2.5.0}/tools/ci/select_tests.py +0 -0
  153. {ultraplot-2.4.0 → ultraplot-2.5.0}/tools/ci/version_support.py +0 -0
  154. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/_lazy.py +0 -0
  155. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/__init__.py +0 -0
  156. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/_formatting.py +0 -0
  157. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/cartesian.py +0 -0
  158. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/container.py +0 -0
  159. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/plot.py +0 -0
  160. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/plot_types/__init__.py +0 -0
  161. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/plot_types/circlize.py +0 -0
  162. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/plot_types/curved_quiver.py +0 -0
  163. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/plot_types/ribbon.py +0 -0
  164. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/plot_types/sankey.py +0 -0
  165. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/polar.py +0 -0
  166. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/shared.py +0 -0
  167. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/taylor.py +0 -0
  168. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/axes/three.py +0 -0
  169. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Algae.rgb +0 -0
  170. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Amp.rgb +0 -0
  171. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/BR.rgb +0 -0
  172. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Balance.rgb +0 -0
  173. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues1_r.xml +0 -0
  174. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues2.xml +0 -0
  175. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues3.xml +0 -0
  176. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues4_r.xml +0 -0
  177. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues5.xml +0 -0
  178. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues6.xml +0 -0
  179. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues7.xml +0 -0
  180. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues8.xml +0 -0
  181. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Blues9.xml +0 -0
  182. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Boreal.json +0 -0
  183. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns1.xml +0 -0
  184. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns2.xml +0 -0
  185. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns3.xml +0 -0
  186. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns4.xml +0 -0
  187. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns5.xml +0 -0
  188. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns6.xml +0 -0
  189. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns7.xml +0 -0
  190. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns8.xml +0 -0
  191. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Browns9.xml +0 -0
  192. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/ColdHot.rgb +0 -0
  193. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Crest.rgb +0 -0
  194. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Curl.rgb +0 -0
  195. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Deep.rgb +0 -0
  196. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Delta.rgb +0 -0
  197. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Dense.rgb +0 -0
  198. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Div.json +0 -0
  199. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/DryWet.json +0 -0
  200. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Dusk.json +0 -0
  201. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Fire.json +0 -0
  202. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Flare.rgb +0 -0
  203. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Glacial.json +0 -0
  204. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Greens1_r.xml +0 -0
  205. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Greens2.xml +0 -0
  206. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Greens3_r.xml +0 -0
  207. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Greens4.xml +0 -0
  208. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Greens5.xml +0 -0
  209. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Greens6_r.xml +0 -0
  210. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Greens7.xml +0 -0
  211. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Greens8.xml +0 -0
  212. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Haline.rgb +0 -0
  213. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Ice.rgb +0 -0
  214. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/IceFire.rgb +0 -0
  215. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Mako.rgb +0 -0
  216. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Marine.json +0 -0
  217. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Matter.rgb +0 -0
  218. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Mono.txt +0 -0
  219. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/MonoCycle.txt +0 -0
  220. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/NegPos.json +0 -0
  221. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Oranges1.xml +0 -0
  222. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Oranges2.xml +0 -0
  223. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Oranges3.xml +0 -0
  224. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Oranges4.xml +0 -0
  225. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Oxy.rgb +0 -0
  226. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Phase.rgb +0 -0
  227. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Purples1_r.xml +0 -0
  228. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Purples2.xml +0 -0
  229. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Purples3.xml +0 -0
  230. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Reds1.xml +0 -0
  231. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Reds2.xml +0 -0
  232. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Reds3.xml +0 -0
  233. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Reds4.xml +0 -0
  234. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Reds5.xml +0 -0
  235. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Rocket.rgb +0 -0
  236. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Solar.rgb +0 -0
  237. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Speed.rgb +0 -0
  238. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Stellar.json +0 -0
  239. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Sunrise.json +0 -0
  240. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Sunset.json +0 -0
  241. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Tempo.rgb +0 -0
  242. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Thermal.rgb +0 -0
  243. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Turbid.rgb +0 -0
  244. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Vivid.xml +0 -0
  245. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Vlag.rgb +0 -0
  246. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Yellows1.xml +0 -0
  247. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Yellows2.xml +0 -0
  248. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Yellows3.xml +0 -0
  249. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/Yellows4.xml +0 -0
  250. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/acton.txt +0 -0
  251. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/bam.txt +0 -0
  252. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/bamO.txt +0 -0
  253. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/bamako.txt +0 -0
  254. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/batlow.txt +0 -0
  255. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/batlowK.txt +0 -0
  256. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/batlowW.txt +0 -0
  257. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/berlin.txt +0 -0
  258. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/bilbao.txt +0 -0
  259. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/broc.txt +0 -0
  260. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/brocO.txt +0 -0
  261. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/buda.txt +0 -0
  262. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/bukavu.txt +0 -0
  263. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/cork.txt +0 -0
  264. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/corkO.txt +0 -0
  265. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/davos.txt +0 -0
  266. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/devon.txt +0 -0
  267. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/fes.txt +0 -0
  268. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/hawaii.txt +0 -0
  269. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/imola.txt +0 -0
  270. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/lajolla.txt +0 -0
  271. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/lapaz.txt +0 -0
  272. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/lisbon.txt +0 -0
  273. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/nuuk.txt +0 -0
  274. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/oleron.txt +0 -0
  275. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/oslo.txt +0 -0
  276. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/roma.txt +0 -0
  277. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/romaO.txt +0 -0
  278. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/tofino.txt +0 -0
  279. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/tokyo.txt +0 -0
  280. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/turku.txt +0 -0
  281. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/vanimo.txt +0 -0
  282. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/vik.txt +0 -0
  283. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cmaps/vikO.txt +0 -0
  284. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/colorbar.py +0 -0
  285. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/colors/opencolor.txt +0 -0
  286. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/colors/xkcd.txt +0 -0
  287. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/config.py +0 -0
  288. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/538.hex +0 -0
  289. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/FlatUI.hex +0 -0
  290. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/Qual1.rgb +0 -0
  291. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/Qual2.rgb +0 -0
  292. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/bmh.hex +0 -0
  293. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/classic.hex +0 -0
  294. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/colorblind.hex +0 -0
  295. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/colorblind10.hex +0 -0
  296. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/default.hex +0 -0
  297. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/ggplot.hex +0 -0
  298. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/seaborn.hex +0 -0
  299. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/cycles/tableau.hex +0 -0
  300. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/demos.py +0 -0
  301. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/externals/__init__.py +0 -0
  302. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/externals/hsluv.py +0 -0
  303. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Bold.ttf +0 -0
  304. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
  305. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
  306. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Light.ttf +0 -0
  307. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Medium.ttf +0 -0
  308. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Regular.ttf +0 -0
  309. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
  310. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
  311. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Black.ttf +0 -0
  312. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
  313. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Bold.ttf +0 -0
  314. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
  315. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
  316. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
  317. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
  318. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
  319. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Italic.ttf +0 -0
  320. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Light.ttf +0 -0
  321. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
  322. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Medium.ttf +0 -0
  323. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
  324. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Regular.ttf +0 -0
  325. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
  326. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
  327. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_FIRAMATH.txt +0 -0
  328. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_FIRASANS.txt +0 -0
  329. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_NOTOSANS.txt +0 -0
  330. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_NOTOSERIF.txt +0 -0
  331. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_OPENSANS.txt +0 -0
  332. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_ROBOTO.txt +0 -0
  333. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_SOURCESANS.txt +0 -0
  334. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_SOURCESERIF.txt +0 -0
  335. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_TEXGYRE.txt +0 -0
  336. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_UBUNTU.txt +0 -0
  337. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/NotoSans-Bold.ttf +0 -0
  338. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
  339. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/NotoSans-Italic.ttf +0 -0
  340. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/NotoSans-Regular.ttf +0 -0
  341. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
  342. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
  343. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
  344. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
  345. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-Bold.ttf +0 -0
  346. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
  347. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-Italic.ttf +0 -0
  348. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-Regular.ttf +0 -0
  349. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
  350. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  351. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Black.ttf +0 -0
  352. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
  353. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Bold.ttf +0 -0
  354. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
  355. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Italic.ttf +0 -0
  356. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Light.ttf +0 -0
  357. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
  358. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Medium.ttf +0 -0
  359. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
  360. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Regular.ttf +0 -0
  361. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
  362. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
  363. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
  364. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
  365. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
  366. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
  367. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
  368. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
  369. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
  370. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
  371. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
  372. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
  373. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
  374. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
  375. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
  376. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
  377. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
  378. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
  379. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
  380. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
  381. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
  382. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
  383. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
  384. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
  385. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
  386. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
  387. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
  388. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Light.ttf +0 -0
  389. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
  390. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
  391. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
  392. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
  393. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
  394. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
  395. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
  396. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
  397. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
  398. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
  399. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
  400. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
  401. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
  402. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
  403. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
  404. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
  405. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
  406. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreheros-bold.ttf +0 -0
  407. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
  408. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreheros-italic.ttf +0 -0
  409. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreheros-regular.ttf +0 -0
  410. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
  411. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
  412. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
  413. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
  414. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreschola-bold.ttf +0 -0
  415. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
  416. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreschola-italic.ttf +0 -0
  417. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyreschola-regular.ttf +0 -0
  418. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyretermes-bold.ttf +0 -0
  419. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
  420. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyretermes-italic.ttf +0 -0
  421. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/fonts/texgyretermes-regular.ttf +0 -0
  422. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/benchmarks.py +0 -0
  423. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/context.py +0 -0
  424. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/guides.py +0 -0
  425. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/inputs.py +0 -0
  426. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/labels.py +0 -0
  427. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/versions.py +0 -0
  428. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/internals/warnings.py +0 -0
  429. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/legend.py +0 -0
  430. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/proj.py +0 -0
  431. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/scale.py +0 -0
  432. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/__init__.py +0 -0
  433. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/conftest.py +0 -0
  434. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_1dplots.py +0 -0
  435. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_2dplots.py +0 -0
  436. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_animation.py +0 -0
  437. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_axes_alt_styles.py +0 -0
  438. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_axes_base_colorbar_helpers.py +0 -0
  439. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_base.py +0 -0
  440. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_circlize_integration.py +0 -0
  441. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_colorbar.py +0 -0
  442. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_colorbar_helpers_extra.py +0 -0
  443. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_colormap.py +0 -0
  444. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_colormap_helpers_extra.py +0 -0
  445. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_colors_helpers.py +0 -0
  446. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_config.py +0 -0
  447. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_config_helpers_extra.py +0 -0
  448. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_constructor.py +0 -0
  449. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_constructor_helpers_extra.py +0 -0
  450. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_core_versions.py +0 -0
  451. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_demos.py +0 -0
  452. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_docs.py +0 -0
  453. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_docs_fetch_releases.py +0 -0
  454. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_docs_search.py +0 -0
  455. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_external_axes_container_integration.py +0 -0
  456. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_external_container_edge_cases.py +0 -0
  457. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_external_container_mocked.py +0 -0
  458. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_format.py +0 -0
  459. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_gridspec.py +0 -0
  460. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_handlers.py +0 -0
  461. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_imports.py +0 -0
  462. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_imshow.py +0 -0
  463. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_inputs.py +0 -0
  464. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_inputs_helpers.py +0 -0
  465. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_integration.py +0 -0
  466. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_legend.py +0 -0
  467. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_plot.py +0 -0
  468. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_proj_helpers.py +0 -0
  469. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_projections.py +0 -0
  470. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_rcsetup_helpers.py +0 -0
  471. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_scale_helpers.py +0 -0
  472. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_semantic_legend.py +0 -0
  473. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_statistical_plotting.py +0 -0
  474. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_subplots.py +0 -0
  475. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_text_helpers.py +0 -0
  476. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_tickers.py +0 -0
  477. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/tests/test_ultralayout.py +0 -0
  478. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/text.py +0 -0
  479. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/ticker.py +0 -0
  480. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/ultralayout.py +0 -0
  481. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot/utils.py +0 -0
  482. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot.egg-info/dependency_links.txt +0 -0
  483. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot.egg-info/requires.txt +0 -0
  484. {ultraplot-2.4.0 → ultraplot-2.5.0}/ultraplot.egg-info/top_level.txt +0 -0
@@ -121,6 +121,11 @@ jobs:
121
121
  verbose: true
122
122
  skip-existing: true
123
123
 
124
+ # NOTE: Publishing this release is what triggers the Zenodo archive. Zenodo's
125
+ # GitHub integration webhooks the 'release: published' event and mints a new
126
+ # version under the concept DOI in CITATION.cff -- no job, token, or API call
127
+ # of ours is involved. The integration only sees releases published *after* it
128
+ # was enabled, so it never backfills.
124
129
  publish-github-release:
125
130
  name: Publish GitHub release
126
131
  needs: publish-pypi
@@ -133,52 +138,3 @@ jobs:
133
138
  uses: softprops/action-gh-release@v3
134
139
  with:
135
140
  generate_release_notes: true
136
-
137
- # publish-zenodo:
138
- # name: Publish Zenodo release
139
- # needs: publish-github-release
140
- # runs-on: ubuntu-latest
141
- # if: github.event_name == 'push'
142
- # permissions:
143
- # contents: read
144
- # env:
145
- # ZENODO_ACCESS_TOKEN: ${{ secrets.ZENODO_ACCESS_TOKEN }}
146
- # steps:
147
- # - uses: actions/checkout@v7
148
- # with:
149
- # fetch-depth: 0
150
- #
151
- # - uses: actions/setup-python@v6
152
- # with:
153
- # python-version: "3.12"
154
- #
155
- # - name: Install release tooling
156
- # run: |
157
- # python -m pip install --upgrade pip
158
- # python -m pip install PyYAML
159
- # shell: bash
160
- #
161
- # - name: Download artifacts
162
- # uses: actions/download-artifact@v8
163
- # with:
164
- # name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
165
- # path: dist
166
- #
167
- # - name: Generate release citation metadata
168
- # run: |
169
- # python tools/release/sync_citation.py \
170
- # --tag "${GITHUB_REF_NAME}" \
171
- # --output "${RUNNER_TEMP}/CITATION.cff"
172
- # shell: bash
173
- #
174
- # - name: Check tree stayed clean
175
- # run: |
176
- # git diff --quiet || (git status --short && git diff && exit 1)
177
- # shell: bash
178
- #
179
- # - name: Publish to Zenodo
180
- # run: |
181
- # python tools/release/publish_zenodo.py \
182
- # --dist-dir dist \
183
- # --citation-file "${RUNNER_TEMP}/CITATION.cff"
184
- # shell: bash
@@ -0,0 +1,30 @@
1
+ {
2
+ "upload_type": "software",
3
+ "title": "UltraPlot",
4
+ "description": "A succinct matplotlib wrapper for making beautiful, publication-quality graphics.",
5
+ "creators": [
6
+ {
7
+ "name": "van Elteren, Casper",
8
+ "orcid": "0000-0001-9862-8936"
9
+ },
10
+ {
11
+ "name": "Becker, Matthew R.",
12
+ "orcid": "0000-0001-7774-2246"
13
+ }
14
+ ],
15
+ "license": "mit",
16
+ "access_right": "open",
17
+ "keywords": [
18
+ "plotting",
19
+ "matplotlib",
20
+ "scientific visualization",
21
+ "wrapper"
22
+ ],
23
+ "related_identifiers": [
24
+ {
25
+ "identifier": "https://github.com/Ultraplot/UltraPlot",
26
+ "relation": "isSupplementTo",
27
+ "scheme": "url"
28
+ }
29
+ ]
30
+ }
@@ -8,8 +8,12 @@ authors:
8
8
  - family-names: "Becker"
9
9
  given-names: "Matthew R."
10
10
  orcid: "https://orcid.org/0000-0001-7774-2246"
11
- date-released: "2026-03-30"
12
- version: "2.1.5"
11
+ # NOTE: Deliberately no 'version' or 'date-released'. The package version comes
12
+ # from the git tag via setuptools_scm, and Zenodo's GitHub integration takes the
13
+ # version and publication date from the release itself. Pinning them here means
14
+ # hand-editing this file on every release, which is how it drifted to 2.1.5 while
15
+ # the project shipped 2.4.0. The DOI below is the *concept* DOI: it is stable
16
+ # across releases and always resolves to the latest version.
13
17
  doi: "10.5281/zenodo.15733564"
14
18
  repository-code: "https://github.com/Ultraplot/UltraPlot"
15
19
  license: "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultraplot
3
- Version: 2.4.0
3
+ Version: 2.5.0
4
4
  Summary: A succinct matplotlib wrapper for making beautiful, publication-quality graphics.
5
5
  Author-email: Casper van Elteren <caspervanelteren@gmail.com>, Luke Davis <lukelbd@gmail.com>
6
6
  Maintainer-email: Casper van Elteren <caspervanelteren@gmail.com>, "Matthew R. Becker" <becker.mr@gmail.com>
@@ -133,6 +133,16 @@ Demo functions
133
133
  :toctree: api
134
134
 
135
135
 
136
+ Text alignment
137
+ ==============
138
+
139
+ .. automodule:: ultraplot.textalign
140
+ :no-private-members:
141
+
142
+ .. automodsumm:: ultraplot.textalign
143
+ :toctree: api
144
+
145
+
136
146
  Miscellaneous functions
137
147
  =======================
138
148
 
@@ -100,6 +100,88 @@ fig, axs = uplt.show_fonts(family="tex-gyre")
100
100
  # :rcraw:`mathtext.fontset` back to one of matplotlib's math-specialized font sets
101
101
  # (e.g., ``'stixsans'`` or ``'dejavusans'``).
102
102
  #
103
+ # In short, math fonts can be tailored to taste at three levels, depending on
104
+ # how much of the "LaTeX look" you want:
105
+ #
106
+ # #. **Match the document font** (the default). With the ``'custom'`` font set,
107
+ # math follows the active text font -- including fonts assigned to
108
+ # individual text objects, as demonstrated below.
109
+ # #. **Computer Modern symbols**. Keep the active font for letters and numbers
110
+ # but render ``\mathcal`` and big operators with authentic Computer Modern
111
+ # glyphs by setting :rcraw:`mathtext.cm_symbols` to ``True``
112
+ # (see :ref:`below <ug_fonts_cm>`).
113
+ # #. **Full LaTeX**. Set matplotlib's :rcraw:`text.usetex` to ``True`` to
114
+ # delegate all text rendering to an external LaTeX installation. This gives
115
+ # complete LaTeX typesetting but is much slower and requires TeX on your
116
+ # system -- with the previous two options it is rarely necessary.
117
+ #
118
+ # The example below demonstrates the first level: the same expression rendered
119
+ # with different fonts assigned per text object.
120
+
121
+ # %%
122
+ import ultraplot as uplt
123
+
124
+ expr = (
125
+ r"$\mathcal{ABCXYZ}\quad"
126
+ r"\sum_{i=0}^{n}\quad"
127
+ r"\prod_{j=1}^{m}\quad"
128
+ r"\int_a^b\quad"
129
+ r"\oint_C$"
130
+ )
131
+
132
+ fig, axs = uplt.subplots(nrows=3, refwidth=6, refheight=1.1, share=False, span=False)
133
+ for ax, font in zip(axs, ("TeX Gyre Heros", "Fira Math", "DejaVu Sans")):
134
+ ax.text(0.02, 0.5, expr, transform="axes", va="center", fontsize=24, fontname=font)
135
+ ax.format(title=font, titleloc="left")
136
+ axs.format(xlocator="null", ylocator="null", xspineloc="none", yspineloc="none")
137
+
138
+ # %% [raw] raw_mimetype="text/restructuredtext"
139
+ #
140
+ # .. _ug_fonts_cm:
141
+ #
142
+ # Computer Modern symbols
143
+ # ^^^^^^^^^^^^^^^^^^^^^^^
144
+ #
145
+ # If you want to retain the active alphabet and number fonts while using
146
+ # Computer Modern for selected LaTeX-style symbols, set :rcraw:`mathtext.cm_symbols`
147
+ # to ``True``. This routes ``\mathcal`` through ``cmsy10`` and big operators like
148
+ # ``\sum``, ``\prod``, ``\int``, ``\oint``, ``\bigcup``, and ``\bigoplus`` through
149
+ # ``cmex10``. This does not affect ordinary letters and numbers, and it does not
150
+ # provide a Computer Modern ``\mathfrak`` font because matplotlib's bundled
151
+ # mathtext fonts do not include one. Note that math text is parsed when the
152
+ # figure is *drawn*, so the setting must be active at draw time -- assign it
153
+ # globally rather than wrapping plotting commands in a context block.
154
+
155
+ # %%
156
+ fig, ax = uplt.subplots(refwidth=6, refheight=1.1)
157
+ ax.text(0.02, 0.5, expr, transform="axes", va="center", fontsize=24)
158
+ ax.format(
159
+ title="Default custom math text",
160
+ titleloc="left",
161
+ xlocator="null",
162
+ ylocator="null",
163
+ xspineloc="none",
164
+ yspineloc="none",
165
+ )
166
+
167
+ # %%
168
+ uplt.rc["mathtext.cm_symbols"] = True
169
+ fig, ax = uplt.subplots(refwidth=6, refheight=1.1)
170
+ ax.text(0.02, 0.5, expr, transform="axes", va="center", fontsize=24)
171
+ ax.format(
172
+ title="Computer Modern math symbols",
173
+ titleloc="left",
174
+ xlocator="null",
175
+ ylocator="null",
176
+ xspineloc="none",
177
+ yspineloc="none",
178
+ )
179
+
180
+ # %%
181
+ uplt.rc["mathtext.cm_symbols"] = False # restore the default
182
+
183
+ # %% [raw] raw_mimetype="text/restructuredtext"
184
+ #
103
185
  # A table of math text containing the sans-serif fonts packaged with UltraPlot is shown
104
186
  # below. The dummy glyph "¤" is shown where a given math character is unavailable
105
187
  # for a particular font (in practice, the fallback font :rc:`mathtext.fallback` is used
@@ -88,8 +88,8 @@ fig.format(
88
88
  )
89
89
 
90
90
  # %%
91
- import ultraplot as uplt
92
91
  import numpy as np
92
+ import ultraplot as uplt
93
93
 
94
94
  state = np.random.RandomState(51423)
95
95
  data = (state.rand(20, 20) - 0.48).cumsum(axis=1).cumsum(axis=0)
@@ -192,3 +192,74 @@ ix = ax.inset(
192
192
  )
193
193
  ix.format(xlim=(2, 4), ylim=(2, 4), color="red8", linewidth=1.5, ticklabelweight="bold")
194
194
  ix.pcolormesh(data, cmap="Grays", levels=N, inbounds=False)
195
+
196
+ # %% [raw] raw_mimetype="text/restructuredtext"
197
+ # Hawkeye map insets
198
+ # ~~~~~~~~~~~~~~~~~~
199
+ #
200
+ # :class:`~ultraplot.axes.GeoAxes` adds :meth:`~ultraplot.axes.GeoAxes.hawkeye`
201
+ # for geographic callout maps. The inset is anchored at ``xy`` in a parent coordinate
202
+ # system, and its ``size`` is a fraction of the parent axes. Supply ``extent`` to set
203
+ # the inset map scope and draw a matching indicator and optional connectors on the
204
+ # parent map. Hawkeyes are excluded from automatic layout, so they can extend beyond
205
+ # the parent axes without reserving subplot space.
206
+ #
207
+ # Rectangular hawkeyes preserve both the requested extent and projection scale. A
208
+ # circular frame cannot simultaneously preserve projection scale and display an exact
209
+ # non-square extent. Circular hawkeyes therefore expand the shorter projected dimension
210
+ # to retain the projection; use a square extent when the exact circular map scope is
211
+ # important, or pass ``aspect='auto'`` to fit the exact extent with distortion.
212
+ #
213
+ # The following dependency-free example shows a Singapore city locator on a world map.
214
+ # The returned inset is an ordinary geographic axes, so optional geospatial libraries
215
+ # can draw external data inside it. For example, `OSMnx <https://osmnx.readthedocs.io/>`__
216
+ # can provide street geometry when it is installed separately:
217
+ #
218
+ # .. code-block:: python
219
+ #
220
+ # import osmnx as ox
221
+ # from cartopy import crs as ccrs
222
+ #
223
+ # network = ox.graph_from_point((1.3521, 103.8198), dist=8_000, network_type="drive")
224
+ # streets = ox.graph_to_gdfs(network, nodes=False)
225
+ # streets.plot(ax=inax, color="0.3", linewidth=0.4, transform=ccrs.PlateCarree())
226
+ #
227
+ # The data download and OpenStreetMap attribution are the responsibility of the
228
+ # application using that optional integration.
229
+
230
+ # %%
231
+ singapore = (103.8198, 1.3521)
232
+ fig, ax = uplt.subplots(proj="robin", refwidth=4)
233
+ ax.format(land=True, landcolor="gray8", oceancolor="blue9")
234
+ ax.plot(
235
+ *singapore,
236
+ marker="o",
237
+ color="red",
238
+ markeredgecolor="white",
239
+ markeredgewidth=0.8,
240
+ ms=5,
241
+ transform="cyl",
242
+ )
243
+ ax.text(106, 4, "Singapore", color="red", size=7, transform="map")
244
+ inax = ax.hawkeye(
245
+ (0.97, 0.97),
246
+ size=0.23,
247
+ anchor="ur",
248
+ proj="merc",
249
+ extent=(103.76, 103.90, 1.27, 1.41),
250
+ shape="circle",
251
+ target="circle",
252
+ connector="line",
253
+ color="red",
254
+ indicator_kw={"linewidth": 1.5},
255
+ )
256
+ inax.format(land=True, landcolor="gray9", oceancolor="blue9")
257
+ inax.plot(
258
+ *singapore,
259
+ marker="o",
260
+ color="red",
261
+ markeredgecolor="white",
262
+ markeredgewidth=0.8,
263
+ ms=5,
264
+ transform="cyl",
265
+ )
@@ -516,6 +516,60 @@ fig.format(
516
516
  )
517
517
 
518
518
 
519
+ # %% [raw] raw_mimetype="text/restructuredtext"
520
+ # .. _ug_geo_layout:
521
+ #
522
+ # Geographic axes in mixed subplot layouts
523
+ # -----------------------------------------
524
+ #
525
+ # Geographic axes preserve the aspect ratio required by their projection. This is
526
+ # important for interpreting distances and shapes correctly, but it creates a layout
527
+ # choice when a map shares a GridSpec with Cartesian axes or maps that have a different
528
+ # natural aspect ratio. A fixed-aspect map cannot both fill a differently shaped subplot
529
+ # slot *and* preserve its projection geometry.
530
+ #
531
+ # By default, UltraPlot preserves the map aspect. If the slot is a different shape, the
532
+ # visible map is centered inside it. This keeps the map accurate, but decorations attached
533
+ # to the visible map boundary can stop lining up with decorations on neighboring subplots.
534
+ # For example, the following uses ``abcanchor='slot'`` to attach the map's a-b-c label to
535
+ # its unadjusted GridSpec slot instead. The map itself remains aspect-faithful.
536
+
537
+ # %%
538
+ import ultraplot as uplt
539
+
540
+ layout = [[1, 1, 1, 2, 2, 2], [3, 3, 4, 4, 5, 5]]
541
+ fig, axs = uplt.subplots(layout, refwidth=2.4, proj={4: "cyl"}, share=False)
542
+ axs[3].format(
543
+ lonlim=(0, 1),
544
+ latlim=(0, 1),
545
+ abcanchor="slot", # align its a-b-c label with the Cartesian subplot slots
546
+ )
547
+ fig.format(abc="A.", abcloc="left")
548
+
549
+
550
+ # %% [raw] raw_mimetype="text/restructuredtext"
551
+ # ``abcanchor`` has two modes:
552
+ #
553
+ # * ``'axes'`` (the default) attaches the label to the visible map boundary. This is
554
+ # usually best when the map is the visual focus.
555
+ # * ``'slot'`` attaches it to the original GridSpec slot. This is useful when labels
556
+ # should form a regular grid across mixed subplot types.
557
+ #
558
+ # There are two other deliberate trade-offs, depending on what the figure needs:
559
+ #
560
+ # * Use ``aspect='auto'`` with :meth:`~ultraplot.axes.GeoAxes.format` to stretch a map
561
+ # to fill its slot. This preserves the GridSpec geometry but distorts the projection,
562
+ # so it is generally unsuitable when geographic shape or scale matters.
563
+ # * Make the map the layout reference with ``ref=4`` in the above call to
564
+ # :func:`~ultraplot.ui.subplots`. UltraPlot then resizes the overall figure so that
565
+ # the map fills its slot while retaining its aspect. This is useful when the map,
566
+ # rather than the Cartesian axes, should determine the figure geometry.
567
+ #
568
+ # If none of these trade-offs is appropriate, change the map extent so that its natural
569
+ # aspect better matches the intended GridSpec slot. That preserves projection geometry,
570
+ # but necessarily changes the plotted geographic domain.
571
+
572
+
519
573
  # %% [raw] raw_mimetype="text/restructuredtext"
520
574
  # .. _ug_zoom:
521
575
  #
@@ -395,6 +395,14 @@ for (name1, equal), (name2, group) in zip(equals, groups):
395
395
  # Explicit sharing levels still force sharing attempts and may warn when
396
396
  # incompatible axes are encountered.
397
397
  #
398
+ # When figure-level row or column labels and a shared spanning axis label use
399
+ # the same side, the row or column labels are placed nearer the axes and the
400
+ # spanning label is placed outside them. Control this gap with the
401
+ # :rc:`leftlabel.sharedpad`, :rc:`rightlabel.sharedpad`,
402
+ # :rc:`bottomlabel.sharedpad`, and :rc:`toplabel.sharedpad` settings. These
403
+ # can also be passed to ``format`` without periods; for example,
404
+ # ``fig.format(leftlabelsharedpad='2em')``.
405
+ #
398
406
  # The below examples demonstrate the effect of various axis and label sharing
399
407
  # settings on the appearance of several subplot grids.
400
408
 
@@ -66,6 +66,7 @@ exclude = ["**/*.ipynb"]
66
66
 
67
67
  [tool.pytest.ini_options]
68
68
  filterwarnings = [
69
+ "ignore:'parseString' deprecated - use 'parse_string':DeprecationWarning:matplotlib._fontconfig_pattern",
69
70
  "ignore:'resetCache' deprecated - use 'reset_cache':DeprecationWarning:matplotlib._fontconfig_pattern",
70
71
  ]
71
72
  mpl-default-style = { axes.prop_cycle = "cycler('color', ['#4c72b0ff', '#55a868ff', '#c44e52ff', '#8172b2ff', '#ccb974ff', '#64b5cdff'])" }
@@ -101,6 +101,7 @@ if TYPE_CHECKING:
101
101
  from .scale import SineLatitudeScale as SineLatitudeScale
102
102
  from .scale import SymmetricalLogScale as SymmetricalLogScale
103
103
  from .text import CurvedText as CurvedText
104
+ from .textalign import align_text as align_text
104
105
  from .ultralayout import ColorbarLayoutSolver as ColorbarLayoutSolver
105
106
  from .ultralayout import compute_ultra_positions as compute_ultra_positions
106
107
  from .ultralayout import get_grid_positions_ultra as get_grid_positions_ultra