Skip to content

Releases: PlotPyStack/PlotPy

v2.4.2

16 Jul 10:01
Compare
Choose a tag to compare

Version 2.4.2

In this release, test coverage is 79%.

🛠️ Bug fixes:

  • Issue #17:
    • Debian's Python team has reported that the contour unit test was failing on arm64
      architecture
    • This is the opportunity to replace the contour2d Cython extension by scikit-image's
      find_contours function, thus avoiding to reinvent the wheel by relying on a more
      robust and tested implementation
    • The contour2d Cython extension is removed from the source code
    • The contour related features remain the same, but the implementation is now based on
      scikit-image's find_contours function
    • The scikit-image dependency is added to the package requirements

v2.4.1

09 Jul 07:33
Compare
Choose a tag to compare

Version 2.4.1

In this release, test coverage is 79%.

🛠️ Bug fixes:

  • Contrast adjustment panel:
    • A regression was introduced in V2.0.0: levels histogram was no longer removed from
      contrast adjustment panel when the associated image was removed from the plot
    • This is now fixed: when an image is removed, the histogram is removed as well and
      the contrast panel is refreshed (which was not the case even before the regression)

Version 2.4.0

In this release, test coverage is 79%.

💥 New features / Enhancements:

  • Contrast adjustment panel:
    • New layout: the vertical toolbar (which was constrained in a small area on the
      right side of the panel) is now a horizontal toolbar at the top of the panel,
      beside the title
    • New "Set range" button: allows the user to set manually the minimum and maximum
      values of the histogram range
  • New Z-axis logarithmic scale feature:
    • Added new tool ZAxisLogTool to toggle the Z-axis logarithmic scale
    • The tool is registered by default in the plot widget, like the ColormapTool
    • When enabled, the active image item is displayed after applying a base-10
      logarithm to its pixel values
  • Curve statistics tool CurveStatsTool is now customizable:
    • When adding the tool: plot_widget.manager.add_tool(CurveStatsTool, labelfuncs=(...))
    • Or after: plot_widget.manager.get_tool(CurveStatsTool).set_labelfuncs(...)
    • The labelfuncs parameter is a list of tuples (label, func) where label is the
      label displayed in the statistics table, and func is a function that takes the
      curve data and returns the corresponding statistic value (see the documentation for
      more details)
  • Image statistics tool ImageStatsTool is now customizable:
    • When adding the tool: plot_widget.manager.add_tool(ImageStatsTool, stats_func=...)
    • Or after: plot_widget.manager.get_tool(ImageStatsTool).set_stats_func(...)
    • The stats_func parameter is a function that takes the image item and selected
      rectangle coordinates, and returns a string with the statistics to display
  • New SIG_AXIS_PARAMETERS_CHANGED signal emitted by BasePlot when the axes parameters
    are changed (e.g. when the axes are inverted, or the scale is changed)
  • New "Reverse X axis" feature:
    • Added new tool ReverseXAxisTool to toggle the X-axis direction
    • The tool is registered by default in the plot widget, like its Y-axis counterpart

🛠️ Bug fixes:

  • Contrast adjustment panel:
    • Fixed histogram update issues when no image was currently selected (even if the
      an image was displayed and was selected before)
    • Histogram range was not updated when either the minimum or maximum value was set
      using the "Minimum value" or "Maximum value" buttons (which have been renamed to
      "Min." and "Max." in this release)
    • Histogram range was not updated when the "Set full range" button was clicked
  • Image parameters: contrast range was not updated when the image Z axis bounds were
    changed using the "Parameters" dialog

🧹 API cleanup:

  • Deprecated AnnotationParam.update_annotation method: use update_item instead
  • Deprecated AxesShapeParam.update_axes method: use update_item instead
  • Deprecated AxesParam.update_axes method: use update_item instead
  • Deprecated ImageAxesParam.update_axes method: use update_item instead
  • Deprecated LabelParam.update_label method: use update_item instead
  • Deprecated MarkerParam.update_marker method: use update_item instead
  • Deprecated RangeShapeParam.update_range method: use update_item instead
  • Deprecated ShapeParam.update_shape method: use update_item instead

v2.4.0

26 Jun 15:23
Compare
Choose a tag to compare

Version 2.4.0

In this release, test coverage is 79%.

💥 New features / Enhancements:

  • Contrast adjustment panel:
    • New layout: the vertical toolbar (which was constrained in a small area on the
      right side of the panel) is now a horizontal toolbar at the top of the panel,
      beside the title
    • New "Set range" button: allows the user to set manually the minimum and maximum
      values of the histogram range
  • New Z-axis logarithmic scale feature:
    • Added new tool ZAxisLogTool to toggle the Z-axis logarithmic scale
    • The tool is registered by default in the plot widget, like the ColormapTool
    • When enabled, the active image item is displayed after applying a base-10
      logarithm to its pixel values
  • Curve statistics tool CurveStatsTool is now customizable:
    • When adding the tool: plot_widget.manager.add_tool(CurveStatsTool, labelfuncs=(...))
    • Or after: plot_widget.manager.get_tool(CurveStatsTool).set_labelfuncs(...)
    • The labelfuncs parameter is a list of tuples (label, func) where label is the
      label displayed in the statistics table, and func is a function that takes the
      curve data and returns the corresponding statistic value (see the documentation for
      more details)
  • Image statistics tool ImageStatsTool is now customizable:
    • When adding the tool: plot_widget.manager.add_tool(ImageStatsTool, stats_func=...)
    • Or after: plot_widget.manager.get_tool(ImageStatsTool).set_stats_func(...)
    • The stats_func parameter is a function that takes the image item and selected
      rectangle coordinates, and returns a string with the statistics to display
  • New SIG_AXIS_PARAMETERS_CHANGED signal emitted by BasePlot when the axes parameters
    are changed (e.g. when the axes are inverted, or the scale is changed)
  • New "Reverse X axis" feature:
    • Added new tool ReverseXAxisTool to toggle the X-axis direction
    • The tool is registered by default in the plot widget, like its Y-axis counterpart

🛠️ Bug fixes:

  • Contrast adjustment panel:
    • Fixed histogram update issues when no image was currently selected (even if the
      an image was displayed and was selected before)
    • Histogram range was not updated when either the minimum or maximum value was set
      using the "Minimum value" or "Maximum value" buttons (which have been renamed to
      "Min." and "Max." in this release)
    • Histogram range was not updated when the "Set full range" button was clicked
  • Image parameters: contrast range was not updated when the image Z axis bounds were
    changed using the "Parameters" dialog

🧹 API cleanup:

  • Deprecated AnnotationParam.update_annotation method: use update_item instead
  • Deprecated AxesShapeParam.update_axes method: use update_item instead
  • Deprecated AxesParam.update_axes method: use update_item instead
  • Deprecated ImageAxesParam.update_axes method: use update_item instead
  • Deprecated LabelParam.update_label method: use update_item instead
  • Deprecated MarkerParam.update_marker method: use update_item instead
  • Deprecated RangeShapeParam.update_range method: use update_item instead
  • Deprecated ShapeParam.update_shape method: use update_item instead

v2.3.5

21 Jun 10:11
Compare
Choose a tag to compare

Version 2.3.5

This release is mainly intended to fix the Windows binary distribution, which was not
supporting NumPy 2.0.

🛠️ Bug fixes:

  • Moved back conftest.py to the tests folder (was in the root folder), so that
    pytest can be executed with proper configuration when running the test suite
    from the installed package

  • Removed benchmarks from automated test suite (not relevant for the end user):
    added plotpy-benchmarks script to run the benchmarks

v2.3.4

20 Jun 16:42
Compare
Choose a tag to compare

Version 2.3.4

In this release, test coverage is 79%.

🛠️ Bug fixes:

  • Add support for NumPy 2.0:

    • Updated build system to use NumPy 2.0 on Python > 3.8 and NumPy 1 on Python 3.8
    • Use numpy.asarray instead of numpy.array(..., copy=False)
    • Use numpy.isin instead of numpy.in1d
    • Use scipy.integrate.trapezoid instead of numpy.trapz
  • ColorMapManager: fix segmentation fault with PySide6 on Linux

v2.3.3

13 Jun 11:40
Compare
Choose a tag to compare

Version 2.3.3

In this release, test coverage is 79%.

🛠️ Bug fixes:

  • Moved up LineCrossSection import for consistency with other cross-section panels
  • Unexpected behavior regarding io.load_items and io.save_items functions:
    • Those functions were serializing and deserializing most of the parameters of the
      plot items, but not their visibility state
    • This is now fixed: the visibility state of the plot items is now saved and restored
      as expected

ℹ️ Other changes:

  • Explicitely exclude NumPy V2 from the dependencies (not compatible yet)

v2.3.2

07 May 08:21
Compare
Choose a tag to compare

Version 2.3.2

In this release, test coverage is 79%.

Version 2.3.2 fixes a blocking issue with the colormap editor unit test introduced
in version 2.3.1. The latter is a fugitive release that was not announced.

💥 New features / Enhancements:

  • Colormap: added "Apply" button to the colormap manager
  • Automated test suite:
    • Test coverage has been improved from 75% to 79%
    • The following features are now covered by unit tests:
      • Panning with the mouse move events
      • Zooming with the mouse wheel/move events
      • Curve statistics tool
      • Image rotation and translations via SelectTool (simulating mouse events)
      • Masked areas in images and ImageMaskTool
      • LockTrImageTool
      • Cursor tools (HCursorTool, VCursorTool, XCursorTool and HRangeTool)
      • DisplayCoordsTool: simulation of 'Alt' and 'Ctrl' keys
      • Complete coverage for MultiLineTool and FreeFormTool
      • Selection tools (RectangularSelectionTool and SelectTool)

🛠️ Bug fixes:

  • Image statistics tool: fixed "No available data" message when the tool rectangular
    region top Y coordinate is above the image top Y coordinate
  • Label items (LabelItem, LegendBoxItem, DataInfoLabel, ...) were not emitting
    the SIG_ITEM_MOVED signal when moved interactively (with the mouse) if the item
    anchor was attached to the canvas
  • Colormap: fixed context menu entry update (colormap icon was updated as expected, but
    the colormap name was not)
  • Rotate/crop dialog: added missing toolbar on plot widget
  • Flip/rotate dialog: added missing toolbar on plot widget
  • Fixed issue with oblique averaged cross section computation (AttributeError when
    clicking on the empty cross section plot)

Version 2.3.0

In this release, test coverage is 75%.

💥 New features:

  • Added support for colormap inversion:
    • The user can now invert the colormap of an image item:
      • From the image parameters dialog ("Invert colormap" checkbox)
      • From the plot context menu (right-click on the image item)
    • BaseImageItem.set_color_map method takes a new invert parameter (which
      defaults to None, meaning that the behavior is unchanged)
    • New ReverseColormapTool: registered by default in the plot widget, like the
      ColormapTool (add the "Invert colormap" entry in the context menu of the image)

🛠️ Bug fixes:

  • ErrorBarCurveItem: fixed NumPy deprecation warning
    ("Conversion of an array with ndim > 0 to a scalar is deprecated [...]")

ℹ️ Other changes:

  • Image plot items deserialization:
    • When an image plot item is deserialized, and needs to be reloaded from a file,
      the file path is adapted to the current working directory if file is not found
      (this is the legacy behavior).
    • An unnecessary call to ImageIOHandler.adapt_path method was removed from the
      RawImageItem.deserialize method: this issue has to be handled by the host
      application, not by the PlotPy library.
    • ImageIOHandler: removed add_change_path and adapt_path methods
  • Fix typo in tests.features.test_colormap_editor module: renamed function
    test_colormap_manager to test_colormap_editor
  • Removed unnecessary BaseImageItem.get_color_map_name method

v2.3.1

06 May 16:49
Compare
Choose a tag to compare

Version 2.3.1

In this release, test coverage is 79%.

💥 New features / Enhancements:

  • Colormap: added "Apply" button to the colormap manager
  • Automated test suite:
    • Test coverage has been improved from 75% to 79%
    • The following features are now covered by unit tests:
      • Panning with the mouse move events
      • Zooming with the mouse wheel/move events
      • Curve statistics tool
      • Image rotation and translations via SelectTool (simulating mouse events)
      • Masked areas in images and ImageMaskTool
      • LockTrImageTool
      • Cursor tools (HCursorTool, VCursorTool, XCursorTool and HRangeTool)
      • DisplayCoordsTool: simulation of 'Alt' and 'Ctrl' keys
      • Complete coverage for MultiLineTool and FreeFormTool
      • Selection tools (RectangularSelectionTool and SelectTool)

🛠️ Bug fixes:

  • Image statistics tool: fixed "No available data" message when the tool rectangular
    region top Y coordinate is above the image top Y coordinate
  • Label items (LabelItem, LegendBoxItem, DataInfoLabel, ...) were not emitting
    the SIG_ITEM_MOVED signal when moved interactively (with the mouse) if the item
    anchor was attached to the canvas
  • Colormap: fixed context menu entry update (colormap icon was updated as expected, but
    the colormap name was not)
  • Rotate/crop dialog: added missing toolbar on plot widget
  • Flip/rotate dialog: added missing toolbar on plot widget
  • Fixed issue with oblique averaged cross section computation (AttributeError when
    clicking on the empty cross section plot)

Version 2.3.0

In this release, test coverage is 75%.

💥 New features:

  • Added support for colormap inversion:
    • The user can now invert the colormap of an image item:
      • From the image parameters dialog ("Invert colormap" checkbox)
      • From the plot context menu (right-click on the image item)
    • BaseImageItem.set_color_map method takes a new invert parameter (which
      defaults to None, meaning that the behavior is unchanged)
    • New ReverseColormapTool: registered by default in the plot widget, like the
      ColormapTool (add the "Invert colormap" entry in the context menu of the image)

🛠️ Bug fixes:

  • ErrorBarCurveItem: fixed NumPy deprecation warning
    ("Conversion of an array with ndim > 0 to a scalar is deprecated [...]")

ℹ️ Other changes:

  • Image plot items deserialization:
    • When an image plot item is deserialized, and needs to be reloaded from a file,
      the file path is adapted to the current working directory if file is not found
      (this is the legacy behavior).
    • An unnecessary call to ImageIOHandler.adapt_path method was removed from the
      RawImageItem.deserialize method: this issue has to be handled by the host
      application, not by the PlotPy library.
    • ImageIOHandler: removed add_change_path and adapt_path methods
  • Fix typo in tests.features.test_colormap_editor module: renamed function
    test_colormap_manager to test_colormap_editor
  • Removed unnecessary BaseImageItem.get_color_map_name method

v2.3.0

11 Mar 08:50
Compare
Choose a tag to compare

In this release, test coverage is 75%.

💥 New features:

  • Added support for colormap inversion:
    • The user can now invert the colormap of an image item:
      • From the image parameters dialog ("Invert colormap" checkbox)
      • From the plot context menu (right-click on the image item)
    • BaseImageItem.set_color_map method takes a new invert parameter (which
      defaults to None, meaning that the behavior is unchanged)
    • New ReverseColormapTool: registered by default in the plot widget, like the
      ColormapTool (add the "Invert colormap" entry in the context menu of the image)

🛠️ Bug fixes:

  • ErrorBarCurveItem: fixed NumPy deprecation warning
    ("Conversion of an array with ndim > 0 to a scalar is deprecated [...]")

ℹ️ Other changes:

  • Image plot items deserialization:
    • When an image plot item is deserialized, and needs to be reloaded from a file,
      the file path is adapted to the current working directory if file is not found
      (this is the legacy behavior).
    • An unnecessary call to ImageIOHandler.adapt_path method was removed from the
      RawImageItem.deserialize method: this issue has to be handled by the host
      application, not by the PlotPy library.
    • ImageIOHandler: removed add_change_path and adapt_path methods
  • Fix typo in tests.features.test_colormap_editor module: renamed function
    test_colormap_manager to test_colormap_editor
  • Removed unnecessary BaseImageItem.get_color_map_name method

v2.2.0

04 Mar 16:25
Compare
Choose a tag to compare

Version 2.2.0

In this release, test coverage is 75%.

New features:

  • Added SIG_ITEM_PARAMETERS_CHANGED signal to BasePlot class:
    • This signal is emitted when the parameters of an item are changed using the
      parameters dialog, or a specific tool (e.g. the colormap selection tool,
      or the lock/unlock tool for image items)
    • This signal is emitted with the item as argument
    • It is often emitted before the SIG_ITEMS_CHANGED signal, which is global to all
      items, but not necessarily. For example, when the colormap of an image is changed,
      the SIG_ITEM_PARAMETERS_CHANGED signal is emitted for the image item, but the
      SIG_ITEMS_CHANGED signal is not emitted.
  • Added new colormap presets:
    • viridis, plasma, inferno, magma, cividis
    • afmhot
    • coolwarm, bwr, seismic
    • gnuplot2, CMRmap, rainbow, turbo
  • Fixed all qualitative colormaps:
    • All qualitative colormaps have been re-computed because they are not supposed to be
      interpolated, which was the case and made them unusable
    • The qualitative colormaps are now usable and look like the ones from Matplotlib
  • Colormap manager:
    • Added a button to remove a custom colormap
    • The preset colormaps and the currently selected colormap are read-only
  • Added automatic unit tests for interactive tools:
    • AnnotatedCircleTool, AnnotatedEllipseTool, AnnotatedObliqueRectangleTool,
      AnnotatedPointTool, AnnotatedRectangleTool, AnnotatedSegmentTool
    • AverageCrossSectionTool, CrossSectionTool, ObliqueCrossSectionTool,
      LineCrossSectionTool
    • EditPointTool, SelectPointsTool, SelectPointTool
    • AspectRatioTool, ImageStatsTool, SnapshotTool
    • DisplayCoordsTool, RectZoomTool
    • CircleTool, EllipseTool, FreeFormTool, MultiLineTool,
      ObliqueRectangleTool, PointTool, RectangleTool, SegmentTool
  • Internal package reorganization: moved icons to plotpy/data/icons folder