ultraplot 2.1.0__tar.gz → 2.1.3__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.1.0 → ultraplot-2.1.3}/.github/workflows/build-ultraplot.yml +1 -1
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.github/workflows/publish-pypi.yml +3 -3
- {ultraplot-2.1.0/ultraplot.egg-info → ultraplot-2.1.3}/PKG-INFO +1 -1
- {ultraplot-2.1.0 → ultraplot-2.1.3}/codecov.yml +2 -0
- ultraplot-2.1.3/ultraplot/_version.py +1 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/base.py +98 -14
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/plot.py +49 -14
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/three.py +8 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/colorbar.py +10 -2
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/gridspec.py +3 -1
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/__init__.py +37 -11
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/legend.py +103 -33
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_2dplots.py +121 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_colorbar.py +47 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_gridspec.py +19 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_legend.py +21 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_plot.py +16 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3/ultraplot.egg-info}/PKG-INFO +1 -1
- ultraplot-2.1.0/ultraplot/_version.py +0 -1
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.github/ISSUE_TEMPLATE.md +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.github/dependabot.yml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.github/micromamba-condarc.yml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.github/workflows/main.yml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.github/workflows/test-map.yml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.gitignore +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.pre-commit-config.yaml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.readthedocs.yml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/.zenodo.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/CITATION.cff +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/CODEOFCONDUCT.md +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/CONTRIBUTING.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/INSTALL.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/LICENSE.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/README.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/UltraPlotLogo.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/1dplots.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/2dplots.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/Makefile +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_ext/notoc.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_scripts/fetch_releases.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/custom.css +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/custom.js +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/example_plots/cartesian_example.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/example_plots/colorbars_legends_example.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/example_plots/colormaps_example.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/example_plots/panels_example.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/example_plots/projection_example.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/example_plots/subplot_example.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/logo_blank.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/logo_long.png +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/logo_long.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/logo_social.png +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/logo_social.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_static/logo_square.png +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/_templates/whatsnew_sidebar.html +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/about.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/api.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/basics.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/cartesian.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/colorbars_legends.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/colormaps.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/colors.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/conf.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/configuration.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/contributing.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/cycles.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/README.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/colors/01_cycle_colormap.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/colors/02_diverging_colormap.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/colors/README.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/geo/01_robin_tracks.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/geo/02_orthographic_views.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/geo/03_projections_features.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/geo/README.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/layouts/01_shared_axes_abc.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/layouts/02_complex_layout_insets.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/layouts/03_spanning_labels.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/layouts/README.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/legends_colorbars/01_multi_colorbars.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/legends_colorbars/02_legend_inset_colorbar.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/legends_colorbars/03_semantic_legends.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/legends_colorbars/README.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/01_curved_quiver.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/02_network_graph.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/03_lollipop.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/04_datetime_series.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/05_box_violin.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/06_ridge_plot.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/07_radar.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/07_sankey.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/08_chord_diagram.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/08_ternary.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/09_phylogeny.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/10_circos_bed.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/11_topic_ribbon.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/examples/plot_types/README.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/external-links.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/faq.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/fonts.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/index.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/insets_panels.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/install.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/lazy_loading.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/make.bat +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/networks.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/projections.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/requirements-rtd.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/sphinxext/custom_roles.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/stats.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/subplots.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/ultraplotrc +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/usage.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/docs/why.rst +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/environment.yml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/logo/PermanentMarker-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/logo/environment-logo.yml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/logo/logo.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/logo/run-linter.sh +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/logo/webicon.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/logo/whyUltraPlot.svg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/noxfile.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/pyproject.toml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/requirements-minimal.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/setup.cfg +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/tools/ci/build_test_map.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/tools/ci/select_tests.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/__init__.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/_lazy.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/__init__.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/cartesian.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/container.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/geo.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/plot_types/__init__.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/plot_types/circlize.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/plot_types/curved_quiver.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/plot_types/ribbon.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/plot_types/sankey.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/polar.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/axes/shared.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Algae.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Amp.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/BR.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Balance.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues1_r.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues2.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues3.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues4_r.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues5.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues6.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues7.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues8.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Blues9.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Boreal.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns1.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns2.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns3.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns4.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns5.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns6.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns7.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns8.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Browns9.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/ColdHot.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Crest.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Curl.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Deep.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Delta.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Dense.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Div.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/DryWet.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Dusk.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Fire.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Flare.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Glacial.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Greens1_r.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Greens2.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Greens3_r.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Greens4.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Greens5.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Greens6_r.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Greens7.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Greens8.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Haline.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Ice.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/IceFire.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Mako.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Marine.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Matter.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Mono.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/MonoCycle.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/NegPos.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Oranges1.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Oranges2.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Oranges3.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Oranges4.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Oxy.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Phase.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Purples1_r.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Purples2.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Purples3.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Reds1.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Reds2.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Reds3.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Reds4.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Reds5.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Rocket.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Solar.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Speed.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Stellar.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Sunrise.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Sunset.json +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Tempo.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Thermal.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Turbid.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Vivid.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Vlag.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Yellows1.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Yellows2.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Yellows3.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/Yellows4.xml +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/acton.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/bam.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/bamO.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/bamako.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/batlow.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/batlowK.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/batlowW.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/berlin.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/bilbao.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/broc.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/brocO.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/buda.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/bukavu.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/cork.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/corkO.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/davos.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/devon.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/fes.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/hawaii.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/imola.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/lajolla.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/lapaz.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/lisbon.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/nuuk.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/oleron.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/oslo.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/roma.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/romaO.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/tofino.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/tokyo.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/turku.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/vanimo.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/vik.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cmaps/vikO.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/colors/opencolor.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/colors/xkcd.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/colors.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/config.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/constructor.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/538.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/FlatUI.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/Qual1.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/Qual2.rgb +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/bmh.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/classic.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/colorblind.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/colorblind10.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/default.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/ggplot.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/seaborn.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/cycles/tableau.hex +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/demos.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/externals/__init__.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/externals/hsluv.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/figure.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraMath-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraMath-Light.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraMath-Medium.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraMath-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-Black.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-Italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-Light.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-Medium.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_FIRAMATH.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_FIRASANS.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_NOTOSANS.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_NOTOSERIF.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_OPENSANS.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_ROBOTO.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_SOURCESANS.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_SOURCESERIF.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_TEXGYRE.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/LICENSE_UBUNTU.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/NotoSans-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/NotoSans-Italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/NotoSans-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/OpenSans-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/OpenSans-Italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/OpenSans-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-Black.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-Italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-Light.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-Medium.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Roboto-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Ubuntu-Light.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreheros-bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreheros-italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreheros-regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreschola-bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreschola-italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyreschola-regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyretermes-bold.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyretermes-italic.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/fonts/texgyretermes-regular.ttf +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/benchmarks.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/context.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/docstring.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/fonts.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/guides.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/inputs.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/labels.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/rcsetup.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/versions.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/internals/warnings.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/proj.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/scale.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/__init__.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/conftest.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_1dplots.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_animation.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_axes.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_base.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_circlize_integration.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_colormap.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_colors.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_config.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_constructor.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_demos.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_docs.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_external_axes_container_integration.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_external_container_edge_cases.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_external_container_mocked.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_figure.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_fonts.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_format.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_geographic.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_handlers.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_imports.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_imshow.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_inputs.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_inset.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_integration.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_projections.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_statistical_plotting.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_subplots.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_tickers.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/tests/test_ultralayout.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/text.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/ticker.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/ui.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/ultralayout.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot/utils.py +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot.egg-info/SOURCES.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot.egg-info/dependency_links.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot.egg-info/requires.txt +0 -0
- {ultraplot-2.1.0 → ultraplot-2.1.3}/ultraplot.egg-info/top_level.txt +0 -0
|
@@ -327,7 +327,7 @@ jobs:
|
|
|
327
327
|
# Return the html output of the comparison even if failed
|
|
328
328
|
- name: Upload comparison failures
|
|
329
329
|
if: always()
|
|
330
|
-
uses: actions/upload-artifact@
|
|
330
|
+
uses: actions/upload-artifact@v7
|
|
331
331
|
with:
|
|
332
332
|
name: failed-comparisons-${{ inputs.python-version }}-${{ inputs.matplotlib-version }}-${{ github.sha }}
|
|
333
333
|
path: results/*
|
|
@@ -54,7 +54,7 @@ jobs:
|
|
|
54
54
|
shell: bash
|
|
55
55
|
|
|
56
56
|
- name: Upload artifacts
|
|
57
|
-
uses: actions/upload-artifact@
|
|
57
|
+
uses: actions/upload-artifact@v7
|
|
58
58
|
with:
|
|
59
59
|
name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
|
|
60
60
|
path: dist/*
|
|
@@ -73,7 +73,7 @@ jobs:
|
|
|
73
73
|
contents: read
|
|
74
74
|
steps:
|
|
75
75
|
- name: Download artifacts
|
|
76
|
-
uses: actions/download-artifact@
|
|
76
|
+
uses: actions/download-artifact@v8
|
|
77
77
|
with:
|
|
78
78
|
name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
|
|
79
79
|
path: dist
|
|
@@ -105,7 +105,7 @@ jobs:
|
|
|
105
105
|
contents: read
|
|
106
106
|
steps:
|
|
107
107
|
- name: Download artifacts
|
|
108
|
-
uses: actions/download-artifact@
|
|
108
|
+
uses: actions/download-artifact@v8
|
|
109
109
|
with:
|
|
110
110
|
name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
|
|
111
111
|
path: dist
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ultraplot
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.3
|
|
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>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.1.3'
|
|
@@ -515,9 +515,12 @@ format, formatter, ticklabels : formatter-spec, optional
|
|
|
515
515
|
constructor function.
|
|
516
516
|
formatter_kw : dict-like, optional
|
|
517
517
|
Keyword arguments passed to `matplotlib.ticker.Formatter` class.
|
|
518
|
-
frame, frameon : bool,
|
|
519
|
-
For inset colorbars
|
|
520
|
-
just like `~matplotlib.axes.Axes.legend`.
|
|
518
|
+
frame, frameon : bool, optional
|
|
519
|
+
For inset colorbars, indicates whether to draw a background "frame",
|
|
520
|
+
just like `~matplotlib.axes.Axes.legend`. Defaults to
|
|
521
|
+
:rc:`colorbar.frameon` for inset colorbars. For outer colorbars, this is a
|
|
522
|
+
backwards-compatible alias for `outline`; when omitted, outer colorbars
|
|
523
|
+
still default to :rc:`colorbar.outline`.
|
|
521
524
|
tickminor : bool, optional
|
|
522
525
|
Whether to add minor ticks using `~matplotlib.colorbar.ColorbarBase.minorticks_on`.
|
|
523
526
|
tickloc, ticklocation : {'bottom', 'top', 'left', 'right'}, optional
|
|
@@ -553,7 +556,9 @@ rasterize : bool, default: :rc:`colorbar.rasterized`
|
|
|
553
556
|
but ultraplot changes this to ``False`` since rasterization can cause misalignment
|
|
554
557
|
between the color patches and the colorbar outline.
|
|
555
558
|
outline : bool, None default : None
|
|
556
|
-
Controls the visibility of the
|
|
559
|
+
Controls the visibility of the outer colorbar outline. When set to False,
|
|
560
|
+
the spines of the colorbar are hidden. If set to `None` it uses the
|
|
561
|
+
`rc['colorbar.outline']` value.
|
|
557
562
|
labelrotation : str, float, default: None
|
|
558
563
|
Controls the rotation of the colorbar label. When set to None it takes on the value of `rc["colorbar.labelrotation"]`. When set to auto it produces a sensible default where the rotation is adjusted to where the colorbar is located. For example, a horizontal colorbar with a label to the left or right will match the horizontal alignment and rotate the label to 0 degrees. Users can provide a float to rotate to any arbitrary angle.
|
|
559
564
|
|
|
@@ -1130,6 +1135,8 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
1130
1135
|
linewidth=None,
|
|
1131
1136
|
edgefix=None,
|
|
1132
1137
|
rasterized=None,
|
|
1138
|
+
frame: Optional[bool] = None,
|
|
1139
|
+
frameon: Optional[bool] = None,
|
|
1133
1140
|
outline: Union[bool, None] = None,
|
|
1134
1141
|
labelrotation: Union[str, float] = None,
|
|
1135
1142
|
center_levels=None,
|
|
@@ -1191,6 +1198,8 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
1191
1198
|
linewidth=linewidth,
|
|
1192
1199
|
edgefix=edgefix,
|
|
1193
1200
|
rasterized=rasterized,
|
|
1201
|
+
frame=frame,
|
|
1202
|
+
frameon=frameon,
|
|
1194
1203
|
outline=outline,
|
|
1195
1204
|
labelrotation=labelrotation,
|
|
1196
1205
|
center_levels=center_levels,
|
|
@@ -1903,7 +1912,9 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
1903
1912
|
Return the axes and adjusted keyword args for an inset colorbar.
|
|
1904
1913
|
"""
|
|
1905
1914
|
# Basic colorbar properties
|
|
1906
|
-
|
|
1915
|
+
frame_enabled = _not_none(
|
|
1916
|
+
frame=frame, frameon=frameon, default=rc["colorbar.frameon"]
|
|
1917
|
+
)
|
|
1907
1918
|
length = _not_none(
|
|
1908
1919
|
length=length, shrink=shrink, default=rc["colorbar.insetlength"]
|
|
1909
1920
|
) # noqa: E501
|
|
@@ -1967,8 +1978,9 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
1967
1978
|
ax.set_axes_locator(locator)
|
|
1968
1979
|
self.add_child_axes(ax)
|
|
1969
1980
|
kw_frame, kwargs = self._parse_frame("colorbar", **kwargs)
|
|
1970
|
-
|
|
1971
|
-
|
|
1981
|
+
frame_artist = None
|
|
1982
|
+
if frame_enabled:
|
|
1983
|
+
frame_artist = self._add_guide_frame(
|
|
1972
1984
|
*bounds_frame, fontsize=tick_fontsize, **kw_frame
|
|
1973
1985
|
)
|
|
1974
1986
|
ax._inset_colorbar_layout = {
|
|
@@ -1984,7 +1996,7 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
1984
1996
|
"pad_raw": pad_raw,
|
|
1985
1997
|
}
|
|
1986
1998
|
ax._inset_colorbar_parent = self
|
|
1987
|
-
ax._inset_colorbar_frame =
|
|
1999
|
+
ax._inset_colorbar_frame = frame_artist
|
|
1988
2000
|
|
|
1989
2001
|
kwargs.update({"orientation": orientation, "ticklocation": ticklocation})
|
|
1990
2002
|
return ax, kwargs
|
|
@@ -3149,19 +3161,31 @@ class Axes(_ExternalModeMixin, maxes.Axes):
|
|
|
3149
3161
|
self._colorbar_fill.update_ticks(manual_only=True) # only if needed
|
|
3150
3162
|
if self._inset_parent is not None and self._inset_zoom:
|
|
3151
3163
|
self.indicate_inset_zoom()
|
|
3164
|
+
needs_inset_reflow = bool(getattr(self, "_inset_colorbar_needs_reflow", False))
|
|
3165
|
+
has_inset_frame = bool(
|
|
3166
|
+
getattr(self, "_inset_colorbar_frame", None) is not None
|
|
3167
|
+
and getattr(self, "_inset_colorbar_obj", None)
|
|
3168
|
+
)
|
|
3152
3169
|
super().draw(renderer, *args, **kwargs)
|
|
3153
|
-
if
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
|
|
3170
|
+
if has_inset_frame:
|
|
3171
|
+
if not needs_inset_reflow:
|
|
3172
|
+
needs_inset_reflow = _inset_colorbar_frame_needs_reflow(
|
|
3173
|
+
self._inset_colorbar_obj,
|
|
3174
|
+
labelloc=getattr(self, "_inset_colorbar_labelloc", None),
|
|
3175
|
+
renderer=renderer,
|
|
3176
|
+
)
|
|
3177
|
+
if has_inset_frame and needs_inset_reflow:
|
|
3157
3178
|
_reflow_inset_colorbar_frame(
|
|
3158
3179
|
self._inset_colorbar_obj,
|
|
3159
3180
|
labelloc=getattr(self, "_inset_colorbar_labelloc", None),
|
|
3160
3181
|
ticklen=getattr(
|
|
3161
3182
|
self, "_inset_colorbar_ticklen", units(rc["tick.len"], "pt")
|
|
3162
3183
|
),
|
|
3184
|
+
renderer=renderer,
|
|
3163
3185
|
)
|
|
3164
|
-
self.
|
|
3186
|
+
self._inset_colorbar_needs_reflow = False
|
|
3187
|
+
# Re-draw synchronously so the current render pass sees reflowed bounds.
|
|
3188
|
+
super().draw(renderer, *args, **kwargs)
|
|
3165
3189
|
|
|
3166
3190
|
def get_tightbbox(self, renderer, *args, **kwargs):
|
|
3167
3191
|
# Perform extra post-processing steps
|
|
@@ -4581,11 +4605,71 @@ def _apply_inset_colorbar_layout(
|
|
|
4581
4605
|
frame.set_bounds(*bounds_frame)
|
|
4582
4606
|
|
|
4583
4607
|
|
|
4608
|
+
def _inset_colorbar_frame_needs_reflow(colorbar, *, labelloc: str, renderer) -> bool:
|
|
4609
|
+
cax = colorbar.ax
|
|
4610
|
+
layout = getattr(cax, "_inset_colorbar_layout", None)
|
|
4611
|
+
frame = getattr(cax, "_inset_colorbar_frame", None)
|
|
4612
|
+
if not layout or frame is None:
|
|
4613
|
+
return False
|
|
4614
|
+
|
|
4615
|
+
orientation = layout["orientation"]
|
|
4616
|
+
loc = layout["loc"]
|
|
4617
|
+
ticklocation = layout["ticklocation"]
|
|
4618
|
+
labelloc_layout = labelloc if isinstance(labelloc, str) else ticklocation
|
|
4619
|
+
bboxes = []
|
|
4620
|
+
|
|
4621
|
+
longaxis = _get_colorbar_long_axis(colorbar)
|
|
4622
|
+
try:
|
|
4623
|
+
bbox = longaxis.get_tightbbox(renderer)
|
|
4624
|
+
except Exception:
|
|
4625
|
+
bbox = None
|
|
4626
|
+
if bbox is not None:
|
|
4627
|
+
bboxes.append(bbox)
|
|
4628
|
+
|
|
4629
|
+
label_axis = _get_axis_for(
|
|
4630
|
+
labelloc_layout, loc, orientation=orientation, ax=colorbar
|
|
4631
|
+
)
|
|
4632
|
+
if label_axis.label.get_text():
|
|
4633
|
+
try:
|
|
4634
|
+
bboxes.append(label_axis.label.get_window_extent(renderer=renderer))
|
|
4635
|
+
except Exception:
|
|
4636
|
+
pass
|
|
4637
|
+
|
|
4638
|
+
for artist in (
|
|
4639
|
+
getattr(colorbar, "outline", None),
|
|
4640
|
+
getattr(colorbar, "solids", None),
|
|
4641
|
+
getattr(colorbar, "dividers", None),
|
|
4642
|
+
):
|
|
4643
|
+
if artist is None:
|
|
4644
|
+
continue
|
|
4645
|
+
try:
|
|
4646
|
+
bboxes.append(artist.get_window_extent(renderer=renderer))
|
|
4647
|
+
except Exception:
|
|
4648
|
+
pass
|
|
4649
|
+
|
|
4650
|
+
if not bboxes:
|
|
4651
|
+
return False
|
|
4652
|
+
|
|
4653
|
+
x0 = min(bbox.x0 for bbox in bboxes)
|
|
4654
|
+
y0 = min(bbox.y0 for bbox in bboxes)
|
|
4655
|
+
x1 = max(bbox.x1 for bbox in bboxes)
|
|
4656
|
+
y1 = max(bbox.y1 for bbox in bboxes)
|
|
4657
|
+
frame_bbox = frame.get_window_extent(renderer=renderer)
|
|
4658
|
+
tol = 1.0
|
|
4659
|
+
return (
|
|
4660
|
+
frame_bbox.x0 > x0 + tol
|
|
4661
|
+
or frame_bbox.y0 > y0 + tol
|
|
4662
|
+
or frame_bbox.x1 < x1 - tol
|
|
4663
|
+
or frame_bbox.y1 < y1 - tol
|
|
4664
|
+
)
|
|
4665
|
+
|
|
4666
|
+
|
|
4584
4667
|
def _reflow_inset_colorbar_frame(
|
|
4585
4668
|
colorbar,
|
|
4586
4669
|
*,
|
|
4587
4670
|
labelloc: str,
|
|
4588
4671
|
ticklen: float,
|
|
4672
|
+
renderer=None,
|
|
4589
4673
|
):
|
|
4590
4674
|
cax = colorbar.ax
|
|
4591
4675
|
layout = getattr(cax, "_inset_colorbar_layout", None)
|
|
@@ -4623,7 +4707,7 @@ def _reflow_inset_colorbar_frame(
|
|
|
4623
4707
|
cb_width = width
|
|
4624
4708
|
cb_height = length
|
|
4625
4709
|
|
|
4626
|
-
renderer = cax.figure._get_renderer()
|
|
4710
|
+
renderer = renderer or cax.figure._get_renderer()
|
|
4627
4711
|
if hasattr(colorbar, "update_ticks"):
|
|
4628
4712
|
colorbar.update_ticks(manual_only=True)
|
|
4629
4713
|
bboxes = []
|
|
@@ -4141,6 +4141,7 @@ class PlotAxes(base.Axes):
|
|
|
4141
4141
|
# NOTE: Unlike xarray, but like matplotlib, vmin and vmax only approximately
|
|
4142
4142
|
# determine level range. Levels are selected with Locator.tick_values().
|
|
4143
4143
|
levels = None # unused
|
|
4144
|
+
explicit_limits = False
|
|
4144
4145
|
isdiverging = False
|
|
4145
4146
|
if not discrete and not skip_autolev:
|
|
4146
4147
|
vmin, vmax, kwargs = self._parse_level_lim(
|
|
@@ -4150,7 +4151,15 @@ class PlotAxes(base.Axes):
|
|
|
4150
4151
|
if abs(np.sign(vmax) - np.sign(vmin)) == 2:
|
|
4151
4152
|
isdiverging = True
|
|
4152
4153
|
if discrete:
|
|
4153
|
-
|
|
4154
|
+
(
|
|
4155
|
+
levels,
|
|
4156
|
+
vmin,
|
|
4157
|
+
vmax,
|
|
4158
|
+
norm,
|
|
4159
|
+
norm_kw,
|
|
4160
|
+
explicit_limits,
|
|
4161
|
+
kwargs,
|
|
4162
|
+
) = self._parse_level_vals(
|
|
4154
4163
|
*args,
|
|
4155
4164
|
vmin=vmin,
|
|
4156
4165
|
vmax=vmax,
|
|
@@ -4199,6 +4208,7 @@ class PlotAxes(base.Axes):
|
|
|
4199
4208
|
center_levels=center_levels,
|
|
4200
4209
|
extend=extend,
|
|
4201
4210
|
min_levels=min_levels,
|
|
4211
|
+
explicit_limits=explicit_limits,
|
|
4202
4212
|
**kwargs,
|
|
4203
4213
|
)
|
|
4204
4214
|
params = _pop_params(kwargs, *self._level_parsers, ignore_internal=True)
|
|
@@ -4462,7 +4472,6 @@ class PlotAxes(base.Axes):
|
|
|
4462
4472
|
center_levels = _not_none(center_levels, rc["colorbar.center_levels"])
|
|
4463
4473
|
vmin = _not_none(vmin=vmin, norm_kw_vmin=norm_kw.pop("vmin", None))
|
|
4464
4474
|
vmax = _not_none(vmax=vmax, norm_kw_vmax=norm_kw.pop("vmax", None))
|
|
4465
|
-
norm = constructor.Norm(norm or "linear", **norm_kw)
|
|
4466
4475
|
symmetric = _not_none(
|
|
4467
4476
|
symmetric=symmetric,
|
|
4468
4477
|
locator_kw_symmetric=locator_kw.pop("symmetric", None),
|
|
@@ -4555,6 +4564,8 @@ class PlotAxes(base.Axes):
|
|
|
4555
4564
|
nozero=False,
|
|
4556
4565
|
norm=None,
|
|
4557
4566
|
norm_kw=None,
|
|
4567
|
+
vmin=None,
|
|
4568
|
+
vmax=None,
|
|
4558
4569
|
skip_autolev=False,
|
|
4559
4570
|
min_levels=None,
|
|
4560
4571
|
center_levels=None,
|
|
@@ -4577,7 +4588,9 @@ class PlotAxes(base.Axes):
|
|
|
4577
4588
|
Whether to remove out non-positive, non-negative, and zero-valued
|
|
4578
4589
|
levels. The latter is useful for single-color contour plots.
|
|
4579
4590
|
norm, norm_kw : optional
|
|
4580
|
-
Passed to `Norm`. Used to
|
|
4591
|
+
Passed to `Norm`. Used to possibly infer levels or to convert values.
|
|
4592
|
+
vmin, vmax : float, optional
|
|
4593
|
+
The user input normalization range.
|
|
4581
4594
|
skip_autolev : bool, optional
|
|
4582
4595
|
Whether to skip automatic level generation.
|
|
4583
4596
|
min_levels : int, optional
|
|
@@ -4587,6 +4600,8 @@ class PlotAxes(base.Axes):
|
|
|
4587
4600
|
-------
|
|
4588
4601
|
levels : list of float
|
|
4589
4602
|
The level edges.
|
|
4603
|
+
explicit_limits : bool
|
|
4604
|
+
Whether the user explicitly provided `vmin` and/or `vmax`.
|
|
4590
4605
|
**kwargs
|
|
4591
4606
|
Unused arguments.
|
|
4592
4607
|
"""
|
|
@@ -4625,7 +4640,9 @@ class PlotAxes(base.Axes):
|
|
|
4625
4640
|
return array
|
|
4626
4641
|
|
|
4627
4642
|
# Parse input arguments and resolve incompatibilities
|
|
4628
|
-
|
|
4643
|
+
explicit_limits = vmin is not None or vmax is not None
|
|
4644
|
+
line_contours = min_levels == 1
|
|
4645
|
+
keep_explicit_line_limits = line_contours and explicit_limits
|
|
4629
4646
|
levels = _not_none(N=N, levels=levels, norm_kw_levs=norm_kw.pop("levels", None))
|
|
4630
4647
|
if positive and negative:
|
|
4631
4648
|
warnings._warn_ultraplot(
|
|
@@ -4684,6 +4701,8 @@ class PlotAxes(base.Axes):
|
|
|
4684
4701
|
levels, kwargs = self._parse_level_num(
|
|
4685
4702
|
*args,
|
|
4686
4703
|
levels=levels,
|
|
4704
|
+
vmin=vmin,
|
|
4705
|
+
vmax=vmax,
|
|
4687
4706
|
norm=norm,
|
|
4688
4707
|
norm_kw=norm_kw,
|
|
4689
4708
|
extend=extend,
|
|
@@ -4696,8 +4715,8 @@ class PlotAxes(base.Axes):
|
|
|
4696
4715
|
levels = values = None
|
|
4697
4716
|
|
|
4698
4717
|
# Determine default colorbar locator and norm and apply filters
|
|
4699
|
-
# NOTE:
|
|
4700
|
-
#
|
|
4718
|
+
# NOTE: Preserve explicit vmin/vmax only for line contours, where levels
|
|
4719
|
+
# represent contour values rather than filled bins.
|
|
4701
4720
|
# NOTE: The level restriction should have no effect if levels were generated
|
|
4702
4721
|
# automatically. However want to apply these to manual-input levels as well.
|
|
4703
4722
|
if levels is not None:
|
|
@@ -4705,15 +4724,21 @@ class PlotAxes(base.Axes):
|
|
|
4705
4724
|
if len(levels) == 0: # skip
|
|
4706
4725
|
pass
|
|
4707
4726
|
elif len(levels) == 1: # use central colormap color
|
|
4708
|
-
|
|
4727
|
+
if not keep_explicit_line_limits or vmin is None:
|
|
4728
|
+
vmin = levels[0] - 1
|
|
4729
|
+
if not keep_explicit_line_limits or vmax is None:
|
|
4730
|
+
vmax = levels[0] + 1
|
|
4709
4731
|
else: # use minimum and maximum
|
|
4710
|
-
|
|
4732
|
+
if not keep_explicit_line_limits or vmin is None:
|
|
4733
|
+
vmin = np.min(levels)
|
|
4734
|
+
if not keep_explicit_line_limits or vmax is None:
|
|
4735
|
+
vmax = np.max(levels)
|
|
4711
4736
|
if not np.allclose(levels[1] - levels[0], np.diff(levels)):
|
|
4712
4737
|
norm = _not_none(norm, "segmented")
|
|
4713
4738
|
if norm in ("segments", "segmented"):
|
|
4714
4739
|
norm_kw["levels"] = levels
|
|
4715
4740
|
|
|
4716
|
-
return levels, vmin, vmax, norm, norm_kw, kwargs
|
|
4741
|
+
return levels, vmin, vmax, norm, norm_kw, explicit_limits, kwargs
|
|
4717
4742
|
|
|
4718
4743
|
@staticmethod
|
|
4719
4744
|
def _parse_level_norm(
|
|
@@ -4726,6 +4751,7 @@ class PlotAxes(base.Axes):
|
|
|
4726
4751
|
discrete_ticks=None,
|
|
4727
4752
|
discrete_labels=None,
|
|
4728
4753
|
center_levels=None,
|
|
4754
|
+
explicit_limits=False,
|
|
4729
4755
|
**kwargs,
|
|
4730
4756
|
):
|
|
4731
4757
|
"""
|
|
@@ -4748,11 +4774,14 @@ class PlotAxes(base.Axes):
|
|
|
4748
4774
|
The colorbar locations to tick.
|
|
4749
4775
|
discrete_labels : array-like, optional
|
|
4750
4776
|
The colorbar tick labels.
|
|
4777
|
+
explicit_limits : bool, optional
|
|
4778
|
+
Whether `vmin`/`vmax` were explicitly provided by the user.
|
|
4751
4779
|
|
|
4752
4780
|
Returns
|
|
4753
4781
|
-------
|
|
4754
|
-
norm : `~ultraplot.colors.DiscreteNorm`
|
|
4755
|
-
The discrete normalizer
|
|
4782
|
+
norm : `~ultraplot.colors.DiscreteNorm` or `~matplotlib.colors.Normalize`
|
|
4783
|
+
The discrete normalizer, or the original continuous normalizer when
|
|
4784
|
+
line contours have explicit limits or use qualitative color lists.
|
|
4756
4785
|
cmap : `~matplotlib.colors.Colormap`
|
|
4757
4786
|
The possibly-modified colormap.
|
|
4758
4787
|
kwargs
|
|
@@ -4814,10 +4843,16 @@ class PlotAxes(base.Axes):
|
|
|
4814
4843
|
elif extend == "max":
|
|
4815
4844
|
unique = "neither"
|
|
4816
4845
|
|
|
4817
|
-
# Generate DiscreteNorm
|
|
4818
|
-
#
|
|
4846
|
+
# Generate DiscreteNorm for filled-contour style bins. For line contours
|
|
4847
|
+
# with explicit limits or qualitative color lists, keep the continuous
|
|
4848
|
+
# normalizer to preserve one-to-one value->color mapping.
|
|
4819
4849
|
center_levels = _not_none(center_levels, rc["colorbar.center_levels"])
|
|
4820
|
-
|
|
4850
|
+
preserve_line_mapping = min_levels == 1 and (explicit_limits or qualitative)
|
|
4851
|
+
if (
|
|
4852
|
+
not preserve_line_mapping
|
|
4853
|
+
and not isinstance(norm, mcolors.BoundaryNorm)
|
|
4854
|
+
and len(levels) > 1
|
|
4855
|
+
):
|
|
4821
4856
|
norm = pcolors.DiscreteNorm(
|
|
4822
4857
|
levels,
|
|
4823
4858
|
norm=norm,
|
|
@@ -33,3 +33,11 @@ class ThreeAxes(shared._SharedAxes, base.Axes, Axes3D):
|
|
|
33
33
|
|
|
34
34
|
kwargs.setdefault("alpha", 0.0)
|
|
35
35
|
super().__init__(*args, **kwargs)
|
|
36
|
+
|
|
37
|
+
def graph(self, *args, **kwargs):
|
|
38
|
+
"""
|
|
39
|
+
Draw network graphs on 3D projections.
|
|
40
|
+
"""
|
|
41
|
+
from .plot import PlotAxes
|
|
42
|
+
|
|
43
|
+
return PlotAxes.graph(self, *args, **kwargs)
|
|
@@ -99,6 +99,8 @@ class UltraColorbar:
|
|
|
99
99
|
linewidth: Optional[Union[float, str]] = None,
|
|
100
100
|
edgefix: Optional[bool] = None,
|
|
101
101
|
rasterized: Optional[bool] = None,
|
|
102
|
+
frame: Optional[bool] = None,
|
|
103
|
+
frameon: Optional[bool] = None,
|
|
102
104
|
outline: Union[bool, None] = None,
|
|
103
105
|
labelrotation: Optional[Union[str, float]] = None,
|
|
104
106
|
center_levels: Optional[bool] = None,
|
|
@@ -160,7 +162,9 @@ class UltraColorbar:
|
|
|
160
162
|
# Generate and prepare the colorbar axes
|
|
161
163
|
# NOTE: The inset axes function needs 'label' to know how to pad the box
|
|
162
164
|
# TODO: Use seperate keywords for frame properties vs. colorbar edge properties?
|
|
165
|
+
frame = _not_none(frame=frame, frameon=frameon)
|
|
163
166
|
if loc in ("fill", "left", "right", "top", "bottom"):
|
|
167
|
+
outline = _not_none(outline=outline, frame=frame)
|
|
164
168
|
length = _not_none(length, rc["colorbar.length"]) # for _add_guide_panel
|
|
165
169
|
kwargs.update({"align": align, "length": length})
|
|
166
170
|
extendsize = _not_none(extendsize, rc["colorbar.extend"])
|
|
@@ -183,6 +187,7 @@ class UltraColorbar:
|
|
|
183
187
|
extendsize = _not_none(extendsize, rc["colorbar.insetextend"])
|
|
184
188
|
cax, kwargs = ax._parse_colorbar_inset(
|
|
185
189
|
loc=loc,
|
|
190
|
+
frame=frame,
|
|
186
191
|
labelloc=labelloc,
|
|
187
192
|
labelrotation=labelrotation,
|
|
188
193
|
labelsize=labelsize,
|
|
@@ -347,7 +352,9 @@ class UltraColorbar:
|
|
|
347
352
|
cax._inset_colorbar_obj = obj
|
|
348
353
|
cax._inset_colorbar_labelloc = labelloc
|
|
349
354
|
cax._inset_colorbar_ticklen = ticklen
|
|
350
|
-
|
|
355
|
+
has_frame = getattr(cax, "_inset_colorbar_frame", None) is not None
|
|
356
|
+
if has_frame:
|
|
357
|
+
_register_inset_colorbar_reflow(ax.figure)
|
|
351
358
|
kw_outline = {"edgecolor": color, "linewidth": linewidth}
|
|
352
359
|
if obj.outline is not None:
|
|
353
360
|
obj.outline.update(kw_outline)
|
|
@@ -958,6 +965,7 @@ def _reflow_inset_colorbar_frame(
|
|
|
958
965
|
*,
|
|
959
966
|
labelloc: Optional[str],
|
|
960
967
|
ticklen: float,
|
|
968
|
+
renderer=None,
|
|
961
969
|
):
|
|
962
970
|
cax = colorbar.ax
|
|
963
971
|
layout = getattr(cax, "_inset_colorbar_layout", None)
|
|
@@ -995,7 +1003,7 @@ def _reflow_inset_colorbar_frame(
|
|
|
995
1003
|
cb_width = width
|
|
996
1004
|
cb_height = length
|
|
997
1005
|
|
|
998
|
-
renderer = cax.figure._get_renderer()
|
|
1006
|
+
renderer = renderer or cax.figure._get_renderer()
|
|
999
1007
|
if hasattr(colorbar, "update_ticks"):
|
|
1000
1008
|
colorbar.update_ticks(manual_only=True)
|
|
1001
1009
|
bboxes = []
|
|
@@ -1988,9 +1988,11 @@ class SubplotGrid(MutableSequence, list):
|
|
|
1988
1988
|
elif not isinstance(objs, list):
|
|
1989
1989
|
objs = [objs]
|
|
1990
1990
|
|
|
1991
|
+
# Spanning subplots can appear more than once in the sliced slot grid.
|
|
1992
|
+
# De-duplicate while preserving order so method dispatch does not repeat.
|
|
1993
|
+
objs = list(dict.fromkeys(objs))
|
|
1991
1994
|
if len(objs) == 1:
|
|
1992
1995
|
return objs[0]
|
|
1993
|
-
objs = [obj for obj in objs if obj is not None]
|
|
1994
1996
|
return SubplotGrid(objs)
|
|
1995
1997
|
|
|
1996
1998
|
def __setitem__(self, key, value):
|
|
@@ -4,6 +4,7 @@ Internal utilities.
|
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
# Import statements
|
|
7
|
+
import functools
|
|
7
8
|
import inspect
|
|
8
9
|
from importlib import import_module
|
|
9
10
|
from numbers import Integral, Real
|
|
@@ -155,6 +156,40 @@ _alias_maps = {
|
|
|
155
156
|
},
|
|
156
157
|
}
|
|
157
158
|
|
|
159
|
+
|
|
160
|
+
_INTERNAL_POP_PARAMS = frozenset(
|
|
161
|
+
{
|
|
162
|
+
"default_cmap",
|
|
163
|
+
"default_discrete",
|
|
164
|
+
"inbounds",
|
|
165
|
+
"plot_contours",
|
|
166
|
+
"plot_lines",
|
|
167
|
+
"skip_autolev",
|
|
168
|
+
"to_centers",
|
|
169
|
+
}
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
@functools.lru_cache(maxsize=256)
|
|
174
|
+
def _signature_cached(func):
|
|
175
|
+
"""
|
|
176
|
+
Cache inspect.signature lookups for hot utility paths.
|
|
177
|
+
"""
|
|
178
|
+
return inspect.signature(func)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def _get_signature(func):
|
|
182
|
+
"""
|
|
183
|
+
Return a signature, normalizing bound methods to their underlying function.
|
|
184
|
+
"""
|
|
185
|
+
key = getattr(func, "__func__", func)
|
|
186
|
+
try:
|
|
187
|
+
return _signature_cached(key)
|
|
188
|
+
except TypeError:
|
|
189
|
+
# Some callable objects may be unhashable for lru_cache keys.
|
|
190
|
+
return inspect.signature(func)
|
|
191
|
+
|
|
192
|
+
|
|
158
193
|
_LAZY_ATTRS = {
|
|
159
194
|
"benchmarks": ("benchmarks", None),
|
|
160
195
|
"context": ("context", None),
|
|
@@ -224,28 +259,19 @@ def _pop_params(kwargs, *funcs, ignore_internal=False):
|
|
|
224
259
|
"""
|
|
225
260
|
Pop parameters of the input functions or methods.
|
|
226
261
|
"""
|
|
227
|
-
internal_params = {
|
|
228
|
-
"default_cmap",
|
|
229
|
-
"default_discrete",
|
|
230
|
-
"inbounds",
|
|
231
|
-
"plot_contours",
|
|
232
|
-
"plot_lines",
|
|
233
|
-
"skip_autolev",
|
|
234
|
-
"to_centers",
|
|
235
|
-
}
|
|
236
262
|
output = {}
|
|
237
263
|
for func in funcs:
|
|
238
264
|
if isinstance(func, inspect.Signature):
|
|
239
265
|
sig = func
|
|
240
266
|
elif callable(func):
|
|
241
|
-
sig =
|
|
267
|
+
sig = _get_signature(func)
|
|
242
268
|
elif func is None:
|
|
243
269
|
continue
|
|
244
270
|
else:
|
|
245
271
|
raise RuntimeError(f"Internal error. Invalid function {func!r}.")
|
|
246
272
|
for key in sig.parameters:
|
|
247
273
|
value = kwargs.pop(key, None)
|
|
248
|
-
if ignore_internal and key in
|
|
274
|
+
if ignore_internal and key in _INTERNAL_POP_PARAMS:
|
|
249
275
|
continue
|
|
250
276
|
if value is not None:
|
|
251
277
|
output[key] = value
|