Releases: raphaelquast/EOmaps
EOmaps v8.0.1
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 eomapsnow only installs the bare minimum requirements to runEOmaps.
❗To install EOmaps with all optional dependencies, usepip 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 acceptsxarray.Datasetsas 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")
- You can use it to toggle showing a layer on top of the currently visible layer.
- The
switch_layerkeypress-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
LayoutEditornow accepts-1as 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.tomlfile (instead ofsetup.py) - ❗ Supported python version is now
>=3.8 - EOmaps now uses qtpy to support multiple Qt versions for the 🧰 Companion Widget!
_version.pyhas been removed. The version is now specified in the[project]category of thepyproject.tomlfile.- Actions now use
micromambato setup (and cache) test environments - Colorbar kwargs
show_outlineandylabelhave been renamed tooutlineandhist_label
The following (previously deprecated) methods are now removed:
m.set_data_specs$\Rightarrow$ usem.set_datainsteadm.add_wms.DLR_basemaps...$\Rightarrow$ usem.add_wms.DLR.basemap...insteadm_inset.indicate_inset_extent$\Rightarrow$ usem_inset.add_extent_indicatorinstead
📖 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
numpybinary incompatibility warning ifnetCDF4is 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_rastershape - 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_arrayissues 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
rastershape with 1D datasets - Make sure data encoding fill-value is properly applied
EOmaps v8.0rc1
A second release-candidate for EOmaps v8.
For a full list of upcoming changes, fixes and improvements, see #205
EOmaps v8.0rc0
A first release-candidate for EOmaps v8.
For a full list of upcoming changes, fixes and improvements, see #205
EOmaps v7.3.3
Another round of bug-fixes for v7.3.
🌳 New
MapsGridobjects now have dedicated.show()and.snapshot()methods
🔨 Fixes
- ❗ fix restoring visible layer in interactive backends after using
m.savefig() - ❗ fix issues with InsetMaps in
ipymplbackend - 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
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
ipymplbackend 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
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
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")m.add_annotation()andm.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.
(usem.show_layer(m.layer)to show the layer of a selected Maps object!) - Activating the
AnnotationEditornow 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
rtreeand add default python version to development env file - fix restoring axes backgrounds in gui after savefig
EOmaps v7.2.1
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!
- ❗ Explicitly call
EOmaps v7.2
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
rastershape 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
maxsizewill 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
rasteris now used as default plot shape also for very large datasets
EOmaps v7.1.2
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
wmslayers - only log unique picker names for multi-geometry GeoDataFrames
- allow using
scatter_pointsas 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.mdfile added
