ultraplot 2.4.1__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.
- {ultraplot-2.4.1/ultraplot.egg-info → ultraplot-2.5.0}/PKG-INFO +1 -1
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/api.rst +10 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/fonts.py +82 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/insets_panels.py +72 -1
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/projections.py +54 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/subplots.py +8 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/pyproject.toml +1 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/__init__.py +1 -0
- ultraplot-2.5.0/ultraplot/_version.py +1 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/base.py +195 -7
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/geo.py +791 -7
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/colors.py +22 -1
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/figure.py +118 -32
- ultraplot-2.5.0/ultraplot/internals/__init__.py +227 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/docstring.py +53 -43
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/fonts.py +83 -2
- ultraplot-2.4.1/ultraplot/internals/__init__.py → ultraplot-2.5.0/ultraplot/internals/kwargs.py +59 -202
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/rcsetup.py +63 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_axes.py +44 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_colors.py +72 -1
- ultraplot-2.5.0/ultraplot/tests/test_docstring_helpers.py +63 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_figure.py +64 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_fonts.py +180 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_geographic.py +172 -0
- ultraplot-2.5.0/ultraplot/tests/test_inset.py +372 -0
- ultraplot-2.5.0/ultraplot/tests/test_kwargs_helpers.py +80 -0
- ultraplot-2.5.0/ultraplot/tests/test_textalign.py +620 -0
- ultraplot-2.5.0/ultraplot/textalign.py +640 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0/ultraplot.egg-info}/PKG-INFO +1 -1
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot.egg-info/SOURCES.txt +5 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot.egg-info/scm_file_list.json +405 -400
- ultraplot-2.5.0/ultraplot.egg-info/scm_version.json +8 -0
- ultraplot-2.4.1/ultraplot/_version.py +0 -1
- ultraplot-2.4.1/ultraplot/tests/test_inset.py +0 -29
- ultraplot-2.4.1/ultraplot.egg-info/scm_version.json +0 -8
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.github/ISSUE_TEMPLATE.md +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.github/dependabot.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.github/micromamba-condarc.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.github/workflows/build-ultraplot.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.github/workflows/main.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.github/workflows/publish-pypi.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.github/workflows/test-map.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.gitignore +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.pre-commit-config.yaml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.readthedocs.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/.zenodo.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/CITATION.cff +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/CODEOFCONDUCT.md +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/CONTRIBUTING.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/INSTALL.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/LICENSE.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/README.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/UltraPlotLogo.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/codecov.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/1dplots.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/2dplots.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/Makefile +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_ext/notoc.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_scripts/fetch_releases.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/custom.css +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/custom.js +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/example_plots/cartesian_example.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/example_plots/colorbars_legends_example.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/example_plots/colormaps_example.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/example_plots/panels_example.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/example_plots/projection_example.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/example_plots/subplot_example.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/logo_blank.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/logo_long.png +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/logo_long.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/logo_social.png +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/logo_social.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_static/logo_square.png +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/_templates/whatsnew_sidebar.html +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/about.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/basics.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/cartesian.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/colorbars_legends.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/colormaps.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/colors.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/conf.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/configuration.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/contributing.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/cycles.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/README.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/colors/01_cycle_colormap.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/colors/02_diverging_colormap.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/colors/README.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/geo/01_robin_tracks.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/geo/02_orthographic_views.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/geo/03_projections_features.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/geo/04_choropleth.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/geo/README.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/layouts/01_shared_axes_abc.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/layouts/02_complex_layout_insets.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/layouts/03_spanning_labels.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/layouts/README.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/legend_types/01_semantic_legends.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/legends_colorbars/01_multi_colorbars.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/legends_colorbars/02_legend_inset_colorbar.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/legends_colorbars/03_semantic_legends.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/legends_colorbars/README.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/01_curved_quiver.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/02_network_graph.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/03_lollipop.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/04_datetime_series.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/05_box_violin.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/06_ridge_plot.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/07_radar.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/07_sankey.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/08_chord_diagram.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/08_ternary.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/09_phylogeny.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/10_circos_bed.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/11_topic_ribbon.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/12_taylor_diagram.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/examples/plot_types/README.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/external-links.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/faq.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/index.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/install.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/lazy_loading.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/make.bat +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/networks.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/requirements-rtd.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/sphinxext/custom_roles.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/sphinxext/jupytext_cache.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/stats.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/ultraplotrc +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/usage.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/docs/why.rst +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/environment.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/logo/PermanentMarker-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/logo/environment-logo.yml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/logo/logo.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/logo/run-linter.sh +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/logo/webicon.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/logo/whyUltraPlot.svg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/noxfile.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/requirements-minimal.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/setup.cfg +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/tools/ci/build_test_map.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/tools/ci/select_tests.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/tools/ci/version_support.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/_lazy.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/_subplots.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/__init__.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/_formatting.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/cartesian.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/container.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/plot.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/plot_types/__init__.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/plot_types/circlize.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/plot_types/curved_quiver.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/plot_types/ribbon.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/plot_types/sankey.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/polar.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/shared.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/taylor.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/axes/three.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Algae.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Amp.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/BR.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Balance.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues1_r.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues2.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues3.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues4_r.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues5.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues6.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues7.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues8.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Blues9.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Boreal.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns1.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns2.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns3.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns4.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns5.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns6.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns7.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns8.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Browns9.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/ColdHot.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Crest.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Curl.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Deep.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Delta.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Dense.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Div.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/DryWet.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Dusk.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Fire.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Flare.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Glacial.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Greens1_r.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Greens2.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Greens3_r.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Greens4.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Greens5.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Greens6_r.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Greens7.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Greens8.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Haline.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Ice.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/IceFire.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Mako.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Marine.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Matter.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Mono.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/MonoCycle.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/NegPos.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Oranges1.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Oranges2.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Oranges3.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Oranges4.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Oxy.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Phase.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Purples1_r.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Purples2.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Purples3.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Reds1.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Reds2.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Reds3.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Reds4.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Reds5.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Rocket.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Solar.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Speed.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Stellar.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Sunrise.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Sunset.json +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Tempo.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Thermal.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Turbid.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Vivid.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Vlag.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Yellows1.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Yellows2.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Yellows3.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/Yellows4.xml +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/acton.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/bam.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/bamO.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/bamako.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/batlow.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/batlowK.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/batlowW.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/berlin.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/bilbao.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/broc.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/brocO.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/buda.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/bukavu.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/cork.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/corkO.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/davos.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/devon.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/fes.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/hawaii.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/imola.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/lajolla.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/lapaz.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/lisbon.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/nuuk.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/oleron.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/oslo.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/roma.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/romaO.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/tofino.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/tokyo.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/turku.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/vanimo.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/vik.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cmaps/vikO.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/colorbar.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/colors/opencolor.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/colors/xkcd.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/config.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/constructor.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/538.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/FlatUI.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/Qual1.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/Qual2.rgb +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/bmh.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/classic.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/colorblind.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/colorblind10.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/default.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/ggplot.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/seaborn.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/cycles/tableau.hex +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/demos.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/externals/__init__.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/externals/hsluv.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Light.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Medium.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Black.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Light.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Medium.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_FIRAMATH.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_FIRASANS.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_NOTOSANS.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_NOTOSERIF.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_OPENSANS.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_ROBOTO.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_SOURCESANS.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_SOURCESERIF.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_TEXGYRE.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/LICENSE_UBUNTU.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/NotoSans-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/NotoSans-Italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/NotoSans-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-Italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Black.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Light.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Medium.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Roboto-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Light.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreheros-bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreheros-italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreheros-regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreschola-bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreschola-italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyreschola-regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyretermes-bold.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyretermes-italic.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/fonts/texgyretermes-regular.ttf +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/gridspec.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/benchmarks.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/context.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/guides.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/inputs.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/labels.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/versions.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/internals/warnings.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/legend.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/proj.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/scale.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/__init__.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/conftest.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_1dplots.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_2dplots.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_animation.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_axes_alt_styles.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_axes_base_colorbar_helpers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_base.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_circlize_integration.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_colorbar.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_colorbar_helpers_extra.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_colormap.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_colormap_helpers_extra.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_colors_helpers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_config.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_config_helpers_extra.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_constructor.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_constructor_helpers_extra.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_core_versions.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_demos.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_docs.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_docs_fetch_releases.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_docs_search.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_external_axes_container_integration.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_external_container_edge_cases.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_external_container_mocked.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_format.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_gridspec.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_handlers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_imports.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_imshow.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_inputs.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_inputs_helpers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_integration.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_legend.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_plot.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_proj_helpers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_projections.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_rcsetup_helpers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_release_metadata.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_scale_helpers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_semantic_legend.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_statistical_plotting.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_subplot_manager.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_subplots.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_text_helpers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_tickers.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/tests/test_ultralayout.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/text.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/ticker.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/ui.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/ultralayout.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot/utils.py +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot.egg-info/dependency_links.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot.egg-info/requires.txt +0 -0
- {ultraplot-2.4.1 → ultraplot-2.5.0}/ultraplot.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ultraplot
|
|
3
|
-
Version: 2.
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.5.0'
|
|
@@ -4,6 +4,7 @@ The first-level axes subclass used for all ultraplot figures.
|
|
|
4
4
|
Implements basic shared functionality.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
import contextlib
|
|
7
8
|
import copy
|
|
8
9
|
import inspect
|
|
9
10
|
import re
|
|
@@ -165,8 +166,9 @@ This is similar to `matplotlib.axes.Axes.inset_axes`.
|
|
|
165
166
|
|
|
166
167
|
Parameters
|
|
167
168
|
-----------
|
|
168
|
-
bounds : 4-tuple of float
|
|
169
|
-
The (left, bottom, width, height) coordinates for the axes.
|
|
169
|
+
bounds : 4-tuple of float or (4-tuple, transform)
|
|
170
|
+
The (left, bottom, width, height) coordinates for the axes. To specify the
|
|
171
|
+
coordinate system alongside the coordinates, pass ``(bounds, transform)``.
|
|
170
172
|
%(axes.transform)s
|
|
171
173
|
Default is to use the same projection as the current axes.
|
|
172
174
|
%(axes.proj)s
|
|
@@ -382,6 +384,11 @@ leftlabelpad, toplabelpad, rightlabelpad, bottomlabelpad : float or unit-spec, d
|
|
|
382
384
|
: :rc:`leftlabel.pad`, :rc:`toplabel.pad`, :rc:`rightlabel.pad`, :rc:`bottomlabel.pad`
|
|
383
385
|
The padding between the labels and the axes content.
|
|
384
386
|
%(units.pt)s
|
|
387
|
+
leftlabelsharedpad, toplabelsharedpad, rightlabelsharedpad, bottomlabelsharedpad : float or unit-spec, default
|
|
388
|
+
: :rc:`leftlabel.sharedpad`, :rc:`toplabel.sharedpad`, :rc:`rightlabel.sharedpad`, :rc:`bottomlabel.sharedpad`
|
|
389
|
+
The padding between side labels and a shared spanning axis label on the
|
|
390
|
+
same side. The spanning label is placed outside the side labels.
|
|
391
|
+
%(units.pt)s
|
|
385
392
|
leftlabels_kw, toplabels_kw, rightlabels_kw, bottomlabels_kw : dict-like, optional
|
|
386
393
|
Additional settings used to update the labels with ``text.update()``.
|
|
387
394
|
figtitle
|
|
@@ -744,6 +751,20 @@ class _TransformedBoundsLocator:
|
|
|
744
751
|
return bbox
|
|
745
752
|
|
|
746
753
|
|
|
754
|
+
class _AspectAwareTransformedBoundsLocator(_TransformedBoundsLocator):
|
|
755
|
+
"""Preserve an inset's lower-left anchor after box-aspect adjustment."""
|
|
756
|
+
|
|
757
|
+
def __call__(self, ax, renderer):
|
|
758
|
+
bbox = super().__call__(ax, renderer)
|
|
759
|
+
aspect = ax.get_aspect()
|
|
760
|
+
if aspect == "auto" or ax.get_adjustable() != "box":
|
|
761
|
+
return bbox
|
|
762
|
+
box_aspect = float(aspect) * ax.get_data_ratio()
|
|
763
|
+
fig_bbox = ax.figure.bbox
|
|
764
|
+
fig_aspect = fig_bbox.height / fig_bbox.width
|
|
765
|
+
return bbox.shrunk_to_aspect(box_aspect, bbox, fig_aspect)
|
|
766
|
+
|
|
767
|
+
|
|
747
768
|
class _SideColorbarLocator:
|
|
748
769
|
"""Position a side colorbar beyond its parent axes decorations."""
|
|
749
770
|
|
|
@@ -957,6 +978,7 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
957
978
|
self._active_cycle = rc["axes.prop_cycle"]
|
|
958
979
|
self._auto_format = None # manipulated by wrapper functions
|
|
959
980
|
self._abc_border_kwargs = {}
|
|
981
|
+
self._abc_anchor = "axes"
|
|
960
982
|
self._abc_loc = None
|
|
961
983
|
self._abc_pad = 0 # User's horizontal offset for abc label (in points)
|
|
962
984
|
self._abc_title_pad = rc[
|
|
@@ -970,6 +992,10 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
970
992
|
self._altx_parent = None # for cartesian axes only
|
|
971
993
|
self._alty_parent = None
|
|
972
994
|
self._colorbar_fill = None
|
|
995
|
+
self._align_texts = [] # texts registered for overlap avoidance
|
|
996
|
+
self._align_kwargs = {} # solver settings from auto_align_text()
|
|
997
|
+
self._align_arrows = [] # connectors drawn back to displaced anchors
|
|
998
|
+
self._align_cache = None # last solve, reused while its inputs hold
|
|
973
999
|
self._inset_parent = None
|
|
974
1000
|
self._inset_bounds = None # for introspection ony
|
|
975
1001
|
self._inset_zoom = False
|
|
@@ -1046,9 +1072,10 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
1046
1072
|
"""
|
|
1047
1073
|
Add an inset axes using arbitrary projection.
|
|
1048
1074
|
"""
|
|
1049
|
-
#
|
|
1050
|
-
|
|
1051
|
-
|
|
1075
|
+
# Convert coordinates to figure-relative coordinates while retaining the
|
|
1076
|
+
# original bounds for aspect-aware geographic inset locators.
|
|
1077
|
+
bounds_input, transform = self._parse_anchor(bounds, transform, default="axes")
|
|
1078
|
+
locator = self._make_inset_locator(bounds_input, transform)
|
|
1052
1079
|
bounds = locator(self, None).bounds
|
|
1053
1080
|
label = kwargs.pop("label", "inset_axes")
|
|
1054
1081
|
zorder = _not_none(zorder, 4)
|
|
@@ -1066,6 +1093,8 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
1066
1093
|
# automatically if we used data coords. Called by ax.apply_aspect()
|
|
1067
1094
|
cls = mproj.get_projection_class(kwargs.pop("projection"))
|
|
1068
1095
|
ax = cls(self.figure, bounds, zorder=zorder, label=label, **kwargs)
|
|
1096
|
+
if ax._name in ("cartopy", "basemap"):
|
|
1097
|
+
locator = _AspectAwareTransformedBoundsLocator(bounds_input, transform)
|
|
1069
1098
|
ax.set_axes_locator(locator)
|
|
1070
1099
|
ax._inset_parent = self
|
|
1071
1100
|
ax._inset_bounds = bounds
|
|
@@ -1737,6 +1766,22 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
1737
1766
|
else:
|
|
1738
1767
|
raise ValueError(f"Unknown transform {transform!r}.")
|
|
1739
1768
|
|
|
1769
|
+
def _parse_anchor(self, coordinates, transform=None, default="data"):
|
|
1770
|
+
"""
|
|
1771
|
+
Parse coordinates and their transform.
|
|
1772
|
+
|
|
1773
|
+
Coordinates can be passed with the transform separately or packaged as
|
|
1774
|
+
a ``(coordinates, transform)`` tuple. The latter is useful for APIs
|
|
1775
|
+
that accept a single anchor argument, such as ``inset_axes``.
|
|
1776
|
+
"""
|
|
1777
|
+
if (
|
|
1778
|
+
transform is None
|
|
1779
|
+
and isinstance(coordinates, tuple)
|
|
1780
|
+
and len(coordinates) == 2
|
|
1781
|
+
):
|
|
1782
|
+
coordinates, transform = coordinates
|
|
1783
|
+
return coordinates, self._get_transform(transform, default)
|
|
1784
|
+
|
|
1740
1785
|
def _register_guide(self, guide, obj, key, **kwargs):
|
|
1741
1786
|
"""
|
|
1742
1787
|
Queue up or replace objects for legends and list-of-artist style colorbars.
|
|
@@ -3071,8 +3116,15 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
3071
3116
|
self.transAxes.inverted()
|
|
3072
3117
|
)
|
|
3073
3118
|
ax0, ax1 = abc_bbox.x0, abc_bbox.x1
|
|
3119
|
+
ay0, ay1 = abc_bbox.y0, abc_bbox.y1
|
|
3074
3120
|
tx0, tx1 = title_bbox.x0, title_bbox.x1
|
|
3075
|
-
|
|
3121
|
+
ty0, ty1 = title_bbox.y0, title_bbox.y1
|
|
3122
|
+
if (
|
|
3123
|
+
tx0 < ax1 + abc_title_sep
|
|
3124
|
+
and tx1 > ax0 - abc_title_sep
|
|
3125
|
+
and ty0 < ay1
|
|
3126
|
+
and ty1 > ay0
|
|
3127
|
+
):
|
|
3076
3128
|
base_x = title_obj.get_position()[0]
|
|
3077
3129
|
ha = title_obj.get_ha()
|
|
3078
3130
|
max_width = 0
|
|
@@ -3380,6 +3432,7 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
3380
3432
|
self._colorbar_fill.update_ticks(manual_only=True) # only if needed
|
|
3381
3433
|
if self._inset_parent is not None and self._inset_zoom:
|
|
3382
3434
|
self.indicate_inset_zoom()
|
|
3435
|
+
self._apply_align_text(renderer)
|
|
3383
3436
|
needs_inset_reflow = bool(getattr(self, "_inset_colorbar_needs_reflow", False))
|
|
3384
3437
|
has_inset_frame = bool(
|
|
3385
3438
|
getattr(self, "_inset_colorbar_frame", None) is not None
|
|
@@ -3417,6 +3470,7 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
3417
3470
|
self._colorbar_fill.update_ticks(manual_only=True) # only if needed
|
|
3418
3471
|
if self._inset_parent is not None and self._inset_zoom:
|
|
3419
3472
|
self.indicate_inset_zoom()
|
|
3473
|
+
self._apply_align_text(renderer)
|
|
3420
3474
|
bbox = super().get_tightbbox(renderer, *args, **kwargs)
|
|
3421
3475
|
fig = self.figure
|
|
3422
3476
|
if (
|
|
@@ -4047,6 +4101,7 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
4047
4101
|
def text(
|
|
4048
4102
|
self,
|
|
4049
4103
|
*args,
|
|
4104
|
+
avoid_overlap=None,
|
|
4050
4105
|
border=False,
|
|
4051
4106
|
bbox=False,
|
|
4052
4107
|
bordercolor="w",
|
|
@@ -4074,6 +4129,10 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
4074
4129
|
|
|
4075
4130
|
Other parameters
|
|
4076
4131
|
----------------
|
|
4132
|
+
avoid_overlap : bool, default: :rc:`text.align`
|
|
4133
|
+
Whether to automatically nudge this text at draw time so it does not
|
|
4134
|
+
overlap other auto-aligned text or the plotted data. See
|
|
4135
|
+
`~ultraplot.axes.Axes.auto_align_text` for the solver settings.
|
|
4077
4136
|
border : bool, default: False
|
|
4078
4137
|
Whether to draw border around text.
|
|
4079
4138
|
borderwidth : float, default: 2
|
|
@@ -4103,6 +4162,7 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
4103
4162
|
See also
|
|
4104
4163
|
--------
|
|
4105
4164
|
matplotlib.axes.Axes.text
|
|
4165
|
+
ultraplot.axes.Axes.auto_align_text
|
|
4106
4166
|
"""
|
|
4107
4167
|
# Translate positional args
|
|
4108
4168
|
# Audo-redirect to text2D for 3D axes if not enough arguments passed
|
|
@@ -4171,8 +4231,127 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
4171
4231
|
"bboxpad": bboxpad,
|
|
4172
4232
|
}
|
|
4173
4233
|
)
|
|
4234
|
+
self._register_align_text(obj, avoid_overlap)
|
|
4235
|
+
return obj
|
|
4236
|
+
|
|
4237
|
+
def _register_align_text(self, obj, avoid_overlap=None):
|
|
4238
|
+
"""
|
|
4239
|
+
Queue a text object for draw-time overlap avoidance, or release it.
|
|
4240
|
+
"""
|
|
4241
|
+
# The solver moves a label by inverting its transform, which only means
|
|
4242
|
+
# anything for text that its transform actually positions. A Text3D is
|
|
4243
|
+
# placed by the 3D projection instead, and its stored position is the data
|
|
4244
|
+
# coordinate that feeds it, so a display-space nudge would not move the
|
|
4245
|
+
# label -- it would rewrite the data point.
|
|
4246
|
+
if hasattr(obj, "get_position_3d"):
|
|
4247
|
+
return obj
|
|
4248
|
+
# An explicit avoid_overlap=False beats the rc setting, so opting out is
|
|
4249
|
+
# always available. Releasing a label also puts it back where the user
|
|
4250
|
+
# asked for it, rather than stranding it wherever the solver left it.
|
|
4251
|
+
if _not_none(avoid_overlap, rc["text.align"]):
|
|
4252
|
+
if obj not in self._align_texts:
|
|
4253
|
+
self._align_texts.append(obj)
|
|
4254
|
+
else:
|
|
4255
|
+
if obj in self._align_texts:
|
|
4256
|
+
self._align_texts.remove(obj)
|
|
4257
|
+
from ..textalign import _reset_label
|
|
4258
|
+
|
|
4259
|
+
if hasattr(obj, "_uplt_align_anchor"):
|
|
4260
|
+
_reset_label(obj)
|
|
4261
|
+
self.stale = True
|
|
4174
4262
|
return obj
|
|
4175
4263
|
|
|
4264
|
+
def auto_align_text(self, *objs, **kwargs):
|
|
4265
|
+
"""
|
|
4266
|
+
Automatically reposition text so that it does not overlap.
|
|
4267
|
+
|
|
4268
|
+
Labels are relaxed away from each other, from the plotted data and from
|
|
4269
|
+
the axes edges at draw time, then pulled back towards where you put them.
|
|
4270
|
+
Because the solver runs on every draw, the layout stays valid when the
|
|
4271
|
+
figure is resized or the data limits change.
|
|
4272
|
+
|
|
4273
|
+
Parameters
|
|
4274
|
+
----------
|
|
4275
|
+
*objs : `~matplotlib.text.Text`, optional
|
|
4276
|
+
The text or annotation objects to align. Default is every text
|
|
4277
|
+
created with ``avoid_overlap=True`` plus, if none were, all the text
|
|
4278
|
+
you added to the axes.
|
|
4279
|
+
pad : float, default: :rc:`text.align.pad`
|
|
4280
|
+
Padding in points kept around each label.
|
|
4281
|
+
avoid_points : bool, default: True
|
|
4282
|
+
Whether labels also repel the data points of lines and scatter plots.
|
|
4283
|
+
avoid : sequence of `~matplotlib.artist.Artist`, optional
|
|
4284
|
+
Extra artists whose bounding boxes the labels must stay clear of.
|
|
4285
|
+
only_move : {'xy', 'x', 'y'}, default: 'xy'
|
|
4286
|
+
Restrict movement to one axis. Use ``'y'`` when the horizontal
|
|
4287
|
+
position of a label carries meaning, as on a time series.
|
|
4288
|
+
max_iter : int, default: :rc:`text.align.maxiter`
|
|
4289
|
+
Maximum number of relaxation iterations.
|
|
4290
|
+
spring : float, default: 0.05
|
|
4291
|
+
Strength of the pull back towards the original position. Larger
|
|
4292
|
+
values keep labels closer to their anchors at the cost of overlap.
|
|
4293
|
+
step : float, default: 0.6
|
|
4294
|
+
Damping applied to each iteration's displacement.
|
|
4295
|
+
clip : bool, default: True
|
|
4296
|
+
Whether to keep labels inside the axes.
|
|
4297
|
+
arrows : bool or dict, default: :rc:`text.align.arrows`
|
|
4298
|
+
Whether to draw a connector from each displaced label back to the
|
|
4299
|
+
point it labels. A dict is passed to `~matplotlib.patches.FancyArrowPatch`.
|
|
4300
|
+
min_arrow_dist : float, default: 8.0
|
|
4301
|
+
Only draw connectors for labels displaced further than this, in points.
|
|
4302
|
+
|
|
4303
|
+
Examples
|
|
4304
|
+
--------
|
|
4305
|
+
>>> import ultraplot as uplt
|
|
4306
|
+
>>> fig, ax = uplt.subplots()
|
|
4307
|
+
>>> ax.scatter(x, y)
|
|
4308
|
+
>>> for xi, yi, name in zip(x, y, names):
|
|
4309
|
+
... ax.text(xi, yi, name)
|
|
4310
|
+
>>> ax.auto_align_text()
|
|
4311
|
+
|
|
4312
|
+
See also
|
|
4313
|
+
--------
|
|
4314
|
+
ultraplot.axes.Axes.text
|
|
4315
|
+
ultraplot.axes.Axes.annotate
|
|
4316
|
+
"""
|
|
4317
|
+
objs = [obj for arg in objs for obj in (arg if np.iterable(arg) else (arg,))]
|
|
4318
|
+
if objs:
|
|
4319
|
+
self._align_texts = list(objs)
|
|
4320
|
+
elif not self._align_texts:
|
|
4321
|
+
# Titles and a-b-c labels live in self.texts but are positioned by the
|
|
4322
|
+
# layout engine, so they are not ours to move.
|
|
4323
|
+
titles = set(map(id, self._title_dict.values()))
|
|
4324
|
+
self._align_texts = [
|
|
4325
|
+
t for t in self.texts if id(t) not in titles and t.get_text().strip()
|
|
4326
|
+
]
|
|
4327
|
+
self._align_kwargs = kwargs
|
|
4328
|
+
self.stale = True
|
|
4329
|
+
return self._align_texts
|
|
4330
|
+
|
|
4331
|
+
def _apply_align_text(self, renderer):
|
|
4332
|
+
"""
|
|
4333
|
+
Run the overlap solver for this axes (called on every draw).
|
|
4334
|
+
"""
|
|
4335
|
+
if not self._align_texts:
|
|
4336
|
+
# Every label was released; take their connectors with them
|
|
4337
|
+
for patch in self._align_arrows:
|
|
4338
|
+
with contextlib.suppress(Exception):
|
|
4339
|
+
patch.remove()
|
|
4340
|
+
self._align_arrows = []
|
|
4341
|
+
return
|
|
4342
|
+
from ..textalign import align_text
|
|
4343
|
+
|
|
4344
|
+
kwargs = {
|
|
4345
|
+
"pad": rc["text.align.pad"],
|
|
4346
|
+
"max_iter": rc["text.align.maxiter"],
|
|
4347
|
+
"arrows": rc["text.align.arrows"],
|
|
4348
|
+
**self._align_kwargs,
|
|
4349
|
+
}
|
|
4350
|
+
try:
|
|
4351
|
+
align_text(self, self._align_texts, renderer=renderer, **kwargs)
|
|
4352
|
+
except Exception as err: # never let label polish break a render
|
|
4353
|
+
warnings._warn_ultraplot(f"Failed to auto-align text: {err}")
|
|
4354
|
+
|
|
4176
4355
|
@docstring._concatenate_inherited
|
|
4177
4356
|
def annotate(
|
|
4178
4357
|
self,
|
|
@@ -4190,16 +4369,24 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
4190
4369
|
textcoords: Optional[Union[str, mtransforms.Transform]] = None,
|
|
4191
4370
|
arrowprops: Optional[dict[str, Any]] = None,
|
|
4192
4371
|
annotation_clip: Optional[bool] = None,
|
|
4372
|
+
avoid_overlap: Optional[bool] = None,
|
|
4193
4373
|
**kwargs: Any,
|
|
4194
4374
|
) -> Union[mtext.Annotation, "CurvedText"]:
|
|
4195
4375
|
"""
|
|
4196
4376
|
Add an annotation. If `xy` is a pair of 1D arrays, draw curved text.
|
|
4197
4377
|
|
|
4198
4378
|
For curved input with `arrowprops`, the arrow points to the curve center.
|
|
4379
|
+
|
|
4380
|
+
Parameters
|
|
4381
|
+
----------
|
|
4382
|
+
avoid_overlap : bool, default: :rc:`text.align`
|
|
4383
|
+
Whether to automatically nudge this annotation at draw time so it
|
|
4384
|
+
does not overlap other auto-aligned text or the plotted data. See
|
|
4385
|
+
`~ultraplot.axes.Axes.auto_align_text`.
|
|
4199
4386
|
"""
|
|
4200
4387
|
curve_xy = self._coerce_curve_xy_from_xy_arg(xy)
|
|
4201
4388
|
if curve_xy is None:
|
|
4202
|
-
|
|
4389
|
+
obj = super().annotate(
|
|
4203
4390
|
text,
|
|
4204
4391
|
xy=xy,
|
|
4205
4392
|
xytext=xytext,
|
|
@@ -4209,6 +4396,7 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
4209
4396
|
annotation_clip=annotation_clip,
|
|
4210
4397
|
**kwargs,
|
|
4211
4398
|
)
|
|
4399
|
+
return self._register_align_text(obj, avoid_overlap)
|
|
4212
4400
|
|
|
4213
4401
|
x_curve, y_curve = curve_xy
|
|
4214
4402
|
try:
|