owned this note
owned this note
Published
Linked with GitHub
# PyGMT v0.17.0 released
**Announcing PyGMT release v0.17.0! 🎉 This minor release features a newly designed alias system towards a more Pythonic interface.**
**Here are the highlights** :tada::
- Add support for GMT 6.6.0, while dropping support for GMT 6.4.0 ([#4017](https://github.com/GenericMappingTools/pygmt/issues/4017))
- Implement the new alias system towards a Pythonic interface ([#3986](https://github.com/GenericMappingTools/pygmt/pull/3986), [#4000](https://github.com/GenericMappingTools/pygmt/pull/4000), [#3993](https://github.com/GenericMappingTools/pygmt/pull/3993))
- GMTDataArrayAccessor: Support applying grid operations on the current xarray.DataArray object ([#3854](https://github.com/GenericMappingTools/pygmt/pull/3854))
**Nice enhancements :sparkles:**:
- Add the `Box` class for specifying the box of GMT embellishments ([#3995](https://github.com/GenericMappingTools/pygmt/pull/3995))
- Add the `Pattern` class for specifying bit and hachure patterns to fill symbols and polygons ([#4020](https://github.com/GenericMappingTools/pygmt/pull/4020))
- `Figure.solar`: Support terminator datetime with timezone ([#4112](https://github.com/GenericMappingTools/pygmt/pull/4112))
- `pygmt.binstats`: Let the parameter `statistic` support descriptive arguments ([#3012](https://github.com/GenericMappingTools/pygmt/pull/3012))
- `Figure.logo`: Let the `style` parameter support descriptive arguments ([#4074](https://github.com/GenericMappingTools/pygmt/pull/4074))
- Let the `verbos` parameter support descriptive arguments ([#4039](https://github.com/GenericMappingTools/pygmt/pull/4039))
Read through the [changelog](https://www.pygmt.org/v0.17.0/changes.html) for the full list of changes. Installation/upgrade :arrow_up: instructions are at https://www.pygmt.org/v0.17.0/install.html! Note that this version is cross-compatible with GMT 6.5.0 - 6.6.0, but it requires Python 3.11+ :snake:, NumPy 1.26+, pandas 2.2+, and Xarray 2023.10+ following our [support policy for GMT and other package dependencies](https://www.pygmt.org/v0.17.0/minversions.html). Go try it online at [try-gmt](https://github.com/GenericMappingTools/try-gmt) :rocket:.
As usual, please feel free to report any bugs :beetle: with the [issue template on GitHub](https://github.com/GenericMappingTools/pygmt/issues/new?assignees=&labels=bug&template=bug_report.yaml). Your feedback is what helps us to improve 🙏! For example, this issue [#3041](https://github.com/GenericMappingTools/pygmt/issues/3041) and various forum posts like [this](https://forum.generic-mapping-tools.org/t/multiple-colorbars-changes-the-annotation-fontsize/4945) helped us to realize that GMT's font size autoscaling for colorbars (introducted in GMT 6.5.0) was potentially confusing, and led us to [document a workaround](https://www.pygmt.org/v0.17.0/api/generated/pygmt.Figure.colorbar.html) in PR [#4126](https://github.com/GenericMappingTools/pygmt/pull/4126)!
### :bulb: Addition to Gallery examples and Technical references
| Text formatting [Gallery_example](https://www.pygmt.org/v0.17.0/gallery/embellishments/text_formatting.html) [Technical_reference](https://www.pygmt.org/v0.17.0/techref/text_formatting.html) | Justification codes [Technical_reference](https://www.pygmt.org/v0.17.0/techref/justification_codes.html) | EPSG codes [Gallery_example](https://www.pygmt.org/v0.17.0/gallery/maps/epsg_codes.html) |
|:---:|:---:|:--:|
|[](https://www.pygmt.org/v0.17.0/gallery/embellishments/text_formatting.html) | [](https://www.pygmt.org/v0.17.0/techref/justification_codes.html) | [](https://www.pygmt.org/v0.17.0/gallery/maps/epsg_codes.html) |
### :railway_track: Roadmap to future releases
While the team started to work on a new alias system and continues to enhance functionality, there are still plenty of features and improvements we'd like to add! Check out the [good first issue label](https://github.com/GenericMappingTools/pygmt/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) on GitHub or the list below for things you can help with!
- **PyGMT Logo**
Thanks to the contributions of [@sfrooti](https://github.com/sfrooti), we're super close to having an official PyGMT logo. If you'd like to provide any feedback during this stage of the design process, please leave your comments in [issue #1404](https://github.com/GenericMappingTools/pygmt/issues/1404) or [PR #3849](https://github.com/GenericMappingTools/pygmt/pull/3849). Stay tuned!
- Features/enhancements :sparkles:
- Wrap GMT modules: [clip](https://github.com/GenericMappingTools/pygmt/pull/3878), [coupe](https://github.com/GenericMappingTools/pygmt/issues/2019), [earthtide](https://github.com/GenericMappingTools/pygmt/pull/1824), [fitcircle](https://github.com/GenericMappingTools/pygmt/pull/1550), [movie](https://github.com/GenericMappingTools/pygmt/issues/1347), [polar](https://github.com/GenericMappingTools/pygmt/issues/2358), and [sac](https://github.com/GenericMappingTools/pygmt/issues/2358)
- Implement high-level methods of `Figure.plot` and `Figure.plot3d` ([#2797](https://github.com/GenericMappingTools/pygmt/issues/2797)): `Figure.scatter` ([#3602]( https://github.com/GenericMappingTools/pygmt/issues/3602)), `Figure.choropleth` ([#2798](https://github.com/GenericMappingTools/pygmt/pull/2798)), `Figure.errorbar`, `Figure.stem`, `Figure.fill_between`
- Implement high-level methods of `Figure.basemap` or `Figure.coast` ([#2831](https://github.com/GenericMappingTools/pygmt/issues/2831)): `Figure.scale_bar`, `Figure.directionrose`, `Figure.magneticrose`
- Documentation improvements :book:
- Add a beginner :beginner: friendly PyGMT tutorial that is a good roadmap for new GMT/PyGMT users ([#770](https://github.com/GenericMappingTools/pygmt/issues/770))
- Add a tutorial explaining the generally accepted input types ([#1268](https://github.com/GenericMappingTools/pygmt/issues/1268))
[Hacktoberfest](https://hacktoberfest.com/) just started 💻! So, please don't be shy to [reach out on GitHub](https://github.com/GenericMappingTools/pygmt) if you're interested in contributing :smile:! You can have a look at our [Contributors Guide](https://www.pygmt.org/v0.17.0/contributing.html) to figure out how you can help and get started :rocket:.
### :warning: Upcoming deprecations
- **v0.18.0 (Planned for December 2025)**
- Drop support for Python<=3.11, numpy<=1.26, and Xarray<=2024.6
- `pygmt.Figure`: Remove the private `_preprocess()` method (FutureWarning raised since PyGMT v0.16.0)
- **v0.19.0 (Planned for March 2026)**
* `pygmt.grdfill`: Deprecate parameter `no_data` to `hole` (deprecated since v0.15.0)
* `pygmt.grdfill`: Deprecate parameter `mode`, use parameters `constantfill`/`gridfill`/`neighborfill`/`splinefill` instead (deprecated since v0.15.0)
* `pygmt.grdclip`: Deprecate parameter `new` to `replace` (deprecated since v0.15.0)
* `utils.sequence_join`: Deprecate parameter `separator` to `sep` (deprecated since v0.17.0)
- **v0.20.0 (Planned for June 2026)**
* Remove deprecated `pygmt.io.load_dataarray` (deprecated since v0.16.0)
* `Session.virtualfile_in`: Remove deprecated parameters `required_z`/`extra_arrays`/`required_data` (deprecated since v0.16.0)
- **v1.0.0**
- Short form aliases (e.g. `R`) will not work if long form aliases (e.g. `region`) are available (SyntaxWarning raised since PyGMT v0.4.0, see [#1316](https://github.com/GenericMappingTools/pygmt/pull/1316))
The compatibility matrix for GMT, Python, and the required core package dependencies NumPy, pandas, and Xarray is listed at https://www.pygmt.org/v0.17.0/minversions.html, so make sure you keep things up to date!
### :world_map: Conference presentations/workshops/sprints
What conferences would you like to see GMT/PyGMT at next? EGU26? IGARSS? FOSS4G? Are you interested in helping to organize a workshop? Let us know in the comments below!
**P.S.** Share the word on Instagram [@genericmappingtools](https://www.instagram.com/genericmappingtools/) :camera_with_flash: and ResearchGate!