plopp 25.11.0__tar.gz → 26.2.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.
- {plopp-25.11.0 → plopp-26.2.0}/.copier-answers.yml +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/docs.yml +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/nightly_at_main_lower_bound.yml +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/.gitignore +1 -0
- {plopp-25.11.0 → plopp-26.2.0}/.pre-commit-config.yaml +5 -5
- {plopp-25.11.0/src/plopp.egg-info → plopp-26.2.0}/PKG-INFO +3 -3
- plopp-26.2.0/docs/_static/crosshairs.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/api-reference/index.md +2 -1
- {plopp-25.11.0 → plopp-26.2.0}/docs/conf.py +2 -1
- {plopp-25.11.0 → plopp-26.2.0}/docs/getting-started/numpy-pandas-xarray.ipynb +1 -2
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/inspector-plot.ipynb +1 -3
- {plopp-25.11.0 → plopp-26.2.0}/pyproject.toml +7 -2
- {plopp-25.11.0 → plopp-26.2.0}/requirements/base.txt +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/requirements/basetest.txt +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/requirements/nightly.txt +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/__init__.py +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/canvas.py +3 -3
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/plotly/canvas.py +2 -2
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/colormapper.py +14 -4
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/graphicalview.py +5 -4
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/common.py +3 -3
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/inspector.py +100 -43
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/mesh3d.py +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/plot.py +2 -2
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/scatter.py +3 -3
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/scatter3d.py +5 -5
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/slicer.py +2 -2
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/superplot.py +2 -2
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/xyplot.py +2 -2
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/__init__.pyi +4 -3
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/clip3d.py +160 -41
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/drawing.py +70 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/linesave.py +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/slice.py +2 -2
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/style.py +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/tools.py +3 -3
- {plopp-25.11.0 → plopp-26.2.0/src/plopp.egg-info}/PKG-INFO +3 -3
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp.egg-info/SOURCES.txt +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp.egg-info/requires.txt +2 -2
- {plopp-25.11.0 → plopp-26.2.0}/tests/core/node_test.py +6 -6
- {plopp-25.11.0 → plopp-26.2.0}/tests/graphics/artists_test.py +1 -1
- {plopp-25.11.0 → plopp-26.2.0}/tests/graphics/canvas_test.py +7 -3
- {plopp-25.11.0 → plopp-26.2.0}/tests/graphics/colormapper_test.py +6 -2
- {plopp-25.11.0 → plopp-26.2.0}/tests/graphics/figures_test.py +3 -1
- plopp-26.2.0/tests/plotting/inspector_test.py +326 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/plot_1d_test.py +27 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/scatter_test.py +32 -1
- {plopp-25.11.0 → plopp-26.2.0}/tests/widgets/clip3d_test.py +93 -15
- {plopp-25.11.0 → plopp-26.2.0}/tox.ini +2 -2
- plopp-25.11.0/.github/dependabot.yml +0 -13
- plopp-25.11.0/tests/plotting/inspector_test.py +0 -92
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/ci.yml +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/nightly_at_main.yml +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/nightly_at_release.yml +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/python-version-ci +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/release.yml +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/test.yml +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/unpinned.yml +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/.github/workflows/weekly_windows_macos.yml +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/.python-version +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/CODE_OF_CONDUCT.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/CONTRIBUTING.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/LICENSE +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/MANIFEST.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/README.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/anaconda-icon.js +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/circle-exclamation.svg +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/custom.css +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/customization/custom-interfaces.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/customization/graph-node-tips.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/customization/subplots.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/customization/tweaking-figures.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/favicon.ico +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/gallery/README.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/gallery/peeling-layers-thumbnail.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/gallery/scatter3d-with-slider-thumbnail.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/gallery/scatter3d-with-threshold-thumbnail.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/logo-dark.svg +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/logo-large-dark.svg +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/logo-large.svg +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/logo.svg +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/plotting/image-plot.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/plotting/inspector-plot.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/plotting/line-plot.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/plotting/mesh3d-plot.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/plotting/scatter-plot.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/plotting/scatter3d-plot.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/plotting/slicer-plot.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_static/plotting/super-plot.png +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_templates/class-template.rst +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_templates/doc_version.html +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_templates/module-template.rst +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_templates/scipp-class-template.rst +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/_templates/scipp-module-template.rst +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/about/index.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/api-reference/matplotlib.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/api-reference/plotly.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/api-reference/pythreejs.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/customization/animations.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/customization/custom-interfaces.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/customization/graph-node-tips.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/customization/index.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/customization/subplots.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/customization/tweaking-figures.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/developer/coding-conventions.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/developer/dependency-management.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/developer/getting-started.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/developer/index.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/index.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/interactive-masking.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/masking-a-range.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/nyc-taxi.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/peeling-layers.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/polar-plots.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/rectangle-selection.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/scatter3d-with-slider.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/scatter3d-with-threshold.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/streaming-plot.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/tiled-random-samples.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/gallery/updating-scatter.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/getting-started/index.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/getting-started/installation.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/getting-started/overview.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/getting-started/saving-figures.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/index.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/image-plot.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/index.md +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/line-plot.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/mesh3d-plot.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/scatter-plot.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/scatter3d-plot.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/slicer-plot.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/docs/plotting/super-plot.ipynb +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/base.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/basetest.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/ci.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/ci.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/dev.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/dev.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/docs.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/docs.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/make_base.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/mini.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/mini.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/mypy.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/mypy.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/nightly.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/noplotly.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/noplotly.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/static.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/static.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/test.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/test.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/wheels.in +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/requirements/wheels.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/resources/logo-plopp-2022.svg +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/setup.cfg +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/common.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/fast_image.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/figure.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/image.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/line.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/mesh_image.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/scatter.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/tiled.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/matplotlib/utils.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/plotly/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/plotly/figure.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/plotly/line.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/pythreejs/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/pythreejs/canvas.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/pythreejs/figure.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/pythreejs/mesh3d.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/pythreejs/outline.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/backends/pythreejs/scatter3d.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/__init__.pyi +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/graph.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/helpers.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/limits.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/node_class.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/typing.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/utils.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/core/view.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/data/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/data/examples.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/data/factory.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/data/testing.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/__init__.pyi +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/basefig.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/bbox.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/camera.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/figures.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/graphics/tiled.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/plotting/__init__.pyi +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/py.typed +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/utils/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/utils/__init__.pyi +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/utils/arg_parse.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/utils/deprecation.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/__init__.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/box.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/checkboxes.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/debounce.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp/widgets/toolbar.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp.egg-info/dependency_links.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/src/plopp.egg-info/top_level.txt +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/matplotlib/mpl_image_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/matplotlib/mpl_line_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/matplotlib/mpl_plot_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/matplotlib/mpl_scatter_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/matplotlib/mpl_tiled_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/plotly/conftest.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/plotly/plotly_line_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/pythreejs/pythreejs_canvas_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/backends/pythreejs/pythreejs_scatter3d_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/conftest.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/core/graph_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/core/limits_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/core/utils_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/high_level_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/minimal_plot_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/package_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/common_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/mesh3d_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/plot_2d_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/scatter3d_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/slicer_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/superplot_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/plotting/xyplot_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/widgets/box_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/widgets/checkboxes_test.py +0 -0
- {plopp-25.11.0 → plopp-26.2.0}/tests/widgets/slice_test.py +0 -0
|
@@ -71,7 +71,7 @@ jobs:
|
|
|
71
71
|
path: html/
|
|
72
72
|
- run: echo "::notice::https://remote-unzip.deno.dev/${{ github.repository }}/artifacts/${{ steps.artifact-upload-step.outputs.artifact-id }}"
|
|
73
73
|
|
|
74
|
-
- uses: JamesIves/github-pages-deploy-action@v4.
|
|
74
|
+
- uses: JamesIves/github-pages-deploy-action@v4.8.0
|
|
75
75
|
if: ${{ inputs.publish }}
|
|
76
76
|
with:
|
|
77
77
|
branch: gh-pages
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
ESS_PROTECTED_FILESTORE_PASSWORD: ${{ secrets.ESS_PROTECTED_FILESTORE_PASSWORD }}
|
|
32
32
|
steps:
|
|
33
33
|
- uses: actions/checkout@v4
|
|
34
|
-
- uses: astral-sh/setup-uv@
|
|
34
|
+
- uses: astral-sh/setup-uv@v7
|
|
35
35
|
with:
|
|
36
36
|
python-version: ${{ matrix.python.version }}
|
|
37
37
|
- run: uv run --extra=test --resolution=lowest-direct pytest
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
repos:
|
|
2
2
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
-
rev:
|
|
3
|
+
rev: v6.0.0
|
|
4
4
|
hooks:
|
|
5
5
|
- id: check-added-large-files
|
|
6
6
|
- id: check-case-conflict
|
|
@@ -15,14 +15,14 @@ repos:
|
|
|
15
15
|
args: [ --markdown-linebreak-ext=md ]
|
|
16
16
|
exclude: '\.svg'
|
|
17
17
|
- repo: https://github.com/kynan/nbstripout
|
|
18
|
-
rev: 0.
|
|
18
|
+
rev: 0.8.2
|
|
19
19
|
hooks:
|
|
20
20
|
- id: nbstripout
|
|
21
21
|
types: [ "jupyter" ]
|
|
22
22
|
args: [ "--drop-empty-cells",
|
|
23
23
|
"--extra-keys 'metadata.language_info.version cell.metadata.jp-MarkdownHeadingCollapsed cell.metadata.pycharm'" ]
|
|
24
24
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
25
|
-
rev: v0.
|
|
25
|
+
rev: v0.14.6
|
|
26
26
|
hooks:
|
|
27
27
|
- id: ruff
|
|
28
28
|
args: [ --fix ]
|
|
@@ -30,7 +30,7 @@ repos:
|
|
|
30
30
|
- id: ruff-format
|
|
31
31
|
types_or: [ python, pyi ]
|
|
32
32
|
- repo: https://github.com/codespell-project/codespell
|
|
33
|
-
rev: v2.
|
|
33
|
+
rev: v2.4.1
|
|
34
34
|
hooks:
|
|
35
35
|
- id: codespell
|
|
36
36
|
additional_dependencies:
|
|
@@ -48,7 +48,7 @@ repos:
|
|
|
48
48
|
- id: rst-inline-touching-normal
|
|
49
49
|
- id: text-unicode-replacement-char
|
|
50
50
|
- repo: https://github.com/rhysd/actionlint
|
|
51
|
-
rev: v1.7.
|
|
51
|
+
rev: v1.7.9
|
|
52
52
|
hooks:
|
|
53
53
|
- id: actionlint
|
|
54
54
|
# Disable because of false-positive SC2046
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plopp
|
|
3
|
-
Version:
|
|
3
|
+
Version: 26.2.0
|
|
4
4
|
Summary: Visualization library for Scipp
|
|
5
5
|
Author: Scipp contributors
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -36,13 +36,13 @@ Requires-Dist: graphviz>=0.20.3; extra == "test"
|
|
|
36
36
|
Requires-Dist: h5py>=3.12; extra == "test"
|
|
37
37
|
Requires-Dist: ipympl>=0.8.4; extra == "test"
|
|
38
38
|
Requires-Dist: ipywidgets>=8.1.0; extra == "test"
|
|
39
|
-
Requires-Dist: ipykernel<7; extra == "test"
|
|
39
|
+
Requires-Dist: ipykernel<7,>=6.26; extra == "test"
|
|
40
40
|
Requires-Dist: mpltoolbox>=24.6.0; extra == "test"
|
|
41
41
|
Requires-Dist: pandas>=2.2.2; extra == "test"
|
|
42
42
|
Requires-Dist: plotly>=5.15.0; extra == "test"
|
|
43
43
|
Requires-Dist: pooch>=1.5; extra == "test"
|
|
44
44
|
Requires-Dist: pyarrow>=13.0.0; extra == "test"
|
|
45
|
-
Requires-Dist: pytest>=
|
|
45
|
+
Requires-Dist: pytest>=8.0; extra == "test"
|
|
46
46
|
Requires-Dist: pythreejs>=2.4.1; extra == "test"
|
|
47
47
|
Requires-Dist: scipp>=25.5.0; extra == "test"
|
|
48
48
|
Requires-Dist: scipy>=1.10.0; extra == "test"
|
|
Binary file
|
|
@@ -251,7 +251,8 @@ linkcheck_ignore = [
|
|
|
251
251
|
r'https?://github\.com/.*?/blob/[a-f0-9]+/.+?#',
|
|
252
252
|
# Linkcheck seems to be denied access by some DOI resolvers.
|
|
253
253
|
# Since DOIs are supposed to be permanent, we don't need to check them.'
|
|
254
|
-
r'https
|
|
254
|
+
r'https?://doi\.org/',
|
|
255
|
+
r'https?://dx\.doi\.org/',
|
|
255
256
|
]
|
|
256
257
|
|
|
257
258
|
# -- Options for nbsphinx gallery------------------------------------------
|
|
@@ -223,8 +223,7 @@
|
|
|
223
223
|
"id": "16",
|
|
224
224
|
"metadata": {},
|
|
225
225
|
"source": [
|
|
226
|
-
"Or the `inspector` plot that allows you to pick points on the 2d map and display a time cut in a second plot below using the the inspector tool\
|
|
227
|
-
"<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Font_Awesome_5_solid_crosshairs.svg/32px-Font_Awesome_5_solid_crosshairs.svg.png' width=\"20\"/>:"
|
|
226
|
+
"Or the `inspector` plot that allows you to pick points on the 2d map and display a time cut in a second plot below using the the inspector tool <img src='../_static/crosshairs.png' width=\"20\"/>:"
|
|
228
227
|
]
|
|
229
228
|
},
|
|
230
229
|
{
|
|
@@ -10,9 +10,7 @@
|
|
|
10
10
|
"The `inspector` plot takes in a three-dimensional input and applies a reduction operation (`sum` by default) along one of the dimensions specified by `dim`.\n",
|
|
11
11
|
"It displays the result as a two-dimensional image.\n",
|
|
12
12
|
"\n",
|
|
13
|
-
"In addition, the inspector tool\n",
|
|
14
|
-
"<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Font_Awesome_5_solid_crosshairs.svg/32px-Font_Awesome_5_solid_crosshairs.svg.png' width=\"20\"/>\n",
|
|
15
|
-
"in the toolbar allows to add markers on the image,\n",
|
|
13
|
+
"In addition, the inspector tool <img src='../_static/crosshairs.png' width=\"20\"/> in the toolbar allows to add markers on the image,\n",
|
|
16
14
|
"which generate one-dimensional slices (retaining only `dim`) that are displayed in a second figure.\n",
|
|
17
15
|
"\n",
|
|
18
16
|
"The points can be dragged/moved, as well as deleted (via a middle click).\n",
|
|
@@ -44,13 +44,13 @@ test = [
|
|
|
44
44
|
"h5py>=3.12",
|
|
45
45
|
"ipympl>=0.8.4",
|
|
46
46
|
"ipywidgets>=8.1.0",
|
|
47
|
-
"ipykernel
|
|
47
|
+
"ipykernel>=6.26,<7", # Concurrency bug, see https://github.com/scipp/plopp/issues/499.
|
|
48
48
|
"mpltoolbox>=24.6.0",
|
|
49
49
|
"pandas>=2.2.2",
|
|
50
50
|
"plotly>=5.15.0",
|
|
51
51
|
"pooch>=1.5",
|
|
52
52
|
"pyarrow>=13.0.0",
|
|
53
|
-
"pytest>=
|
|
53
|
+
"pytest>=8.0",
|
|
54
54
|
"pythreejs>=2.4.1",
|
|
55
55
|
"scipp>=25.5.0",
|
|
56
56
|
"scipy>=1.10.0",
|
|
@@ -86,6 +86,11 @@ filterwarnings = [
|
|
|
86
86
|
'ignore:Parsing dates involving a day of month without a year:DeprecationWarning',
|
|
87
87
|
# Should be removed once we lower pin a matplotlib version that respects the deprecation
|
|
88
88
|
'ignore:.*parameter is deprecated and will be removed in Pillow 13.*:DeprecationWarning',
|
|
89
|
+
# Warnings related to pyparsing deprecations: this is fixed in mpl==3.10.8 onwards
|
|
90
|
+
"ignore:'parseString' deprecated:DeprecationWarning",
|
|
91
|
+
"ignore:'resetCache' deprecated:DeprecationWarning",
|
|
92
|
+
"ignore:'enablePackrat' deprecated:DeprecationWarning",
|
|
93
|
+
"ignore:'parseAll' argument is deprecated:DeprecationWarning",
|
|
89
94
|
]
|
|
90
95
|
|
|
91
96
|
[tool.ruff]
|
|
@@ -112,7 +112,7 @@ class Canvas:
|
|
|
112
112
|
grid: bool = False,
|
|
113
113
|
user_vmin: sc.Variable | float | None = None,
|
|
114
114
|
user_vmax: sc.Variable | float | None = None,
|
|
115
|
-
aspect: Literal['auto', 'equal'
|
|
115
|
+
aspect: Literal['auto', 'equal'] | None = None,
|
|
116
116
|
cbar: bool = False,
|
|
117
117
|
legend: bool | tuple[float, float] = True,
|
|
118
118
|
xmin: sc.Variable | float | None = None,
|
|
@@ -123,7 +123,7 @@ class Canvas:
|
|
|
123
123
|
logy: bool = False,
|
|
124
124
|
xlabel: str | None = None,
|
|
125
125
|
ylabel: str | None = None,
|
|
126
|
-
norm: Literal['linear', 'log'
|
|
126
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
127
127
|
**ignored,
|
|
128
128
|
):
|
|
129
129
|
# Note on the `**ignored`` keyword arguments: the figure which owns the canvas
|
|
@@ -515,7 +515,7 @@ class Canvas:
|
|
|
515
515
|
"""
|
|
516
516
|
self.fig.canvas.toolbar.pan()
|
|
517
517
|
|
|
518
|
-
def panzoom(self, value: Literal['pan', 'zoom'
|
|
518
|
+
def panzoom(self, value: Literal['pan', 'zoom'] | None):
|
|
519
519
|
"""
|
|
520
520
|
Activate or deactivate the pan or zoom tool, depending on the input value.
|
|
521
521
|
"""
|
|
@@ -46,7 +46,7 @@ class Canvas:
|
|
|
46
46
|
logy: bool | None = None,
|
|
47
47
|
xlabel: str | None = None,
|
|
48
48
|
ylabel: str | None = None,
|
|
49
|
-
norm: Literal['linear', 'log'
|
|
49
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
50
50
|
**ignored,
|
|
51
51
|
):
|
|
52
52
|
# Note on the `**ignored`` keyword arguments: the figure which owns the canvas
|
|
@@ -326,7 +326,7 @@ class Canvas:
|
|
|
326
326
|
"""
|
|
327
327
|
self.fig.update_layout(dragmode='pan')
|
|
328
328
|
|
|
329
|
-
def panzoom(self, value: Literal['pan', 'zoom'
|
|
329
|
+
def panzoom(self, value: Literal['pan', 'zoom'] | None):
|
|
330
330
|
"""
|
|
331
331
|
Activate or deactivate the pan or zoom tool, depending on the input value.
|
|
332
332
|
"""
|
|
@@ -55,7 +55,12 @@ def _get_cmap(colormap: str | Colormap, nan_color: str | None = None) -> Colorma
|
|
|
55
55
|
else:
|
|
56
56
|
cmap = mpl.cm.get_cmap(colormap)
|
|
57
57
|
except (KeyError, ValueError):
|
|
58
|
+
# Case where we have just a single color
|
|
58
59
|
cmap = LinearSegmentedColormap.from_list('tmp', [colormap, colormap])
|
|
60
|
+
cmap.set_over(colormap)
|
|
61
|
+
cmap.set_under(colormap)
|
|
62
|
+
cmap.set_bad(colormap)
|
|
63
|
+
return cmap
|
|
59
64
|
|
|
60
65
|
# Add under and over values to the cmap
|
|
61
66
|
delta = 0.15
|
|
@@ -141,7 +146,7 @@ class ColorMapper:
|
|
|
141
146
|
clabel: str | None = None,
|
|
142
147
|
nan_color: str | None = None,
|
|
143
148
|
figsize: tuple[float, float] | None = None,
|
|
144
|
-
norm: Literal['linear', 'log'
|
|
149
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
145
150
|
vmin: sc.Variable | float | None = None,
|
|
146
151
|
vmax: sc.Variable | float | None = None,
|
|
147
152
|
):
|
|
@@ -152,9 +157,14 @@ class ColorMapper:
|
|
|
152
157
|
self._canvas = canvas
|
|
153
158
|
self.cax = self._canvas.cax if hasattr(self._canvas, 'cax') else None
|
|
154
159
|
self.cmap = _get_cmap(cmap, nan_color=nan_color)
|
|
155
|
-
self.mask_cmap = _get_cmap(
|
|
156
|
-
|
|
157
|
-
|
|
160
|
+
self.mask_cmap = _get_cmap(mask_cmap if mask_color is None else mask_color)
|
|
161
|
+
if mask_color is None:
|
|
162
|
+
# If no single color was used for masks, it means a colormap was used
|
|
163
|
+
# instead. However, `nan_color` was not passed to get_cmap for the masks
|
|
164
|
+
# (it only applied to non-masked data), so we still need to set the 'bad'
|
|
165
|
+
# color here. We choose to set it to the 'over' color for a lack of a
|
|
166
|
+
# better idea.
|
|
167
|
+
self.mask_cmap.set_bad(self.mask_cmap.get_over())
|
|
158
168
|
|
|
159
169
|
# Inside the autoscale, we need to distinguish between a min value that was set
|
|
160
170
|
# by the user and one that was found by looping over all the data.
|
|
@@ -51,11 +51,11 @@ class GraphicalView(View):
|
|
|
51
51
|
mask_cmap: str = 'gray',
|
|
52
52
|
mask_color: str | None = None,
|
|
53
53
|
cbar: bool = False,
|
|
54
|
-
norm: Literal['linear', 'log'
|
|
54
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
55
55
|
vmin: sc.Variable | float | None = None,
|
|
56
56
|
vmax: sc.Variable | float | None = None,
|
|
57
57
|
scale: dict[str, str] | None = None,
|
|
58
|
-
aspect: Literal['auto', 'equal'
|
|
58
|
+
aspect: Literal['auto', 'equal'] | None = None,
|
|
59
59
|
grid: bool = False,
|
|
60
60
|
title: str | None = None,
|
|
61
61
|
figsize: tuple[float, float] | None = None,
|
|
@@ -312,5 +312,6 @@ class GraphicalView(View):
|
|
|
312
312
|
self.artists[key].remove()
|
|
313
313
|
del self.artists[key]
|
|
314
314
|
self.canvas.update_legend()
|
|
315
|
-
self.
|
|
316
|
-
|
|
315
|
+
if self._autoscale:
|
|
316
|
+
self.fit_to_data()
|
|
317
|
+
self.canvas.draw()
|
|
@@ -319,7 +319,7 @@ def input_to_nodes(obj: PlottableMulti, processor: Callable) -> list[Node]:
|
|
|
319
319
|
to_nodes = obj.items()
|
|
320
320
|
else:
|
|
321
321
|
to_nodes = [(getattr(obj, "name", None), obj)]
|
|
322
|
-
nodes = [Node(processor, inp, name=name) for name, inp in to_nodes]
|
|
322
|
+
nodes = [Node(processor, inp, name=str(name)) for name, inp in to_nodes]
|
|
323
323
|
for node in nodes:
|
|
324
324
|
if hasattr(processor, 'func'):
|
|
325
325
|
node.pretty_name = processor.func.__name__
|
|
@@ -347,7 +347,7 @@ def raise_multiple_inputs_for_2d_plot_error(origin):
|
|
|
347
347
|
|
|
348
348
|
|
|
349
349
|
def categorize_args(
|
|
350
|
-
aspect: Literal['auto', 'equal'
|
|
350
|
+
aspect: Literal['auto', 'equal'] | None = None,
|
|
351
351
|
autoscale: bool = True,
|
|
352
352
|
cbar: bool = True,
|
|
353
353
|
clabel: str | None = None,
|
|
@@ -364,7 +364,7 @@ def categorize_args(
|
|
|
364
364
|
mask_cmap: str = 'gray',
|
|
365
365
|
mask_color: str = 'black',
|
|
366
366
|
nan_color: str | None = None,
|
|
367
|
-
norm: Literal['linear', 'log'
|
|
367
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
368
368
|
scale: dict[str, str] | None = None,
|
|
369
369
|
title: str | None = None,
|
|
370
370
|
vmax: sc.Variable | float | None = None,
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
from typing import Literal
|
|
5
5
|
|
|
6
|
+
import numpy as np
|
|
6
7
|
import scipp as sc
|
|
7
8
|
|
|
8
9
|
from ..core import Node
|
|
@@ -34,11 +35,40 @@ def _slice_xy(da: sc.DataArray, xy: dict[str, dict[str, int]]) -> sc.DataArray:
|
|
|
34
35
|
return da[y['dim'], y['value']][x['dim'], x['value']]
|
|
35
36
|
|
|
36
37
|
|
|
38
|
+
def _coord_to_centers(da: sc.DataArray, dim: str) -> sc.Variable:
|
|
39
|
+
coord = da.coords[dim]
|
|
40
|
+
if da.coords.is_edges(dim, dim=dim):
|
|
41
|
+
return sc.midpoints(coord, dim=dim)
|
|
42
|
+
return coord
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _mask_outside_polygon(
|
|
46
|
+
da: sc.DataArray, poly: dict[str, dict[str, sc.Variable]]
|
|
47
|
+
) -> sc.DataArray:
|
|
48
|
+
from matplotlib.path import Path
|
|
49
|
+
|
|
50
|
+
xdim = poly['x']['dim']
|
|
51
|
+
ydim = poly['y']['dim']
|
|
52
|
+
x = _coord_to_centers(da, xdim)
|
|
53
|
+
y = _coord_to_centers(da, ydim)
|
|
54
|
+
vx = poly['x']['value'].to(unit=x.unit).values
|
|
55
|
+
vy = poly['y']['value'].to(unit=y.unit).values
|
|
56
|
+
verts = np.column_stack([vx, vy])
|
|
57
|
+
path = Path(verts)
|
|
58
|
+
xx = sc.broadcast(x, sizes={**x.sizes, **y.sizes})
|
|
59
|
+
yy = sc.broadcast(y, sizes={**x.sizes, **y.sizes})
|
|
60
|
+
points = np.column_stack([xx.values.ravel(), yy.values.ravel()])
|
|
61
|
+
inside = sc.array(
|
|
62
|
+
dims=yy.dims, values=path.contains_points(points).reshape(yy.shape)
|
|
63
|
+
)
|
|
64
|
+
return da.assign_masks(__inside_polygon=~inside).sum({*x.dims, *y.dims})
|
|
65
|
+
|
|
66
|
+
|
|
37
67
|
def inspector(
|
|
38
68
|
obj: Plottable,
|
|
39
69
|
dim: str | None = None,
|
|
40
70
|
*,
|
|
41
|
-
aspect: Literal['auto', 'equal'
|
|
71
|
+
aspect: Literal['auto', 'equal'] | None = None,
|
|
42
72
|
autoscale: bool = True,
|
|
43
73
|
cbar: bool = True,
|
|
44
74
|
clabel: str | None = None,
|
|
@@ -49,17 +79,19 @@ def inspector(
|
|
|
49
79
|
grid: bool = False,
|
|
50
80
|
legend: bool | tuple[float, float] = True,
|
|
51
81
|
logc: bool | None = None,
|
|
52
|
-
logy: bool | None = None,
|
|
53
82
|
mask_cmap: str = 'gray',
|
|
54
83
|
mask_color: str = 'black',
|
|
84
|
+
mode: Literal['point', 'polygon'] = 'point',
|
|
55
85
|
nan_color: str | None = None,
|
|
56
|
-
norm: Literal['linear', 'log'
|
|
86
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
57
87
|
operation: Literal['sum', 'mean', 'min', 'max'] = 'sum',
|
|
58
88
|
orientation: Literal['horizontal', 'vertical'] = 'horizontal',
|
|
59
89
|
title: str | None = None,
|
|
60
90
|
vmax: sc.Variable | float | None = None,
|
|
61
91
|
vmin: sc.Variable | float | None = None,
|
|
62
92
|
xlabel: str | None = None,
|
|
93
|
+
xmax: sc.Variable | float | None = None,
|
|
94
|
+
xmin: sc.Variable | float | None = None,
|
|
63
95
|
ylabel: str | None = None,
|
|
64
96
|
ymax: sc.Variable | float | None = None,
|
|
65
97
|
ymin: sc.Variable | float | None = None,
|
|
@@ -69,16 +101,29 @@ def inspector(
|
|
|
69
101
|
Inspector takes in a three-dimensional input and applies a reduction operation
|
|
70
102
|
(``'sum'`` by default) along one of the dimensions specified by ``dim``.
|
|
71
103
|
It displays the result as a two-dimensional image.
|
|
72
|
-
In addition, an 'inspection' tool is available in the toolbar
|
|
73
|
-
markers on the image
|
|
74
|
-
dimension and
|
|
75
|
-
figure.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
-
|
|
104
|
+
In addition, an 'inspection' tool is available in the toolbar. In ``mode='point'``
|
|
105
|
+
it allows placing point markers on the image to slice at that position, retaining
|
|
106
|
+
only the third dimension and displaying the resulting one-dimensional slice in the
|
|
107
|
+
right-hand side figure. In ``mode='polygon'`` it allows drawing a polygon to compute
|
|
108
|
+
the total intensity inside the polygon as a function of the third dimension.
|
|
109
|
+
|
|
110
|
+
Controls (point mode):
|
|
111
|
+
- Left-click to make new points
|
|
112
|
+
- Left-click and hold on point to move point
|
|
80
113
|
- Middle-click to delete point
|
|
81
114
|
|
|
115
|
+
Controls (polygon mode):
|
|
116
|
+
- Left-click to make new polygons
|
|
117
|
+
- Left-click and hold on polygon vertex to move vertex
|
|
118
|
+
- Right-click and hold to drag/move the entire polygon
|
|
119
|
+
- Middle-click to delete polygon
|
|
120
|
+
|
|
121
|
+
Notes
|
|
122
|
+
-----
|
|
123
|
+
|
|
124
|
+
Almost all the arguments for plot customization apply to the two-dimensional image
|
|
125
|
+
(unless specified).
|
|
126
|
+
|
|
82
127
|
Parameters
|
|
83
128
|
----------
|
|
84
129
|
obj:
|
|
@@ -93,13 +138,13 @@ def inspector(
|
|
|
93
138
|
autoscale:
|
|
94
139
|
Automatically scale the axes/colormap on updates if ``True``.
|
|
95
140
|
cbar:
|
|
96
|
-
Show colorbar if ``True
|
|
141
|
+
Show colorbar if ``True``.
|
|
97
142
|
clabel:
|
|
98
|
-
Label for colorscale
|
|
143
|
+
Label for colorscale.
|
|
99
144
|
cmax:
|
|
100
|
-
Upper limit for colorscale
|
|
145
|
+
Upper limit for colorscale.
|
|
101
146
|
cmin:
|
|
102
|
-
Lower limit for colorscale
|
|
147
|
+
Lower limit for colorscale.
|
|
103
148
|
errorbars:
|
|
104
149
|
Show errorbars if ``True`` (1d figure).
|
|
105
150
|
figsize:
|
|
@@ -111,18 +156,18 @@ def inspector(
|
|
|
111
156
|
``(x, y)`` coordinates of the legend's anchor point in axes coordinates
|
|
112
157
|
(1d figure).
|
|
113
158
|
logc:
|
|
114
|
-
If ``True``, use logarithmic scale for colorscale
|
|
115
|
-
logy:
|
|
116
|
-
If ``True``, use logarithmic scale for y-axis (1d figure).
|
|
159
|
+
If ``True``, use logarithmic scale for colorscale.
|
|
117
160
|
mask_cmap:
|
|
118
|
-
Colormap to use for masks
|
|
161
|
+
Colormap to use for masks.
|
|
119
162
|
mask_color:
|
|
120
163
|
Color of masks (overrides ``mask_cmap``).
|
|
164
|
+
mode:
|
|
165
|
+
Select ``'point'`` for point inspection or ``'polygon'`` for polygon selection
|
|
166
|
+
with total intensity inside the polygon plotted as a function of ``dim``.
|
|
121
167
|
nan_color:
|
|
122
|
-
Color to use for NaN values
|
|
168
|
+
Color to use for NaN values.
|
|
123
169
|
norm:
|
|
124
|
-
Set to ``'log'`` for a logarithmic
|
|
125
|
-
(2d figure). Legacy, prefer ``logy`` and ``logc`` instead.
|
|
170
|
+
Set to ``'log'`` for a logarithmic colorscale. Legacy, prefer ``logc`` instead.
|
|
126
171
|
operation:
|
|
127
172
|
The operation to apply along the third (undisplayed) dimension specified by
|
|
128
173
|
``dim``.
|
|
@@ -132,15 +177,19 @@ def inspector(
|
|
|
132
177
|
title:
|
|
133
178
|
The figure title.
|
|
134
179
|
vmax:
|
|
135
|
-
Upper limit for data to be displayed
|
|
136
|
-
|
|
180
|
+
Upper limit for data colorscale to be displayed.
|
|
181
|
+
Legacy, prefer ``cmax`` instead.
|
|
137
182
|
vmin:
|
|
138
|
-
Lower limit for data to be displayed
|
|
139
|
-
|
|
183
|
+
Lower limit for data colorscale to be displayed.
|
|
184
|
+
Legacy, prefer ``cmin`` instead.
|
|
140
185
|
xlabel:
|
|
141
|
-
Label for x-axis
|
|
186
|
+
Label for x-axis.
|
|
187
|
+
xmax:
|
|
188
|
+
Upper limit for x-axis (1d figure)
|
|
189
|
+
xmin:
|
|
190
|
+
Lower limit for x-axis (1d figure)
|
|
142
191
|
ylabel:
|
|
143
|
-
Label for y-axis
|
|
192
|
+
Label for y-axis.
|
|
144
193
|
ymax:
|
|
145
194
|
Upper limit for y-axis (1d figure).
|
|
146
195
|
ymin:
|
|
@@ -159,11 +208,9 @@ def inspector(
|
|
|
159
208
|
errorbars=errorbars,
|
|
160
209
|
grid=grid,
|
|
161
210
|
legend=legend,
|
|
162
|
-
logy=logy,
|
|
163
211
|
mask_color=mask_color,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
vmin=vmin,
|
|
212
|
+
xmax=xmax,
|
|
213
|
+
xmin=xmin,
|
|
167
214
|
ymax=ymax,
|
|
168
215
|
ymin=ymin,
|
|
169
216
|
)
|
|
@@ -190,6 +237,7 @@ def inspector(
|
|
|
190
237
|
figsize=figsize,
|
|
191
238
|
grid=grid,
|
|
192
239
|
logc=logc,
|
|
240
|
+
mask_cmap=mask_cmap,
|
|
193
241
|
mask_color=mask_color,
|
|
194
242
|
nan_color=nan_color,
|
|
195
243
|
norm=norm,
|
|
@@ -198,21 +246,30 @@ def inspector(
|
|
|
198
246
|
vmin=vmin,
|
|
199
247
|
xlabel=xlabel,
|
|
200
248
|
ylabel=ylabel,
|
|
201
|
-
ymax=ymax,
|
|
202
|
-
ymin=ymin,
|
|
203
249
|
**kwargs,
|
|
204
250
|
)
|
|
251
|
+
from ..widgets import Box, PointsTool, PolygonTool
|
|
205
252
|
|
|
206
|
-
|
|
253
|
+
if mode == 'point':
|
|
254
|
+
tool = PointsTool(
|
|
255
|
+
figure=f2d,
|
|
256
|
+
input_node=bin_edges_node,
|
|
257
|
+
func=_slice_xy,
|
|
258
|
+
destination=f1d,
|
|
259
|
+
tooltip="Activate inspector tool",
|
|
260
|
+
)
|
|
261
|
+
elif mode == 'polygon':
|
|
262
|
+
tool = PolygonTool(
|
|
263
|
+
figure=f2d,
|
|
264
|
+
input_node=bin_edges_node,
|
|
265
|
+
func=_mask_outside_polygon,
|
|
266
|
+
destination=f1d,
|
|
267
|
+
tooltip="Activate polygon inspector tool",
|
|
268
|
+
)
|
|
269
|
+
else:
|
|
270
|
+
raise ValueError(f'Mode "{mode}" is unknown.')
|
|
207
271
|
|
|
208
|
-
|
|
209
|
-
figure=f2d,
|
|
210
|
-
input_node=bin_edges_node,
|
|
211
|
-
func=_slice_xy,
|
|
212
|
-
destination=f1d,
|
|
213
|
-
tooltip="Activate inspector tool",
|
|
214
|
-
)
|
|
215
|
-
f2d.toolbar['inspect'] = pts
|
|
272
|
+
f2d.toolbar['inspect'] = tool
|
|
216
273
|
out = [f2d, f1d]
|
|
217
274
|
if orientation == 'horizontal':
|
|
218
275
|
out = [out]
|
|
@@ -53,7 +53,7 @@ def mesh3d(
|
|
|
53
53
|
figsize: tuple[int, int] = (600, 400),
|
|
54
54
|
logc: bool | None = None,
|
|
55
55
|
nan_color: str | None = None,
|
|
56
|
-
norm: Literal['linear', 'log'
|
|
56
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
57
57
|
title: str | None = None,
|
|
58
58
|
vmax: sc.Variable | float = None,
|
|
59
59
|
vmin: sc.Variable | float = None,
|
|
@@ -19,7 +19,7 @@ from .common import (
|
|
|
19
19
|
def plot(
|
|
20
20
|
obj: PlottableMulti,
|
|
21
21
|
*,
|
|
22
|
-
aspect: Literal['auto', 'equal'
|
|
22
|
+
aspect: Literal['auto', 'equal'] | None = None,
|
|
23
23
|
autoscale: bool = True,
|
|
24
24
|
cbar: bool = True,
|
|
25
25
|
clabel: str | None = None,
|
|
@@ -38,7 +38,7 @@ def plot(
|
|
|
38
38
|
mask_cmap: str = 'gray',
|
|
39
39
|
mask_color: str | None = None,
|
|
40
40
|
nan_color: str | None = None,
|
|
41
|
-
norm: Literal['linear', 'log'
|
|
41
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
42
42
|
scale: dict[str, str] | None = None,
|
|
43
43
|
title: str | None = None,
|
|
44
44
|
vmax: sc.Variable | float | None = None,
|
|
@@ -46,9 +46,9 @@ def scatter(
|
|
|
46
46
|
x: str = 'x',
|
|
47
47
|
y: str = 'y',
|
|
48
48
|
pos: str | None = None,
|
|
49
|
-
aspect: Literal['auto', 'equal'
|
|
49
|
+
aspect: Literal['auto', 'equal'] | None = None,
|
|
50
50
|
autoscale: bool = True,
|
|
51
|
-
cbar: bool =
|
|
51
|
+
cbar: bool = False,
|
|
52
52
|
clabel: str | None = None,
|
|
53
53
|
cmap: str = 'viridis',
|
|
54
54
|
cmax: sc.Variable | float | None = None,
|
|
@@ -62,7 +62,7 @@ def scatter(
|
|
|
62
62
|
logy: bool | None = None,
|
|
63
63
|
mask_color: str = 'black',
|
|
64
64
|
nan_color: str | None = None,
|
|
65
|
-
norm: Literal['linear', 'log'
|
|
65
|
+
norm: Literal['linear', 'log'] | None = None,
|
|
66
66
|
scale: dict[str, str] | None = None,
|
|
67
67
|
size: str | float | None = None,
|
|
68
68
|
title: str | None = None,
|