Skip to content

Releases: raphaelquast/EOmaps

EOmaps v8.0.1

15 Mar 15:19
1410b52

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.0rc1

07 Mar 11:49

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

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

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")

EOmaps v7.3.2

04 Dec 09:53
7136149

Choose a tag to compare

A second bugfix release for v7.3 that brings some important fixes for Jupyter Notebooks, custom WebMap services and RGB/RGBA composite plots.

🌳 New

  • Style kwargs are now supported when adding multiple preset-features in one go, for example:
    m = Maps()
    m.add_feature.preset("coastline", "ocean", "land", alpha=0.5)
  • You can now specify additional wms properties when using custom WebMap services, for example:
    my_wms = m.add_wms.get_service("service-url", service_type="wms", version=1.3.0)

🌦️ Changes

  • The figure-header added by the Jupyter-notebook ipympl backend is now hidden by default.
    To revert back to the old behavior (and enable the header), use:
    %matplotlib widget
    m = Maps()
    m.f.canvas.header_visible = True

🔨 fixes

  • ❗ fix issues with RGB/RGBA composite plots
  • ❗ fix UserDefined Classification issue: max-bin replaced by data-max
  • ❗ fix using transparent snapshots in IPython/Jupyter Notebooks
  • fix duplicated figures shown in jupyter notebooks inline backend
  • fix re-fetching backgrounds and spines with m.set_frame()
  • fix using m.set_frame() in jupyter notebook inline backend
  • improve syntax for disabling draw or update in the BlitManager
  • improve handling of issues with "tight_bbox" redraws
  • avoid logging during draw on higher levels
  • avoid turning off interactive mode with the jupyter notebook inline backend
  • allow passing kwargs to custom WebMap services

EOmaps v7.3.1

19 Nov 23:55
f74f6e3

Choose a tag to compare

A first series of bugfixes for v7.3.

🌦️ changes

  • InsetMap indicator lines are now only drawn between the boundaries of the InsetMap and its extent.

    You can add markers at the connection points with:

    m_inset.add_indicator_line(m, marker="o", markersize=10)

🔨 Fixes

  • fix re-drawing backgrounds on add/remove gridlines and gridlabels
  • fix re-drawing backgrounds on m.set_frame
  • fix triggering on_layer callbacks defined on InsetMaps
  • fix custom text positioning with m.add_title
  • fix handling of multiple inset-indicator lines
  • fix passing InsetMap boundary colors as RGBA tuples

EOmaps v7.3

21 Oct 00:52
575a787

Choose a tag to compare

A new minor release that brings a lot of fixes and some nice new functionalities!

🌳 New

  • There is a new convenience method to quickly update the properties of the frame of a map:
    • set boundary line properties and use rounded corners for map boundaries
    • set background patch color
m = Maps()
m.set_frame(rounded=0.5, edgecolor="r", linewidth=2, facecolor="0.5")

grafik

  • m.add_annotation() and m.add_marker() now support the "update" kwarg to override update triggers
    (useful to avoid unnecessary updates if multiple dynamic annotations/markers are added in a callback)
  • m.add_gdf() now supports the "permanent" kwarg to control if artists are updated on each event
    or added as background-artists
  • The 🚀 Contribution guide contains a new chapter on how to build the docs!

🌦️ Changes

  • ❗ Using m.show() no longer activates the layer associated with the calling Maps object.
    (use m.show_layer(m.layer) to show the layer of a selected Maps object!)
  • Activating the AnnotationEditor now clears all currently visible temporary artists and disables all callbacks

🔨 Fixes

  • ❗fix zooming datasets with individual shape sizes for each datapoints
  • ❗fix using the save-button in the normal matplotlib toolbar to save a figure
  • ❗fix custom axis background patch color is only visible on figure export
  • ❗fix grid-labels are not properly updated on pan/zoom events
  • fix identification of layers that only exist on InsetMaps
  • fix annotation editor clears annotation text on companion-widget init
  • fix all-nan slice warnings on vmin/vmax estimation if no data-values are provided
  • fix single geod_circle radius parsed to 1D array in setter
  • fix using m.add_gdf(permanent=False) to add dynamically updated geometries
  • fix annotation editor issues if annotation is not attached to the figure
  • fix m.get_extent() should not return coordinates outside the crs bounds
  • fix closing companion-widgets of child-maps on figure close
  • fix clearing snapshot cells with m.show()
  • fix m.util.layer_selector() should remain responsive during toolbar actions
  • fix using m.cb.<method>.set_execute_during_toolbar_action() on child Maps objects
  • improve handling of errors during snapshot creation
  • remove rtree and add default python version to development env file
  • fix restoring axes backgrounds in gui after savefig

EOmaps v7.2.1

09 Oct 09:32
d44423f

Choose a tag to compare

A first bugfix release for v7.2 that also brings some nice performance improvements!

Make sure to also check the release-notes for EOmaps v7.2!

🔨 Fixes

  • ❗ Fix issues with aggregated datasets outside the currently visible extent
  • ❗ Fix displacement of grid-labels on figure export with dpi other than the native dpi
  • ❗ Fix dataset export issues with "agg" backend on some of the plot-shapes
  • general performance updates for background-fetching and caching
  • avoid activating the companion widget when webagg backend is active

🌳 New

  • New method for raster-data aggregation: "mode" (e.g. most common value)
  • The behavior of callbacks during toolbar actions can now be set via
    m.cb.<method>.set_execute_during_toolbar_action()
  • New .remove() method for grid-lalbels

🌦️ Changes

  • To avoid issues with "webagg" derived backends, custom "move" callbacks no longer trigger automatic updates of the plot.
    • ❗ Explicitly call m.BM.update() in custom move-callbacks to trigger an update!

EOmaps v7.2

03 Oct 16:32
8cf8db7

Choose a tag to compare

A mew minor release that brings a lot of improvements for raster-data visualization!

🌳 New

Major improvements for raster-data visualization!

The raster-shape (e.g. m.set_shape.raster) now has data-aggregation capabilities!

This means that the raster shape can now be used also for arbitrarily sized datasets (as long as they fit in memory)
(so far tested with datasets up to 2 billion datapoints)

In short, this means:

  • Datasets larger than maxsize will be aggregated prior to plotting to avoid slow load-times for extremely large datasets
  • Aggregation can be turned off using maxsize=None (e.g. to get the behavior prior to v7.2)
  • By default, only datasets larger than 5 million datapoints will be aggregated prior to plotting

For more details, check the docs for the raster-shape!

🔨 Fixes

  • ❗ avoid activating matplotlibs interactive mode by default
  • fix identification of data-limits and colormap for GeoTiffs

🌦️ Changes

  • raster is now used as default plot shape also for very large datasets

EOmaps v7.1.2

28 Sep 11:35
7425d87

Choose a tag to compare

A second minor bugfix release for v7.1.2

Make sure to check the release-notes for EOmaps v7.1 as well!

🔨 Fixes

  • fix import error when adding wms layers
  • only log unique picker names for multi-geometry GeoDataFrames
  • allow using scatter_points as marker-shape
  • fix setting permanent-kwarg for markers
  • fix search-radius should default to m.cb.pick._search_radius
  • return created annotation object in m.add_annotation()
  • fix docstrings for get/set extent
  • avoid reprojection of gdf if init or cartopy crs can be identified
  • add more descriptive repr for Maps objects
  • make sure to only re-evaluate scalebar scale on extent changes
  • contributing.md file added