PyGMT v0.17.0 released

Announcing PyGMT release v0.17.0 :tada:! 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)
  • Implement the new alias system towards a Pythonic interface (#3986, #4000, #3993)
  • GMTDataArrayAccessor: Support applying grid operations on the current xarray.DataArray object (#3854)

Nice enhancements :sparkles::

  • Add the Box class for specifying the box of GMT embellishments (#3995)
  • Add the Pattern class for specifying bit and hachure patterns to fill symbols and polygons (#4020)
  • Figure.solar: Support terminator datetime with timezone (#4112)
  • pygmt.binstats: Let the parameter statistic support descriptive arguments (#3012)
  • Figure.logo: Let the style parameter support descriptive arguments (#4074)
  • Let the verbos parameter support descriptive arguments (#4039)

Read through the changelog for the full list of changes. Installation/upgrade :arrow_up: instructions are at Installing — PyGMT! 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. Go try it online at try-gmt :rocket:.

As usual, please feel free to report any bugs :beetle: with the issue template on GitHub. Your feedback is what helps us to improve :folded_hands:! For example, this issue #3041 and various forum posts like this 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 in PR #4126!

:bulb: Addition to Gallery examples and Technical references

Text formatting
Gallery example
Technical reference
Justification codes
Technical reference
EPSG codes
Gallery example

: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 on GitHub or the list below for things you can help with!

  • PyGMT Logo
    Thanks to the contributions of @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 or PR #3849. Stay tuned!

  • Features/enhancements :sparkles:

    • Wrap GMT modules: clip, coupe, earthtide, fitcircle, movie, polar, and sac
    • Implement high-level methods of Figure.plot and Figure.plot3d (#2797): Figure.scatter (#3602), Figure.choropleth (#2798), Figure.errorbar, Figure.stem, Figure.fill_between
    • Implement high-level methods of Figure.basemap or Figure.coast (#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)
    • Add a tutorial explaining the generally accepted input types (#1268)

Hacktoberfest just started :laptop:! So, please don’t be shy to reach out on GitHub if you’re interested in contributing :smile:! You can have a look at our Contributors Guide 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)

The compatibility matrix for GMT, Python, and the required core package dependencies NumPy, pandas, and Xarray is listed at Minimum Supported Versions — PyGMT, 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 :camera_with_flash: and ResearchGate!

2 Likes

If you want to try PyGMT on Google Colab, there’s a small trick to get it working with the new PyGMT v0.17.0 using condacolab.
Check it out here :backhand_index_pointing_right: PyGMT_0_17_0_GoogleColab_Setup.ipynb

Why banning the short options? You guys seem to still keep changing the long option names.