Skip to content

Releases: PlotPyStack/PlotPy

v2.7.5

15 Jul 13:27
Compare
Choose a tag to compare

Version 2.7.5

🛠️ Bug fixes:

  • Issue #44 - Incorrect calculation method for "∑(y)" in CurveStatsTool: replaced spt.trapezoid with np.sum, which is more consistent with the summation operation
  • Fix update_status method in all cross-section tools (intensity profile tools):
    • Use get_items instead of get_selected_items to retrieve the image items
    • This allows the tools to work properly when no image item is selected, but there are image items in the plot
    • This closes Issue #47 - Intensity profile tools do not work when no image item is selected

Other changes:

  • Updated guidata dependency to V3.10.0
  • Using new guidata translation utility based on babel

v2.7.4

26 Apr 07:29
Compare
Choose a tag to compare

In this release, test coverage is 80%.

🛠️ Bug fixes:

  • Issue #42 - Image profiles: when moving/resizing image, profile plots are not refreshed
  • Issue #41 - Average profile visualization: empty profile is displayed when the target rectangular area is outside the image area

v2.7.3

05 Apr 10:45
Compare
Choose a tag to compare

In this release, test coverage is 80%.

🛠️ Bug fixes:

  • Issue #40 - Z-axis logarithmic scale (ZAxisLogTool tool) is not compatible with anti-aliasing interpolation
  • Fix intersection check for destination rectangle in XYImageFilterItem
  • Issue #36 - Image items are not properly scaling along Y-axis with logarithmic scale:
    • Actually, image items do not support non-linear scales (this is an historical limitation)
    • This is not documented at all, so we've added an explicit warning: a red colored message is displayed at the center of the image frame when any non-linear scale is applied to either X or Y axis
    • When dealing with non-linear scales, PlotPy provides an alternative solution: the user may rely on XYImageItem (e.g. by using make.xyimage) as this item supports arbitrary X and Y pixel coordinates
  • Issue #34 - ValueError when trying to plot 2D histogram items with PyQt6

Other changes:

  • Replace deprecated icon files with new SVG icons for selection tools

v2.7.2

14 Feb 14:35
Compare
Choose a tag to compare

Version 2.7.2

🛠️ Bug fixes:

  • Issue #32 - Plot item list panel's parameters dialog box is empty for non-selectable items
  • Issue #30 - handle_final_shape_cb argument doesn't work on MultilineTool, PolygonTool, AnnotatedPolygonTool

v2.7.1

22 Jan 14:02
Compare
Choose a tag to compare

Version 2.7.1

🛠️ Bug fixes:

  • Fixed update canvasRect type to QRectF for intersection checks in CircleSVGShape, following this bug fix in PythonQwt V0.14.4
  • Fixed regression with respect to guiqwt regarding plot items instantiation:
    • guiqwt was allowing to instantiate plot items without needing to create a QApplication instance (no GUI event loop was required)
    • This was not the case with plotpy, so that it was not possible -for example- to serialize/deserialize plot items to JSON without creating a QApplication instance
    • This has been fixed by removing the QIcon instantiation from the plot items constructors (call to QwtPlotItem.setIcon method). Note that -in the meantime- QwtPlotItem.setIcon and QwtPlotItem.icon methods have also been removed in PythonQwt V0.14.3. Code relying on this feature should thus be updated to use the new get_icon_name method instead, i.e. get_icon(item.get_icon_name()) instead of item.icon().
  • Issue #26 - Item list panel should not allow to select a non-selectable item

v2.7.0

07 Nov 11:11
Compare
Choose a tag to compare

Version 2.7.0

Supported versions of Python have been updated (drop support for Python 3.8, add support for Python 3.13):

  • PlotPy < 2.7.0: Python 3.8, 3.9, 3.10, 3.11 and 3.12
  • PlotPy >= 2.7.0: Python 3.9, 3.10, 3.11, 3.12 and 3.13

Other dependencies have been updated:

  • Updated versions to those available at the time of the release of the oldest supported Python version (3.9)
  • Exception: Cython 3.0 is required for Python 3.13

💥 New features / Enhancements:

  • Added AnnotatedPolygon annotation to items
  • Added make.annotated_polygon function to plotpy.builder module
  • Customization of annotation information:
    • Added info_callback argument to all annotation class constructors
    • Added set_info_callback method to all annotation classes
    • The info_callback is a function that takes the annotation object and returns a string with the information to display
    • Default info_callback is redirected to the get_infos method of the annotation object (this makes the feature backward compatible)

🛠️ Bug fixes:

  • Fixed pydicom support: use dcmread instead of read_file to read DICOM files

v2.6.3

01 Oct 15:51
Compare
Choose a tag to compare

⚡ Ready-to-use packages for all platforms are available on PyPI

🧯 In this release, test coverage is 79%.

🛠️ Bug fixes:

  • Issue #25 - OverflowError with Contrast Adjustment panel for constant images
  • When updating image parameters (ImageParam) from the associated item object:
    • If xmin, xmax, ymin, ymax attributes are not yet set (i.e. None), do not update them with the image data bounds
    • Previous behavior was to update them with the image data bounds, which was leading to breaking the automatic bounds update when the image data is updated
  • Issue #24 - Colormap: side effect on image axes when changing the colormap
  • Issue #23 - Windows: Image _scaler engine performance regression
  • PySide6 compatibility issues:
    • Fixed deprecated call to QMouseEvent in tests/unit/utils.py
    • Added workaround for QPolygonF shape point slicing
  • Issue #21 - PySide6 on Linux: segfault in test_colormap_editor.py
  • Fixed sliderMoved signal connection in ColorMapEditor
  • Fixed AssertionError in test_rect_zoom.py (Linux, Python 3.12, PyQt6)
  • Fixed typing issues in plotpy.events module:
    • Event objects were not properly typed (QtCore.QEvent instead of QtGui.QMouseEvent)
    • Event position arguments were not properly typed (QtCore.QPoint instead of QtCore.QPointF)
  • Fix NumPy FutureWarning: Format strings passed to MaskedConstant are ignored [...] when displaying masked pixel coordinates

v2.6.2

06 Aug 09:33
Compare
Choose a tag to compare

⚡ Ready-to-use packages for all platforms are available on PyPI

💥 New features / Enhancements:

  • Added Wheel packages for all major platforms on PyPI:
    • Windows (32/64bits), MacOS, Linux
    • Python 3.8 to 3.12

🛠️ Bug fixes:

  • Fixed color theme support (dark/light mode), leveraging the new guidata V3.6 feature

v2.6.1

02 Aug 13:30
Compare
Choose a tag to compare

ℹ️ Release V2.6.0 was a fugitive release that was replaced by V2.6.1 due to a critical bug in the segment line cross section computation for masked images.

💥 New features / Enhancements:

  • Added support for color theme change at execution (relies on guidata V3.6)
  • Changed strategy for default plot widget size:
    • No default size is applied to the plot widget anymore (before, the default size was 800x600 pixels)
    • Added parameter size to PlotDialog, PlotWindow classes, and make.dialog, make.window functions to set the initial size of the plot widget

🛠️ Bug fixes:

  • Fixed segment line cross section computation for masked images:
    • Avoided warning message when encountering masked values in the image data
    • Replacing masked values by NaNs when computing the segment line cross section (as before, but explicitely, to avoid the warning message)

v2.6.0

02 Aug 13:08
Compare
Choose a tag to compare

💥 New features / Enhancements:

  • Added support for color theme change at execution (relies on guidata V3.6)
  • Changed strategy for default plot widget size:
    • No default size is applied to the plot widget anymore (before, the default size was 800x600 pixels)
    • Added parameter size to PlotDialog, PlotWindow classes, and make.dialog, make.window functions to set the initial size of the plot widget

🛠️ Bug fixes:

  • Fixed segment line cross section computation for masked images:
    • Avoided warning message when encountering masked values in the image data
    • Replacing masked values by NaNs when computing the segment line cross section (as before, but explicitely, to avoid the warning message)