PlotPy 2.9.0__tar.gz → 2.10.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.
- {plotpy-2.9.0 → plotpy-2.10.0}/PKG-INFO +2 -2
- {plotpy-2.9.0 → plotpy-2.10.0}/PlotPy.egg-info/PKG-INFO +2 -2
- {plotpy-2.9.0 → plotpy-2.10.0}/PlotPy.egg-info/SOURCES.txt +4 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/PlotPy.egg-info/requires.txt +1 -1
- plotpy-2.10.0/doc/release_notes/release_2.10.md +34 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/requirements.rst +22 -16
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/__init__.py +1 -1
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/__init__.py +1 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/image/__init__.py +1 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/image/base.py +49 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/image/misc.py +89 -6
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/image/standard.py +5 -28
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/image/transform.py +5 -1
- plotpy-2.10.0/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/plot/base.py +56 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/axes.py +24 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/base.py +5 -1
- plotpy-2.10.0/plotpy/tests/unit/test_autoscale_strategy.py +116 -0
- plotpy-2.10.0/plotpy/tests/unit/test_image_log_set_data.py +70 -0
- plotpy-2.10.0/plotpy/tests/unit/test_snapshot_original_size.py +169 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/curve.py +9 -9
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/image.py +2 -3
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/misc.py +34 -3
- {plotpy-2.9.0 → plotpy-2.10.0}/pyproject.toml +1 -1
- {plotpy-2.9.0 → plotpy-2.10.0}/requirements.txt +3 -2
- {plotpy-2.9.0 → plotpy-2.10.0}/src/histogram2d.c +249 -253
- {plotpy-2.9.0 → plotpy-2.10.0}/src/mandelbrot.c +248 -252
- plotpy-2.9.0/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/LICENSE +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/MANIFEST.in +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/PlotPy.egg-info/dependency_links.txt +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/PlotPy.egg-info/entry_points.txt +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/PlotPy.egg-info/top_level.txt +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/README.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/colormaps/README.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/colormaps/_cm.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/colormaps/colormap.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/colormaps/matplotlib_cmaps.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/_static/favicon.ico +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/conf.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/build.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/contribute.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/gitworkflow.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/guiqwt_to_plotpy.csv +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/guiqwt_to_plotpy.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/platforms.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/v1_to_guidata_v3.csv +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/v1_to_v2.csv +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/dev/v1_to_v2.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/colormapmanager.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/events.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/fit.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/fliprotate.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/imagefile.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/io.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/items/builder.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/items/examples.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/items/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/items/overview.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/items/reference.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/mathutils/colormaps.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/mathutils/geometry.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/mathutils/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/mathutils/scaler.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/panels/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/panels/overview.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/panels/reference.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/plot/examples.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/plot/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/plot/overview.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/plot/reference.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/pyplot.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/resizedialog.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/rotatecrop.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/selectdialog.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/signals.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/styles/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/styles/overview.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/styles/reference.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/tools/examples.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/tools/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/tools/overview.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/features/tools/reference.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/my_plot_manager.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/my_plot_manager.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/panorama-vertical.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/panorama-vertical.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/panorama.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/panorama.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/plot_widgets.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/plot_widgets.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/plotpy-banner.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/plotpy-vertical.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/__init__.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/computations.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/contrast.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/cross_section.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/cross_section2.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/dotarraydemo.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/filtertest1.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/filtertest2.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/fit.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/get_point.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/hist2d.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/image_plot_tools.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/imagefilter.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/imagesuperp.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/imagexy.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/manager.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/mandelbrot.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/pcolor.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/plot.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/simple_dialog.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/simple_window.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/images/screenshots/transform.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/intro/examples.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/intro/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/intro/installation.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/intro/licenses.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/intro/motivation.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/intro/overview.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/index.rst +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.00.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.01.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.02.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.03.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.04.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.05.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.06.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.07.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.08.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/doc/release_notes/release_2.09.md +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/builder/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/builder/annotation.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/builder/curvemarker.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/builder/image.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/builder/label.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/builder/plot.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/builder/shape.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/config.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/constants.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/coords.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/colormaps_default.json +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/apply.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/arredit.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/arrow_down.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/arrow_up.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/autorefresh.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/autoscale.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/axes.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/busy.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/cell_edit.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/center.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/cmap_edit.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/contrast.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/copy.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/copytoclipboard.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/csapplylut.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/csautoscale.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/csection.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/csection_a.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/csection_line.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/csection_oblique.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/csperimage.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/curve_downsample.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/curvestyles/dots.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/curvestyles/lines.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/curvestyles/steps.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/curvestyles/sticks.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/curvetypes/xfy.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/curvetypes/yfx.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/delete.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/edit.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/edit_point_selection.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/edit.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/edit_add.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/editcopy.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/editdelete.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/editpaste.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/fileimport.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/filesave.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/imshow.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/insert.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/plot.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/editors/rename.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/eliminate_outliers.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/eraser.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/exit.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/expander_down.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/expander_right.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/export.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/file.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/fileclose.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/fileimport.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filenew.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/fileopen.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filesave.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filesaveas.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/doc.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/gif.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/html.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/jpg.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/pdf.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/png.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/pps.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/ps.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/tar.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/tgz.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/tif.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/txt.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/xls.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/filetypes/zip.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/font.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/full_range.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/funct.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/hcursor.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/hflip.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/imagestats.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/item_list.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/annotation.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/curve.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/errorbar.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/grid.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/histogram.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/histogram2d.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/image.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/label.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/legend.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/polygonmap.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/items/quiver.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/magnifier.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/cross.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/diamond.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/ellipse.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/hexagon.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/point.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/square.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/star.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/triangle_d.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/triangle_l.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/triangle_r.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/triangle_u.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markers/xcross.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markerstyles/cross_marker.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markerstyles/horiz_marker.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/markerstyles/vert_marker.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_circle.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_circle_outside.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_rectangle.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_rectangle_outside.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_tool.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/max.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/min.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/move.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/multipoint_selection.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/none.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/not_found.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/on_curve.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/bdiagpattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/crosspattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense1pattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense2pattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense3pattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense4pattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense5pattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense6pattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense7pattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/diagcrosspattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/fdiagpattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/horpattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/nobrush.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/solidpattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/patterns/verpattern.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/plotpy-banner.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/plotpy-vertical.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/plotpy.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/point_selection.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/print.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/python.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/quickview.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/refresh.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/save_all.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/scales/lin_lin.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/scales/lin_log.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/scales/log_lin.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/scales/log_log.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/select.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/select_area.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/settings.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shape.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/circle.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/contour.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/ellipse_shape.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/gtaxes.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/marker.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/oblique_rectangle.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/point_shape.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/polygon.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/polyline.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/rectangle.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/segment.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/xrange.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/shapes/yrange.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/snapshot.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/styles/dash.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/styles/dashdot.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/styles/dashdotdot.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/styles/dot.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/styles/solid.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/trash.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/trimage_lock.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/trimage_unlock.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/vcursor.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/vflip.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/xcursor.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/xmax.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/xmin.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/data/icons/zlog.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/events.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/external/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/external/sliders/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/external/sliders/_generic_range_slider.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/external/sliders/_generic_slider.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/external/sliders/_labeled.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/external/sliders/_misc.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/external/sliders/_range_style.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/external/sliders/_sliders.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/interfaces/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/interfaces/items.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/interfaces/panel.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/interfaces/plotmanager.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/io.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/annotation.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/contour.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/curve/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/curve/base.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/curve/errorbar.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/grid.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/histogram.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/image/filter.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/image/masked.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/label.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/polygonmap.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/quiver.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/axis.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/base.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/ellipse.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/marker.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/point.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/polygon.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/range.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/rectangle.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/segment.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/items/shape/svg.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/lutrange.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/mathutils/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/mathutils/arrayfuncs.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/mathutils/colormap.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/mathutils/geometry.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/mathutils/scaler.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/panels/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/panels/base.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/panels/contrastadjustment.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/panels/csection/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/panels/csection/csitem.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/panels/csection/csplot.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/panels/csection/cswidget.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/panels/itemlist.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/plot/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/plot/interactive.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/plot/manager.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/plot/plotwidget.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/pyplot.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/curve.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/errorbar.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/histogram.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/image.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/label.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/polygonmap.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/styles/shape.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/benchmarks/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_benchmarks.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_bigcurves.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_bigimages.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_large_number_of_annotations.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_loadtest.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/conftest.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/data/brain.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/data/brain_cylinder.png +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/data/datetime.txt +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/data/mr-brain.dcm +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/data/svg_target.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/data/svg_tool.svg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/data.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_auto_curve_image.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_autoscale_shapes.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_builder.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_colormap_editor.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_colormap_manager.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_computations.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_contrast.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_cursors.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_data_update_curve.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_data_update_image.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_dicom_image.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_fit.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_fit_locked_params.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_image_coords.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_image_filter.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_image_superp.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_loadsaveitems_hdf5.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_loadsaveitems_json.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_loadsaveitems_pickle.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_manager.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_no_auto_tools.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_plot_log.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_plot_time.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_plot_types.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_plot_yreverse.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_pyplot.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_quiver.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/features/test_resize.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_annotated_range.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_annotations.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_curves.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_curves_highdpi.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_hist2d.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_histogram.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_image.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_image_aspect_ratio.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_image_contour.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_image_masked.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_image_masked_xy.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_image_rgb.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_image_xy.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_mandelbrot.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_pcolor.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_polygons.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_svgshapes.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_to_bins.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/items/test_transform.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_actiontool.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_cross_section.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_cross_section_line.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_cross_section_oblique.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_customize_shape_tool.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_cyclic_import.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_downsample_curve.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_edit_point.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_get_point.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_get_points.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_get_rectangle.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_get_rectangle_with_svg.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_get_segment.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_image_plot_tools.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_stats_tools.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/tools/test_zaxislog.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_annotation_tools.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_arrayfuncs.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_aspect_ratio_tool.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_baseplot.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_builder_annotation.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_builder_curve.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_builder_image.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_builder_shape.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_contour.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_cursor_tools.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_curve_tools.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_datetime_axis.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_display_coords_tool.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_events.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_fontparam.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_geometry.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_io.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_line.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_line_cross_section_tool.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_manipulate_selection.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_mask_tool.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_masked_dtype_change.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_multiline_tools.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_oblique_cross_section_tool.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_plot_curve.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_plot_image.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_rect_zoom.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_seg_dist.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_styles.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/test_tools_export.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/unit/utils.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/vistools.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_dotarraydemo.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_filtertest1.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_filtertest2.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_fliprotate.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_plot_timecurve.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_qtdesigner.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_qtdesigner.ui +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_resize_dialog.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_rotatecrop.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_simple_dialog.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_simple_window.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_syncplot.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tests/widgets/test_theme.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/annotation.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/axes.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/base.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/cross_section.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/cursor.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/item.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/label.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/plot.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/selection.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/tools/shape.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/about.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/basetransform.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/colormap/__init__.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/colormap/_slider.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/colormap/editor.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/colormap/manager.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/colormap/widget.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/fit.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/fliprotate.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/imagefile.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/qtdesigner.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/resizedialog.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/rotatecrop.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy/widgets/selectdialog.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/plotpy-tests.desktop +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/qtdesigner/plotplugin.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/setup.cfg +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/setup.py +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/arrays.hpp +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/debug.hpp +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/histogram2d.pyx +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/mandelbrot.pyx +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/pcolor.cpp +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/points.hpp +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/scaler.cpp +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/scaler.hpp +0 -0
- {plotpy-2.9.0 → plotpy-2.10.0}/src/traits.hpp +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PlotPy
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.10.0
|
|
4
4
|
Summary: Curve and image plotting tools for Python/Qt applications
|
|
5
5
|
Author-email: Codra <p.raybaut@codra.fr>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -63,7 +63,7 @@ Requires-Python: <4,>=3.9
|
|
|
63
63
|
Description-Content-Type: text/markdown
|
|
64
64
|
License-File: LICENSE
|
|
65
65
|
Requires-Dist: guidata>=3.14.1
|
|
66
|
-
Requires-Dist: PythonQwt>=0.
|
|
66
|
+
Requires-Dist: PythonQwt>=0.16
|
|
67
67
|
Requires-Dist: numpy>=1.22
|
|
68
68
|
Requires-Dist: SciPy>=1.7.3
|
|
69
69
|
Requires-Dist: scikit-image>=0.19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PlotPy
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.10.0
|
|
4
4
|
Summary: Curve and image plotting tools for Python/Qt applications
|
|
5
5
|
Author-email: Codra <p.raybaut@codra.fr>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -63,7 +63,7 @@ Requires-Python: <4,>=3.9
|
|
|
63
63
|
Description-Content-Type: text/markdown
|
|
64
64
|
License-File: LICENSE
|
|
65
65
|
Requires-Dist: guidata>=3.14.1
|
|
66
|
-
Requires-Dist: PythonQwt>=0.
|
|
66
|
+
Requires-Dist: PythonQwt>=0.16
|
|
67
67
|
Requires-Dist: numpy>=1.22
|
|
68
68
|
Requires-Dist: SciPy>=1.7.3
|
|
69
69
|
Requires-Dist: scikit-image>=0.19
|
|
@@ -117,6 +117,7 @@ doc/release_notes/release_2.06.md
|
|
|
117
117
|
doc/release_notes/release_2.07.md
|
|
118
118
|
doc/release_notes/release_2.08.md
|
|
119
119
|
doc/release_notes/release_2.09.md
|
|
120
|
+
doc/release_notes/release_2.10.md
|
|
120
121
|
plotpy/__init__.py
|
|
121
122
|
plotpy/config.py
|
|
122
123
|
plotpy/constants.py
|
|
@@ -464,6 +465,7 @@ plotpy/tests/unit/__init__.py
|
|
|
464
465
|
plotpy/tests/unit/test_annotation_tools.py
|
|
465
466
|
plotpy/tests/unit/test_arrayfuncs.py
|
|
466
467
|
plotpy/tests/unit/test_aspect_ratio_tool.py
|
|
468
|
+
plotpy/tests/unit/test_autoscale_strategy.py
|
|
467
469
|
plotpy/tests/unit/test_baseplot.py
|
|
468
470
|
plotpy/tests/unit/test_builder_annotation.py
|
|
469
471
|
plotpy/tests/unit/test_builder_curve.py
|
|
@@ -477,6 +479,7 @@ plotpy/tests/unit/test_display_coords_tool.py
|
|
|
477
479
|
plotpy/tests/unit/test_events.py
|
|
478
480
|
plotpy/tests/unit/test_fontparam.py
|
|
479
481
|
plotpy/tests/unit/test_geometry.py
|
|
482
|
+
plotpy/tests/unit/test_image_log_set_data.py
|
|
480
483
|
plotpy/tests/unit/test_io.py
|
|
481
484
|
plotpy/tests/unit/test_line.py
|
|
482
485
|
plotpy/tests/unit/test_line_cross_section_tool.py
|
|
@@ -489,6 +492,7 @@ plotpy/tests/unit/test_plot_curve.py
|
|
|
489
492
|
plotpy/tests/unit/test_plot_image.py
|
|
490
493
|
plotpy/tests/unit/test_rect_zoom.py
|
|
491
494
|
plotpy/tests/unit/test_seg_dist.py
|
|
495
|
+
plotpy/tests/unit/test_snapshot_original_size.py
|
|
492
496
|
plotpy/tests/unit/test_styles.py
|
|
493
497
|
plotpy/tests/unit/test_tools_export.py
|
|
494
498
|
plotpy/tests/unit/utils.py
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Version 2.10 #
|
|
2
|
+
|
|
3
|
+
## PlotPy Version 2.10.0 ##
|
|
4
|
+
|
|
5
|
+
✨ New features:
|
|
6
|
+
|
|
7
|
+
* **Per-axis autoscale strategy**: Added configurable autoscale behavior for each axis via the axis parameters dialog. Three strategies are available: *Auto* (default — compute bounds from items), *Fixed range* (apply user-defined Min/Max values) and *Disabled* (leave the axis untouched on autoscale). New API: `BasePlot.set_axis_autoscale_strategy()` / `BasePlot.get_axis_autoscale_strategy()` (closes [Issue #63](https://github.com/PlotPyStack/PlotPy/issues/63), partial)
|
|
8
|
+
* **Symbol border width**: Added an `edgewidth` parameter to `SymbolParam` for customizable marker border thickness — previously the border was always 1 pixel wide
|
|
9
|
+
|
|
10
|
+
🛠️ Bug fixes:
|
|
11
|
+
|
|
12
|
+
* **Rectangular snapshot tool** — Fixed the "Original size" computation (closes [Issue #57](https://github.com/PlotPyStack/PlotPy/issues/57)):
|
|
13
|
+
* The preview no longer displays negative dimensions when the X or Y axis is
|
|
14
|
+
reversed
|
|
15
|
+
* The "Original size" is now computed from pixel coordinates instead of axis
|
|
16
|
+
units, so it is correct for `XYImageItem` (and any item with non-uniform
|
|
17
|
+
axis scaling) regardless of axis orientation
|
|
18
|
+
* The `ValueError` raised by the resize dialog when the selection produced
|
|
19
|
+
negative dimensions on a reversed axis is gone
|
|
20
|
+
* Selecting a region larger than the plotted image now reports the same
|
|
21
|
+
native pixel resolution for both `ImageItem` and `XYImageItem`
|
|
22
|
+
(previously `XYImageItem` reported ``shape - 1`` while `ImageItem`
|
|
23
|
+
reported the full oversized resolution): exporting at "Original size"
|
|
24
|
+
now consistently preserves the source pixel density and avoids
|
|
25
|
+
upsampling, regardless of the item type
|
|
26
|
+
* **Snapshot tool cursor** — Fixed the mouse cursor remaining stuck as a cross (`+`) outside the plot canvas (axes, toolbar) after using the snapshot tool. The modal dialogs are now opened after Qt has released the implicit pointer grab, so the cursor is correctly restored (closes [Issue #58](https://github.com/PlotPyStack/PlotPy/issues/58))
|
|
27
|
+
* **Z-axis log tool** — Fixed the `ZAxisLogTool` being always disabled for non-`ImageItem` image types (`XYImageItem`, `MaskedImageItem`, `MaskedXYImageItem`, `TrImageItem`, `RGBImageItem`). The Z-axis log API (`get_zaxis_log_state` / `set_zaxis_log_state`) was moved from `ImageItem` up to `BaseImageItem` so all image item types support it. This notably fixes the tool being permanently greyed out in DataLab's image panel (closes [Issue #59](https://github.com/PlotPyStack/PlotPy/issues/59))
|
|
28
|
+
* **Z-axis log data update** — Fixed image data not being recomputed when calling `set_data()` while Z-axis log scale is active — the log-transformed data is now refreshed and the LUT range preserved in log mode
|
|
29
|
+
* **`YRangeCursorTool`** — Fixed incorrect inequality display and negative ∆y when the Y-range cursors are inverted (dragging the top cursor below the bottom one). Values are now sorted and ∆y is always positive (closes [Issue #55](https://github.com/PlotPyStack/PlotPy/issues/55))
|
|
30
|
+
* **`CurveStatsTool`** — Replaced `min`/`max`/`mean`/`std`/`sum` with their NaN-safe equivalents (`nanmin`, `nanmax`, `nanmean`, `nanstd`, `nansum`) so that signal statistics are computed correctly when the data contains NaN values
|
|
31
|
+
|
|
32
|
+
⚙️ Dependencies:
|
|
33
|
+
|
|
34
|
+
* Bumped minimum PythonQwt version from 0.15 to **0.16** to benefit from the Qt6 performance optimizations (closes [Issue #22](https://github.com/PlotPyStack/PlotPy/issues/22) — see [PythonQwt#93](https://github.com/PlotPyStack/PythonQwt/issues/93) for the full optimization log)
|
|
@@ -14,7 +14,7 @@ The `PlotPy` package requires the following Python modules:
|
|
|
14
14
|
- >= 3.14.1
|
|
15
15
|
- Automatic GUI generation for easy dataset editing and display
|
|
16
16
|
* - PythonQwt
|
|
17
|
-
- >= 0.
|
|
17
|
+
- >= 0.16
|
|
18
18
|
- Qt plotting widgets for Python
|
|
19
19
|
* - numpy
|
|
20
20
|
- >= 1.22
|
|
@@ -26,10 +26,10 @@ The `PlotPy` package requires the following Python modules:
|
|
|
26
26
|
- >= 0.19
|
|
27
27
|
- Image processing in Python
|
|
28
28
|
* - Pillow
|
|
29
|
-
-
|
|
29
|
+
-
|
|
30
30
|
- Python Imaging Library (fork)
|
|
31
31
|
* - tifffile
|
|
32
|
-
-
|
|
32
|
+
-
|
|
33
33
|
- Read and write TIFF files
|
|
34
34
|
|
|
35
35
|
Optional modules for GUI support (Qt):
|
|
@@ -55,26 +55,32 @@ Optional modules for development:
|
|
|
55
55
|
- Version
|
|
56
56
|
- Summary
|
|
57
57
|
* - build
|
|
58
|
-
-
|
|
58
|
+
-
|
|
59
59
|
- A simple, correct Python build frontend
|
|
60
60
|
* - babel
|
|
61
|
-
-
|
|
61
|
+
-
|
|
62
62
|
- Internationalization utilities
|
|
63
63
|
* - Coverage
|
|
64
|
-
-
|
|
64
|
+
-
|
|
65
65
|
- Code coverage measurement for Python
|
|
66
66
|
* - Cython
|
|
67
67
|
- >=3.0
|
|
68
68
|
- The Cython compiler for writing C extensions in the Python language.
|
|
69
69
|
* - pylint
|
|
70
|
-
-
|
|
70
|
+
-
|
|
71
71
|
- python code static checker
|
|
72
72
|
* - ruff
|
|
73
|
-
-
|
|
73
|
+
-
|
|
74
74
|
- An extremely fast Python linter and code formatter, written in Rust.
|
|
75
75
|
* - pre-commit
|
|
76
|
-
-
|
|
76
|
+
-
|
|
77
77
|
- A framework for managing and maintaining multi-language pre-commit hooks.
|
|
78
|
+
* - setuptools
|
|
79
|
+
-
|
|
80
|
+
- Most extensible Python build backend with support for C/C++ extension modules
|
|
81
|
+
* - wheel
|
|
82
|
+
-
|
|
83
|
+
- Command line tool for manipulating wheel files
|
|
78
84
|
|
|
79
85
|
Optional modules for building the documentation:
|
|
80
86
|
|
|
@@ -86,19 +92,19 @@ Optional modules for building the documentation:
|
|
|
86
92
|
- Version
|
|
87
93
|
- Summary
|
|
88
94
|
* - sphinx
|
|
89
|
-
-
|
|
95
|
+
-
|
|
90
96
|
- Python documentation generator
|
|
91
97
|
* - myst_parser
|
|
92
|
-
-
|
|
98
|
+
-
|
|
93
99
|
- An extended [CommonMark](https://spec.commonmark.org/) compliant parser,
|
|
94
100
|
* - sphinx-copybutton
|
|
95
|
-
-
|
|
101
|
+
-
|
|
96
102
|
- Add a copy button to each of your code cells.
|
|
97
103
|
* - sphinx_qt_documentation
|
|
98
|
-
-
|
|
104
|
+
-
|
|
99
105
|
- Plugin for proper resolve intersphinx references for Qt elements
|
|
100
106
|
* - python-docs-theme
|
|
101
|
-
-
|
|
107
|
+
-
|
|
102
108
|
- The Sphinx theme for the CPython docs and related projects
|
|
103
109
|
|
|
104
110
|
Optional modules for running test suite:
|
|
@@ -111,8 +117,8 @@ Optional modules for running test suite:
|
|
|
111
117
|
- Version
|
|
112
118
|
- Summary
|
|
113
119
|
* - pytest
|
|
114
|
-
-
|
|
120
|
+
-
|
|
115
121
|
- pytest: simple powerful testing with Python
|
|
116
122
|
* - pytest-xvfb
|
|
117
|
-
-
|
|
123
|
+
-
|
|
118
124
|
- A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests.
|
|
@@ -20,7 +20,7 @@ External resources:
|
|
|
20
20
|
.. _GitHub: https://github.com/PierreRaybaut/plotpy
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
-
__version__ = "2.
|
|
23
|
+
__version__ = "2.10.0"
|
|
24
24
|
__VERSION__ = tuple([int(number) for number in __version__.split(".")])
|
|
25
25
|
|
|
26
26
|
# --- Important note: DATAPATH and LOCALEPATH are used by guidata.configtools
|
|
@@ -132,6 +132,12 @@ class BaseImageItem(QwtPlotItem):
|
|
|
132
132
|
self._filename = None # The file this image comes from
|
|
133
133
|
|
|
134
134
|
self.histogram_cache = None
|
|
135
|
+
|
|
136
|
+
# Z-axis logarithmic scale support
|
|
137
|
+
self._log_data: np.ndarray | None = None
|
|
138
|
+
self._lin_lut_range: tuple[float, float] | None = None
|
|
139
|
+
self._is_zaxis_log = False
|
|
140
|
+
|
|
135
141
|
if data is not None:
|
|
136
142
|
self.set_data(data)
|
|
137
143
|
self.param.update_item(self)
|
|
@@ -334,6 +340,15 @@ class BaseImageItem(QwtPlotItem):
|
|
|
334
340
|
"""
|
|
335
341
|
return self.get_x_values(i0, i1)
|
|
336
342
|
|
|
343
|
+
def _recompute_log_data(self) -> None:
|
|
344
|
+
"""Refresh the cached log10 data from the current ``self.data``.
|
|
345
|
+
|
|
346
|
+
Used both when toggling the Z-axis log scale on and when the underlying
|
|
347
|
+
data is replaced (e.g. via :meth:`set_data`) while the log scale is
|
|
348
|
+
already active.
|
|
349
|
+
"""
|
|
350
|
+
self._log_data = np.array(np.log10(self.data.clip(1)), dtype=np.float64)
|
|
351
|
+
|
|
337
352
|
def set_data(
|
|
338
353
|
self, data: np.ndarray, lut_range: tuple[float, float] | None = None
|
|
339
354
|
) -> None:
|
|
@@ -347,9 +362,15 @@ class BaseImageItem(QwtPlotItem):
|
|
|
347
362
|
self.histogram_cache = None
|
|
348
363
|
self.update_bounds()
|
|
349
364
|
self.update_border()
|
|
365
|
+
# Refresh the cached log10 data when log scale is active, otherwise the
|
|
366
|
+
# display would keep using the previous (now stale) log data.
|
|
367
|
+
if self.get_zaxis_log_state():
|
|
368
|
+
self._recompute_log_data()
|
|
350
369
|
if not self.param.keep_lut_range:
|
|
351
370
|
if lut_range is not None:
|
|
352
371
|
_min, _max = lut_range
|
|
372
|
+
elif self.get_zaxis_log_state():
|
|
373
|
+
_min, _max = get_nan_range(self._log_data)
|
|
353
374
|
else:
|
|
354
375
|
_min, _max = get_nan_range(data)
|
|
355
376
|
self.set_lut_range((_min, _max))
|
|
@@ -552,6 +573,34 @@ class BaseImageItem(QwtPlotItem):
|
|
|
552
573
|
"""
|
|
553
574
|
return get_nan_range(self.data)
|
|
554
575
|
|
|
576
|
+
# ---- Z-axis logarithmic scale --------------------------------------------
|
|
577
|
+
def get_zaxis_log_state(self) -> bool:
|
|
578
|
+
"""Return True if Z-axis is in logarithmic scale"""
|
|
579
|
+
return self._is_zaxis_log
|
|
580
|
+
|
|
581
|
+
def set_zaxis_log_state(self, state: bool) -> None:
|
|
582
|
+
"""Set Z-axis logarithmic scale state
|
|
583
|
+
|
|
584
|
+
Args:
|
|
585
|
+
state: True to enable logarithmic scale, False otherwise
|
|
586
|
+
"""
|
|
587
|
+
self._is_zaxis_log = state
|
|
588
|
+
plot = self.plot()
|
|
589
|
+
if state:
|
|
590
|
+
self._lin_lut_range = self.get_lut_range()
|
|
591
|
+
if self._log_data is None:
|
|
592
|
+
self._recompute_log_data()
|
|
593
|
+
self.set_lut_range(get_nan_range(self._log_data))
|
|
594
|
+
dtype = self._log_data.dtype
|
|
595
|
+
else:
|
|
596
|
+
self._log_data = None
|
|
597
|
+
self.set_lut_range(self._lin_lut_range)
|
|
598
|
+
dtype = self.data.dtype
|
|
599
|
+
if self.interpolate[0] == INTERP_AA:
|
|
600
|
+
self.interpolate = (INTERP_AA, self.interpolate[1].astype(dtype))
|
|
601
|
+
if plot is not None:
|
|
602
|
+
plot.update_colormap_axis(self)
|
|
603
|
+
|
|
555
604
|
def get_lut_range_max(self) -> tuple[float, float]:
|
|
556
605
|
"""Get maximum range for this dataset
|
|
557
606
|
|
|
@@ -577,19 +577,27 @@ def get_items_in_rectangle(
|
|
|
577
577
|
|
|
578
578
|
def compute_trimageitems_original_size(
|
|
579
579
|
items: list[TrImageItem],
|
|
580
|
-
src_w:
|
|
581
|
-
src_h:
|
|
580
|
+
src_w: float,
|
|
581
|
+
src_h: float,
|
|
582
582
|
) -> tuple[float, float]:
|
|
583
583
|
"""Compute `TrImageItem` original size from max dx and dy
|
|
584
584
|
|
|
585
585
|
Args:
|
|
586
586
|
items: List of image items
|
|
587
|
-
src_w: Source width
|
|
588
|
-
src_h: Source height
|
|
587
|
+
src_w: Source width (in plot axis units)
|
|
588
|
+
src_h: Source height (in plot axis units)
|
|
589
589
|
|
|
590
590
|
Returns:
|
|
591
591
|
Tuple of original size
|
|
592
|
+
|
|
593
|
+
.. note::
|
|
594
|
+
|
|
595
|
+
The returned size is always positive: when the source rectangle is
|
|
596
|
+
defined on a reversed axis, ``src_w`` and/or ``src_h`` may be
|
|
597
|
+
negative. The original (pixel) size is intrinsically positive,
|
|
598
|
+
independent of axis orientation.
|
|
592
599
|
"""
|
|
600
|
+
src_w, src_h = abs(src_w), abs(src_h)
|
|
593
601
|
trparams = [item.get_transform() for item in items if isinstance(item, TrImageItem)]
|
|
594
602
|
if trparams:
|
|
595
603
|
dx_max = max([dx for _x, _y, _angle, dx, _dy, _hf, _vf in trparams])
|
|
@@ -598,6 +606,81 @@ def compute_trimageitems_original_size(
|
|
|
598
606
|
return src_w, src_h
|
|
599
607
|
|
|
600
608
|
|
|
609
|
+
def compute_image_items_original_size(
|
|
610
|
+
items: list[BaseImageItem],
|
|
611
|
+
plot: qwt.plot.QwtPlot,
|
|
612
|
+
p0: QPointF,
|
|
613
|
+
p1: QPointF,
|
|
614
|
+
) -> tuple[float, float]:
|
|
615
|
+
"""Compute the **native pixel resolution** of a rectangular selection
|
|
616
|
+
across the given image items.
|
|
617
|
+
|
|
618
|
+
The "Original size" semantics is *original resolution*: the returned
|
|
619
|
+
size is the number of source pixels that span the selection at the
|
|
620
|
+
item's native resolution, *independent of axis orientation or scaling*.
|
|
621
|
+
When the selection is larger than the plotted image, the returned size
|
|
622
|
+
is consequently larger than the image (the missing area will be padded
|
|
623
|
+
by the export step). When the selection is smaller, it is smaller in
|
|
624
|
+
pixels — there is **no** clipping to the image bounding rectangle, so
|
|
625
|
+
that exporting at "Original size" always preserves the source pixel
|
|
626
|
+
density.
|
|
627
|
+
|
|
628
|
+
Args:
|
|
629
|
+
plot: Plot
|
|
630
|
+
items: List of image items in the selection
|
|
631
|
+
p0: First canvas point (top-left, in canvas coordinates)
|
|
632
|
+
p1: Second canvas point (bottom-right, in canvas coordinates)
|
|
633
|
+
|
|
634
|
+
Returns:
|
|
635
|
+
Tuple ``(width, height)`` in pixels (always positive). When no
|
|
636
|
+
compatible item is found, falls back to the absolute axis-units
|
|
637
|
+
size of the selection.
|
|
638
|
+
"""
|
|
639
|
+
p0x = plot.invTransform(X_BOTTOM, p0.x())
|
|
640
|
+
p0y = plot.invTransform(Y_LEFT, p0.y())
|
|
641
|
+
p1x = plot.invTransform(X_BOTTOM, p1.x() + 1)
|
|
642
|
+
p1y = plot.invTransform(Y_LEFT, p1.y() + 1)
|
|
643
|
+
sel_x0, sel_x1 = sorted([p0x, p1x])
|
|
644
|
+
sel_y0, sel_y1 = sorted([p0y, p1y])
|
|
645
|
+
sel_w = sel_x1 - sel_x0
|
|
646
|
+
sel_h = sel_y1 - sel_y0
|
|
647
|
+
widths: list[float] = []
|
|
648
|
+
heights: list[float] = []
|
|
649
|
+
for item in items:
|
|
650
|
+
data = getattr(item, "data", None)
|
|
651
|
+
if data is None:
|
|
652
|
+
continue
|
|
653
|
+
if isinstance(item, TrImageItem):
|
|
654
|
+
# Use the item's affine transform (handles rotation and shear)
|
|
655
|
+
get_pix = item.get_pixel_coordinates
|
|
656
|
+
try:
|
|
657
|
+
x0p, y0p = get_pix(sel_x0, sel_y0)
|
|
658
|
+
x1p, y1p = get_pix(sel_x1, sel_y1)
|
|
659
|
+
except (ValueError, TypeError, IndexError):
|
|
660
|
+
continue
|
|
661
|
+
widths.append(abs(x1p - x0p))
|
|
662
|
+
heights.append(abs(y1p - y0p))
|
|
663
|
+
else:
|
|
664
|
+
# For ImageItem / XYImageItem: convert the (possibly oversized)
|
|
665
|
+
# selection to pixels via the item's own pixel density. This
|
|
666
|
+
# avoids ``XYImageItem.get_pixel_coordinates`` clamping to
|
|
667
|
+
# integer indices and yields oversized values when the
|
|
668
|
+
# selection extends beyond the image — consistently with the
|
|
669
|
+
# historical behavior of ``ImageItem``.
|
|
670
|
+
brect = item.boundingRect()
|
|
671
|
+
bw = abs(brect.width())
|
|
672
|
+
bh = abs(brect.height())
|
|
673
|
+
if bw <= 0 or bh <= 0:
|
|
674
|
+
continue
|
|
675
|
+
widths.append(sel_w / bw * data.shape[1])
|
|
676
|
+
heights.append(sel_h / bh * data.shape[0])
|
|
677
|
+
if widths:
|
|
678
|
+
return max(widths), max(heights)
|
|
679
|
+
# Fallback: axis-units size (always positive)
|
|
680
|
+
_src_x, _src_y, src_w, src_h = get_plot_qrect(plot, p0, p1).getRect()
|
|
681
|
+
return abs(src_w), abs(src_h)
|
|
682
|
+
|
|
683
|
+
|
|
601
684
|
def get_image_from_qrect(
|
|
602
685
|
plot: BasePlot,
|
|
603
686
|
p0: QPointF,
|
|
@@ -636,12 +719,12 @@ def get_image_from_qrect(
|
|
|
636
719
|
if not items:
|
|
637
720
|
raise TypeError(_("There is no supported image item in current plot."))
|
|
638
721
|
if src_size is None:
|
|
639
|
-
|
|
722
|
+
destw, desth = compute_image_items_original_size(items, plot, p0, p1)
|
|
640
723
|
else:
|
|
641
724
|
# The only benefit to pass the src_size list is to avoid any
|
|
642
725
|
# rounding error in the transformation computed in `get_plot_qrect`
|
|
643
726
|
src_w, src_h = src_size
|
|
644
|
-
|
|
727
|
+
destw, desth = compute_trimageitems_original_size(items, src_w, src_h)
|
|
645
728
|
data = get_image_from_plot(
|
|
646
729
|
plot,
|
|
647
730
|
p0,
|
|
@@ -11,7 +11,6 @@ from guidata.utils.misc import assert_interfaces_valid
|
|
|
11
11
|
from qtpy import QtCore as QC
|
|
12
12
|
|
|
13
13
|
from plotpy import io
|
|
14
|
-
from plotpy._scaler import INTERP_AA
|
|
15
14
|
from plotpy.config import _
|
|
16
15
|
from plotpy.constants import LUTAlpha
|
|
17
16
|
from plotpy.coords import canvas_to_axes, pixelround
|
|
@@ -29,7 +28,6 @@ from plotpy.interfaces import (
|
|
|
29
28
|
)
|
|
30
29
|
from plotpy.items.image.base import RawImageItem
|
|
31
30
|
from plotpy.items.image.filter import XYImageFilterItem, to_bins
|
|
32
|
-
from plotpy.mathutils.arrayfuncs import get_nan_range
|
|
33
31
|
from plotpy.styles.image import ImageParam, RGBImageParam, XYImageParam
|
|
34
32
|
|
|
35
33
|
if TYPE_CHECKING:
|
|
@@ -84,9 +82,6 @@ class ImageItem(RawImageItem):
|
|
|
84
82
|
self.xmax = None
|
|
85
83
|
self.ymin = None
|
|
86
84
|
self.ymax = None
|
|
87
|
-
self._log_data = None
|
|
88
|
-
self._lin_lut_range = None
|
|
89
|
-
self._is_zaxis_log = False
|
|
90
85
|
super().__init__(data=data, param=param)
|
|
91
86
|
|
|
92
87
|
# ---- BaseImageItem API ---------------------------------------------------
|
|
@@ -228,28 +223,6 @@ class ImageItem(RawImageItem):
|
|
|
228
223
|
(xmin, xmax), (ymin, ymax) = self.get_xdata(), self.get_ydata()
|
|
229
224
|
self.bounds = QC.QRectF(QC.QPointF(xmin, ymin), QC.QPointF(xmax, ymax))
|
|
230
225
|
|
|
231
|
-
def get_zaxis_log_state(self):
|
|
232
|
-
"""Reimplement image.ImageItem method"""
|
|
233
|
-
return self._is_zaxis_log
|
|
234
|
-
|
|
235
|
-
def set_zaxis_log_state(self, state):
|
|
236
|
-
"""Reimplement image.ImageItem method"""
|
|
237
|
-
self._is_zaxis_log = state
|
|
238
|
-
plot = self.plot()
|
|
239
|
-
if state:
|
|
240
|
-
self._lin_lut_range = self.get_lut_range()
|
|
241
|
-
if self._log_data is None:
|
|
242
|
-
self._log_data = np.array(np.log10(self.data.clip(1)), dtype=np.float64)
|
|
243
|
-
self.set_lut_range(get_nan_range(self._log_data))
|
|
244
|
-
dtype = self._log_data.dtype
|
|
245
|
-
else:
|
|
246
|
-
self._log_data = None
|
|
247
|
-
self.set_lut_range(self._lin_lut_range)
|
|
248
|
-
dtype = self.data.dtype
|
|
249
|
-
if self.interpolate[0] == INTERP_AA:
|
|
250
|
-
self.interpolate = (INTERP_AA, self.interpolate[1].astype(dtype))
|
|
251
|
-
plot.update_colormap_axis(self)
|
|
252
|
-
|
|
253
226
|
# ---- BaseImageItem API ---------------------------------------------------
|
|
254
227
|
def get_pixel_coordinates(self, xplot: float, yplot: float) -> tuple[float, float]:
|
|
255
228
|
"""Get pixel coordinates from plot coordinates
|
|
@@ -684,8 +657,12 @@ class XYImageItem(RawImageItem):
|
|
|
684
657
|
return
|
|
685
658
|
xytr = self.x, self.y, src_rect
|
|
686
659
|
dst_rect = tuple([int(i) for i in dst_rect])
|
|
660
|
+
if self.get_zaxis_log_state():
|
|
661
|
+
data = self._log_data
|
|
662
|
+
else:
|
|
663
|
+
data = self.data
|
|
687
664
|
dest = _scale_xy(
|
|
688
|
-
|
|
665
|
+
data, xytr, self._offscreen, dst_rect, self.lut, self.interpolate
|
|
689
666
|
)
|
|
690
667
|
qrect = QC.QRectF(QC.QPointF(dest[0], dest[1]), QC.QPointF(dest[2], dest[3]))
|
|
691
668
|
painter.drawImage(qrect, self._image, qrect)
|
|
@@ -274,8 +274,12 @@ class TrImageItem(RawImageItem):
|
|
|
274
274
|
mat = self.tr @ tr
|
|
275
275
|
|
|
276
276
|
dst_rect = tuple([int(i) for i in dst_rect])
|
|
277
|
+
if self.get_zaxis_log_state():
|
|
278
|
+
data = self._log_data
|
|
279
|
+
else:
|
|
280
|
+
data = self.data
|
|
277
281
|
dest = _scale_tr(
|
|
278
|
-
|
|
282
|
+
data, mat, self._offscreen, dst_rect, self.lut, self.interpolate
|
|
279
283
|
)
|
|
280
284
|
qrect = QC.QRectF(QC.QPointF(dest[0], dest[1]), QC.QPointF(dest[2], dest[3]))
|
|
281
285
|
painter.drawImage(qrect, self._image, qrect)
|
|
Binary file
|
|
@@ -325,6 +325,9 @@ class BasePlot(qwt.QwtPlot):
|
|
|
325
325
|
|
|
326
326
|
self.__autoscale_excluded_items: list[itf.IBasePlotItem] = []
|
|
327
327
|
self.autoscale_margin_percent = options.autoscale_margin_percent
|
|
328
|
+
self._axis_autoscale_strategy: dict[
|
|
329
|
+
int, tuple[str, float | None, float | None]
|
|
330
|
+
] = {axis_id: ("auto", None, None) for axis_id in self.AXIS_IDS}
|
|
328
331
|
self.lock_aspect_ratio = options.lock_aspect_ratio
|
|
329
332
|
self.__autoLockAspectRatio = False
|
|
330
333
|
if self.lock_aspect_ratio is None:
|
|
@@ -2177,9 +2180,54 @@ class BasePlot(qwt.QwtPlot):
|
|
|
2177
2180
|
]
|
|
2178
2181
|
return [item_ref() for item_ref in self.__autoscale_excluded_items]
|
|
2179
2182
|
|
|
2183
|
+
def get_axis_autoscale_strategy(
|
|
2184
|
+
self, axis_id: int
|
|
2185
|
+
) -> tuple[str, float | None, float | None]:
|
|
2186
|
+
"""Return the autoscale strategy configured for a given axis.
|
|
2187
|
+
|
|
2188
|
+
Args:
|
|
2189
|
+
axis_id: the axis ID
|
|
2190
|
+
|
|
2191
|
+
Returns:
|
|
2192
|
+
A 3-tuple ``(strategy, vmin, vmax)`` where ``strategy`` is one of
|
|
2193
|
+
``"auto"``, ``"fixed"`` or ``"none"``. ``vmin``/``vmax`` are the
|
|
2194
|
+
user-defined bounds applied when ``strategy == "fixed"``
|
|
2195
|
+
(``None`` otherwise).
|
|
2196
|
+
"""
|
|
2197
|
+
return self._axis_autoscale_strategy.get(axis_id, ("auto", None, None))
|
|
2198
|
+
|
|
2199
|
+
def set_axis_autoscale_strategy(
|
|
2200
|
+
self,
|
|
2201
|
+
axis_id: int,
|
|
2202
|
+
strategy: str,
|
|
2203
|
+
vmin: float | None = None,
|
|
2204
|
+
vmax: float | None = None,
|
|
2205
|
+
) -> None:
|
|
2206
|
+
"""Set the autoscale strategy for a given axis.
|
|
2207
|
+
|
|
2208
|
+
Args:
|
|
2209
|
+
axis_id: the axis ID
|
|
2210
|
+
strategy: one of ``"auto"`` (compute bounds from items, current
|
|
2211
|
+
behavior), ``"fixed"`` (apply ``vmin``/``vmax``) or ``"none"``
|
|
2212
|
+
(leave the axis untouched on autoscale)
|
|
2213
|
+
vmin: lower bound applied when ``strategy == "fixed"``
|
|
2214
|
+
vmax: upper bound applied when ``strategy == "fixed"``
|
|
2215
|
+
"""
|
|
2216
|
+
if strategy not in ("auto", "fixed", "none"):
|
|
2217
|
+
raise ValueError(
|
|
2218
|
+
f"Invalid autoscale strategy {strategy!r}: "
|
|
2219
|
+
"expected one of 'auto', 'fixed', 'none'"
|
|
2220
|
+
)
|
|
2221
|
+
self._axis_autoscale_strategy[axis_id] = (strategy, vmin, vmax)
|
|
2222
|
+
|
|
2180
2223
|
def do_autoscale(self, replot: bool = True, axis_id: int | None = None) -> None:
|
|
2181
2224
|
"""Do autoscale on all axes
|
|
2182
2225
|
|
|
2226
|
+
The behavior of each axis depends on its autoscale strategy
|
|
2227
|
+
(see :py:meth:`set_axis_autoscale_strategy`): ``"auto"`` computes
|
|
2228
|
+
bounds from items (default), ``"fixed"`` applies the configured
|
|
2229
|
+
``vmin``/``vmax`` and ``"none"`` leaves the axis untouched.
|
|
2230
|
+
|
|
2183
2231
|
Args:
|
|
2184
2232
|
replot (bool): replot the widget (optional, default=True)
|
|
2185
2233
|
axis_id (int | None): the axis ID (optional, default=None)
|
|
@@ -2191,6 +2239,14 @@ class BasePlot(qwt.QwtPlot):
|
|
|
2191
2239
|
vmin, vmax = None, None
|
|
2192
2240
|
if not self.axisEnabled(axis_id):
|
|
2193
2241
|
continue
|
|
2242
|
+
strategy, fixed_vmin, fixed_vmax = self.get_axis_autoscale_strategy(axis_id)
|
|
2243
|
+
if strategy == "none":
|
|
2244
|
+
continue
|
|
2245
|
+
if strategy == "fixed":
|
|
2246
|
+
if fixed_vmin is None or fixed_vmax is None:
|
|
2247
|
+
continue
|
|
2248
|
+
self.set_axis_limits(axis_id, fixed_vmin, fixed_vmax)
|
|
2249
|
+
continue
|
|
2194
2250
|
for item in self.get_items():
|
|
2195
2251
|
if (
|
|
2196
2252
|
isinstance(item, self.AUTOSCALE_TYPES)
|
|
@@ -47,6 +47,20 @@ class AxisParam(DataSet):
|
|
|
47
47
|
[("lin", _("linear")), ("log", _("logarithmic")), ("datetime", _("date/time"))],
|
|
48
48
|
default="lin",
|
|
49
49
|
)
|
|
50
|
+
autoscale = ChoiceItem(
|
|
51
|
+
_("Autoscale strategy"),
|
|
52
|
+
[
|
|
53
|
+
("auto", _("Auto")),
|
|
54
|
+
("fixed", _("Fixed range")),
|
|
55
|
+
("none", _("Disabled")),
|
|
56
|
+
],
|
|
57
|
+
default="auto",
|
|
58
|
+
help=_(
|
|
59
|
+
"Strategy used by the AutoScale action for this axis: "
|
|
60
|
+
"'Auto' computes bounds from items, 'Fixed range' applies the "
|
|
61
|
+
"Min/Max values defined above, 'Disabled' leaves the axis untouched."
|
|
62
|
+
),
|
|
63
|
+
)
|
|
50
64
|
vmin = FloatItem("Min", help=_("Lower axis limit"), default=0.0)
|
|
51
65
|
vmax = FloatItem("Max", help=_("Upper axis limit"), default=1.0)
|
|
52
66
|
|
|
@@ -62,6 +76,13 @@ class AxisParam(DataSet):
|
|
|
62
76
|
axis: QwtScaleDiv = plot.axisScaleDiv(axis_id)
|
|
63
77
|
self.vmin = axis.lowerBound()
|
|
64
78
|
self.vmax = axis.upperBound()
|
|
79
|
+
strategy, fixed_vmin, fixed_vmax = plot.get_axis_autoscale_strategy(axis_id)
|
|
80
|
+
self.autoscale = strategy
|
|
81
|
+
if strategy == "fixed":
|
|
82
|
+
if fixed_vmin is not None:
|
|
83
|
+
self.vmin = fixed_vmin
|
|
84
|
+
if fixed_vmax is not None:
|
|
85
|
+
self.vmax = fixed_vmax
|
|
65
86
|
|
|
66
87
|
def update_axis(self, plot: BasePlot, axis_id: int) -> None:
|
|
67
88
|
"""
|
|
@@ -74,6 +95,9 @@ class AxisParam(DataSet):
|
|
|
74
95
|
plot.enableAxis(axis_id, True)
|
|
75
96
|
plot.set_axis_scale(axis_id, self.scale, autoscale=False)
|
|
76
97
|
plot.setAxisScale(axis_id, self.vmin, self.vmax)
|
|
98
|
+
plot.set_axis_autoscale_strategy(
|
|
99
|
+
axis_id, self.autoscale, vmin=self.vmin, vmax=self.vmax
|
|
100
|
+
)
|
|
77
101
|
plot.disable_unused_axes()
|
|
78
102
|
plot.SIG_AXIS_PARAMETERS_CHANGED.emit(axis_id)
|
|
79
103
|
|