Skip to content

Releases: raphaelquast/EOmaps

EOmaps v8.2.1

20 May 19:21
02860ff
Compare
Choose a tag to compare

A first series of bugfixes for v8.2

🔨 Fixes

  • ❗Fix identification of default shape based on dataset size
  • ❗Fix issues with unmanaged artists on inset-maps
  • Explicitly check if norm is provided as string before setting data limits
  • Provide more descriptive (info) error message if data cannot be plotted
  • Avoid using classification bins as labels if a large number of bins is used (>30)
  • Make sure to resample colormaps in case more bins than colors are used
  • Avoid shape radius estimation if no data is set
  • Avoid unnecessary draw-triggers for datasets if the "all" layer is visible
  • Remove warning for widgets if backends other than "ipympl" are used

EOmaps v8.2

13 May 12:47
b40a54b
Compare
Choose a tag to compare

A new minor release with some fixes, many improvements to the internals and a few new features!

🌳 New

  • You can now use m.add_colorbar(layer=..) to override the layer at which the colorbar is plotted
  • There is a new method m.set_shade_dpi(...) to override the dpi used by shade-shapes.
    (Useful to fix data aggregation resolution for high-dpi exports or to adjust resolution to better suit data density)

🌦️ Changes

  • Grid-snapping of the LayoutEditor now snaps to all edges of the axes
    (Useful in case the axis-size is not a multiple of the grid-spacing)
    • If multiple axes are moved, the first selected object acts as anchor
  • ❗ The default matplotlib keymap p : "toggle pan/zoom tool" is now active again
🌩️ Internals (no effects on the public API)
  • Unit-tests now use image-comparison to ensure stable image export results
  • ❗ The Maps class has been refactored (Maps and MapsBase) to make the code more accessible and easier to handle.

🔨 Fixes

  • fix handling of axes on combined layers in the LayoutEditor
  • allow custom scatter_points marker shapes for "mark" callback
  • fix issues with identification of grid-label position with projections that create non-intersecting grid-lines
  • always print basic exception info on issue during layer-change action
  • make sure to trigger a figure-update after adding a scalebar
  • address pyproj warnings for pyproj>=3.5

EOmaps v8.1.1

09 Apr 17:27
c83405b
Compare
Choose a tag to compare

A quick bugfix release to address issues with disappearing colorbars on multiple layers.

EOmaps v8.1.1

🔨 Fixes

  • ❗ Fix colorbars on different layers only show after additional draw
  • Handle numpy linalg errors resulting from singular colorbar axes

EOmaps v8.1

A minor release that brings a new plot-shape!

Make sure to also checkout the release-notes for EOmaps v8.0!

🌳 New

New hexbin shape

There is a new shape to visualize your data as hexagonal-bin plots!

m.set_shape.hexbin(size=(20, 40), aggregator="mean")

🔨 Fixes

  • ❗ fix using multiple sizes with m.set_shape.scatter_points(size=...)
  • Fix scroll events should be captured in Jupyter Notebooks if the LayoutEditor is active
  • Fix placement of InsetMaps indicator-lines if multiple boundary intersections are found
  • Fix clipping issues if m.get_extent() is used with a crs other than the plot-crs
  • Fix using m.add_gridlines with uneven number of explicit lon/lat values
  • Unify treatment of ellipses and geod_circle shapes
  • Fix using kwargs to style the boundary of the peek_layer callback area
  • Fix using "hist_size=None" when adding colorbars
  • Fix hiding histogram axes with hist_size=0
  • Fix identification of layers that contain only dynamic artists
  • Fix issues with scalebars outside the axes clip boundary
  • Allow passing an explicit norm to m.plot_map if no classification is used
  • Allow using bbox=None with annotations to to hide the bounding-box
  • Identification of the directions for m.add_gridlines(where="tblr") has been improved

EOmaps v8.1

08 Apr 19:34
2c7e41d
Compare
Choose a tag to compare

A minor release that brings a new plot-shape!

Make sure to also checkout the release-notes for EOmaps v8.0!

🌳 New

New hexbin shape

There is a new shape to visualize your data as hexagonal-bin plots!

m.set_shape.hexbin(size=(20, 40), aggregator="mean")

🔨 Fixes

  • ❗ fix using multiple sizes with m.set_shape.scatter_points(size=...)
  • Fix scroll events should be captured in Jupyter Notebooks if the LayoutEditor is active
  • Fix placement of InsetMaps indicator-lines if multiple boundary intersections are found
  • Fix clipping issues if m.get_extent() is used with a crs other than the plot-crs
  • Fix using m.add_gridlines with uneven number of explicit lon/lat values
  • Unify treatment of ellipses and geod_circle shapes
  • Fix using kwargs to style the boundary of the peek_layer callback area
  • Fix using "hist_size=None" when adding colorbars
  • Fix hiding histogram axes with hist_size=0
  • Fix identification of layers that contain only dynamic artists
  • Fix issues with scalebars outside the axes clip boundary
  • Allow passing an explicit norm to m.plot_map if no classification is used
  • Allow using bbox=None with annotations to to hide the bounding-box
  • Identification of the directions for m.add_gridlines(where="tblr") has been improved

EOmaps v8.0.2

15 Mar 17:47
0e47497
Compare
Choose a tag to compare

EOmaps v8.0.2

  • fix issues with missing companion-widget source files
  • fix issues with missing dask-expr dependency for datashader

EOmaps v8.0

A new major release that brings a lot of important updates and improvements for EOmaps!

A big thanks goes to @banesullivan, @yeelauren and @jhkennedy who provided many useful suggestions and comments to improve EOmaps in the PyOpenSci review (pyOpenSci/software-submission#138)!

§ New License!

The EOmaps source code is now licensed under a BSD 3 Clause License to make it easier for users and contributors to improve and extend the codebase and to use EOmaps to build awesome tools for geo-data analysis!

Make sure to have a look at the licensing-note in the FAQ of the docs for some more details!

Interested in contributing to EOmaps? Checkout the updated Contribution Guide!

⚠️ Major changes to pip install

Dependency management for EOmaps has been improved to split between required and optional dependencies.

pip install eomaps now only installs the bare minimum requirements to run EOmaps.
❗To install EOmaps with all optional dependencies, use pip install eomaps[all].

Make sure to have a look at the updated installation instructions in the docs for more details on how to selectively install optional dependencies!

🌳 New

  • m.set_data(...) now directly accepts xarray.Datasets as input (see docs on how to assign datasets)
  • There is a new pre-defined keypress callback: overlay_layer
    • You can use it to toggle showing a layer on top of the currently visible layer.
      m.all.cb.keypress.attach.overlay_layer(<layer-name>, key="a")
  • The switch_layer keypress-callback now also accepts lists of layer-names (or lists of tuples (name, transparency))
  • m.cb.pick.share_events() now supports the additional kwarg "ensure_same_id"
    • If True, all maps that share the pick-event will use the same ID to identify the relevant datapoint
    • If False, all maps that share the pick-event identify the closest datapoint based on the (reprojected) click position.
  • The LayoutEditor now accepts -1 as width/height value for axes (to auto-adjust the value)

🕹️ Jupyter Widgets

There is now a collection of pre-configured Jupyter Widgets that can be used as control elements in Jupyter Notebooks!

Make sure to checkout the corresponding 🕹️ EOmaps Jupyter Widgets section in the docs!

🌦️ Changes

  • ❗ Installation config is now provided as a pyproject.toml file (instead of setup.py)
  • ❗ Supported python version is now >=3.8
  • EOmaps now uses qtpy to support multiple Qt versions for the 🧰 Companion Widget!
  • _version.py has been removed. The version is now specified in the [project] category of the pyproject.toml file.
  • Actions now use micromamba to setup (and cache) test environments
  • Colorbar kwargs show_outline and ylabel have been renamed to outline and hist_label

The following (previously deprecated) methods are now removed:

  • m.set_data_specs $\Rightarrow$ use m.set_data instead
  • m.add_wms.DLR_basemaps... $\Rightarrow$ use m.add_wms.DLR.basemap... instead
  • m_inset.indicate_inset_extent $\Rightarrow$ use m_inset.add_extent_indicator instead

📖 Documentation updates

Make sure to checkout the fully updated API docs!

  • Documentation environment was updated to most recent build dependencies
  • Only minimal requirements to import eomaps are now installed for docs-build
  • Info on how to configure VSCode/VSCodium for EOmaps has been added to the docs
  • In general, the docs now (gradually switch to) use MySt and Jupyter Notebooks (parsed with myst_nb) to improve formatting, examples etc.

🔨 Fixes

  • Make sure the widget is compatible with both Qt5 and Qt6
  • Fix forcing colorbar-position inheritance
  • Fix treatment of colorbar histogram style kwargs (e.g. edgecolor, facecolor, etc.)
  • Address numpy binary incompatibility warning if netCDF4 is imported after numpy
  • Fix inheriting colorbar positions from other colorbars
  • Address unittest issue with contour-shape labels
  • Avoid blocking the terminal in unittests for jupyter notebooks
  • Fix missing docstring for DLR webmap service
  • Fix issues for move-callbacks shared between multiple Maps
  • Fix visibility of datasets when using "dynamic_shade_indicator" colorbars
  • Fix assignment of vmin/vmax for "count" based shade-aggregation
  • Fix treatment of masked values in evaluation of vmin/vmax for encoded datasets
  • Fix issues with help-text popups of the CompanionWidget LayerTabBar
  • Improvements for colorbar implementation
  • Unify treatment of layer-name parsing
  • Try to push current view to toolbar nav-stack after layout-restore
  • Fix issues with help-popups of the LayerTabBar of the companion-widget
  • Fix issues with figure-exports after m.apply_layout(...)
  • Fix treatment of reprojected 1D datasets with shade_raster shape
  • Fix parsing maxsize argument in companion widget for raster-shape
  • Fix treatment of infinite values in weighted colorbar histograms
  • Allow passing transform-kwarg to m.add_text(...)
  • Fix truncating companion-widget title if too long
  • Make sure companion-widget dataset-dropdown is elided
  • Avoid memory-leaks caused by artist-references in pick-containers
  • Fix numpy.ma.masked_array issues with datashader/numba when using "shade_points"
  • Fix handling pick-events that do not have an "idx" property
  • Fix raster-aggregation if block-size cannot be evaluated (e.g. None)
  • Fix handling of pick-events that do not have an "idx" property
  • Make sure keypress-events are triggered irrespective of the toolbar mode
  • Make sure LayoutEditor x0, y0 values are always set as specified
  • Fix issues with string-type dpi values passed to savefig
  • Avoid pandas dependency when attempting to use raster shape with 1D datasets
  • Make sure data encoding fill-value is properly applied

EOmaps v8.0.1

15 Mar 15:19
1410b52
Compare
Choose a tag to compare

A new major release that brings a lot of important updates and improvements for EOmaps!

A big thanks goes to @banesullivan, @yeelauren and @jhkennedy who provided many useful suggestions and comments to improve EOmaps in the PyOpenSci review (pyOpenSci/software-submission#138)!

§ New License!

The EOmaps source code is now licensed under a BSD 3 Clause License to make it easier for users and contributors to improve and extend the codebase and to use EOmaps to build awesome tools for geo-data analysis!

Make sure to have a look at the licensing-note in the FAQ of the docs for some more details!

Interested in contributing to EOmaps? Checkout the updated Contribution Guide!

⚠️ Major changes to pip install

Dependency management for EOmaps has been improved to split between required and optional dependencies.

pip install eomaps now only installs the bare minimum requirements to run EOmaps.
❗To install EOmaps with all optional dependencies, use pip install eomaps[all].

Make sure to have a look at the updated installation instructions in the docs for more details on how to selectively install optional dependencies!

🌳 New

  • m.set_data(...) now directly accepts xarray.Datasets as input (see docs on how to assign datasets)
  • There is a new pre-defined keypress callback: overlay_layer
    • You can use it to toggle showing a layer on top of the currently visible layer.
      m.all.cb.keypress.attach.overlay_layer(<layer-name>, key="a")
  • The switch_layer keypress-callback now also accepts lists of layer-names (or lists of tuples (name, transparency))
  • m.cb.pick.share_events() now supports the additional kwarg "ensure_same_id"
    • If True, all maps that share the pick-event will use the same ID to identify the relevant datapoint
    • If False, all maps that share the pick-event identify the closest datapoint based on the (reprojected) click position.
  • The LayoutEditor now accepts -1 as width/height value for axes (to auto-adjust the value)

🕹️ Jupyter Widgets

There is now a collection of pre-configured Jupyter Widgets that can be used as control elements in Jupyter Notebooks!

Make sure to checkout the corresponding 🕹️ EOmaps Jupyter Widgets section in the docs!

🌦️ Changes

  • ❗ Installation config is now provided as a pyproject.toml file (instead of setup.py)
  • ❗ Supported python version is now >=3.8
  • EOmaps now uses qtpy to support multiple Qt versions for the 🧰 Companion Widget!
  • _version.py has been removed. The version is now specified in the [project] category of the pyproject.toml file.
  • Actions now use micromamba to setup (and cache) test environments
  • Colorbar kwargs show_outline and ylabel have been renamed to outline and hist_label

The following (previously deprecated) methods are now removed:

  • m.set_data_specs $\Rightarrow$ use m.set_data instead
  • m.add_wms.DLR_basemaps... $\Rightarrow$ use m.add_wms.DLR.basemap... instead
  • m_inset.indicate_inset_extent $\Rightarrow$ use m_inset.add_extent_indicator instead

📖 Documentation updates

Make sure to checkout the fully updated API docs!

  • Documentation environment was updated to most recent build dependencies
  • Only minimal requirements to import eomaps are now installed for docs-build
  • Info on how to configure VSCode/VSCodium for EOmaps has been added to the docs
  • In general, the docs now (gradually switch to) use MySt and Jupyter Notebooks (parsed with myst_nb) to improve formatting, examples etc.

🔨 Fixes

  • Make sure the widget is compatible with both Qt5 and Qt6
  • Fix forcing colorbar-position inheritance
  • Fix treatment of colorbar histogram style kwargs (e.g. edgecolor, facecolor, etc.)
  • Address numpy binary incompatibility warning if netCDF4 is imported after numpy
  • Fix inheriting colorbar positions from other colorbars
  • Address unittest issue with contour-shape labels
  • Avoid blocking the terminal in unittests for jupyter notebooks
  • Fix missing docstring for DLR webmap service
  • Fix issues for move-callbacks shared between multiple Maps
  • Fix visibility of datasets when using "dynamic_shade_indicator" colorbars
  • Fix assignment of vmin/vmax for "count" based shade-aggregation
  • Fix treatment of masked values in evaluation of vmin/vmax for encoded datasets
  • Fix issues with help-text popups of the CompanionWidget LayerTabBar
  • Improvements for colorbar implementation
  • Unify treatment of layer-name parsing
  • Try to push current view to toolbar nav-stack after layout-restore
  • Fix issues with help-popups of the LayerTabBar of the companion-widget
  • Fix issues with figure-exports after m.apply_layout(...)
  • Fix treatment of reprojected 1D datasets with shade_raster shape
  • Fix parsing maxsize argument in companion widget for raster-shape
  • Fix treatment of infinite values in weighted colorbar histograms
  • Allow passing transform-kwarg to m.add_text(...)
  • Fix truncating companion-widget title if too long
  • Make sure companion-widget dataset-dropdown is elided
  • Avoid memory-leaks caused by artist-references in pick-containers
  • Fix numpy.ma.masked_array issues with datashader/numba when using "shade_points"
  • Fix handling pick-events that do not have an "idx" property
  • Fix raster-aggregation if block-size cannot be evaluated (e.g. None)
  • Fix handling of pick-events that do not have an "idx" property
  • Make sure keypress-events are triggered irrespective of the toolbar mode
  • Make sure LayoutEditor x0, y0 values are always set as specified
  • Fix issues with string-type dpi values passed to savefig
  • Avoid pandas dependency when attempting to use raster shape with 1D datasets
  • Make sure data encoding fill-value is properly applied

EOmaps v8.0rc2

11 Mar 08:59
Compare
Choose a tag to compare
EOmaps v8.0rc2 Pre-release
Pre-release

A third release-candidate for EOmaps v8.

For a full list of upcoming changes, fixes and improvements, see #205

EOmaps v8.0rc1

07 Mar 11:49
Compare
Choose a tag to compare
EOmaps v8.0rc1 Pre-release
Pre-release

A second release-candidate for EOmaps v8.

For a full list of upcoming changes, fixes and improvements, see #205

EOmaps v8.0rc0

28 Feb 19:10
Compare
Choose a tag to compare
EOmaps v8.0rc0 Pre-release
Pre-release

A first release-candidate for EOmaps v8.

For a full list of upcoming changes, fixes and improvements, see #205

EOmaps v7.3.3

20 Dec 12:28
a285226
Compare
Choose a tag to compare

Another round of bug-fixes for v7.3.

🌳 New

  • MapsGrid objects now have dedicated .show() and .snapshot() methods

🔨 Fixes

  • ❗ fix restoring visible layer in interactive backends after using m.savefig()
  • ❗ fix issues with InsetMaps in ipympl backend
  • fix re-drawing spines with m.set_frame() if corners are not rounded
  • fix colorbar should use figure directly instead of relying on plt.gcf
  • fix re-fetching backgrounds if colorbars change axes sizes
  • fix parsing "maxsize" argument for raster-shape in companion-widget
  • fix treatment of weighted colorbar histograms with (out_of_range_vals="masked")