# PyGMT v0.18.0 released **The PyGMT team is starting into 2026 with announcing PyGMT release v0.18.0 🎆🎇! This minor release features a Pythonic `Position` class for enhanced GMT embellishment placement 🎉.** **Here are the highlights** :tada:: - 🎉 Eighteenth minor release of PyGMT 🎉 - Enhanced GMT embellishment (e.g., scale bar, GMT logo, image) placement and styling with a Pythonic `Position` class and additional controlling parameters - Five new or updated gallery examples ([#4231](https://github.com/GenericMappingTools/pygmt/pull/4231), [#4229](https://github.com/GenericMappingTools/pygmt/pull/4229), [#4228](https://github.com/GenericMappingTools/pygmt/pull/4228), [#4265](https://github.com/GenericMappingTools/pygmt/pull/4265), [#4214](https://github.com/GenericMappingTools/pygmt/pull/4214)) **Nice enhancements :sparkles:**: - AliasSystem: Migrate the `registration` parameter to the new alias system and support descriptive arguments ([#4182](https://github.com/GenericMappingTools/pygmt/pull/4182)) - `pygmt.grdfilter`: Let the parameter `nans` support descriptive arguments ([#4310](https://github.com/GenericMappingTools/pygmt/pull/4310)) - `Figure.colorbar`: Add `position`/`length`/`width` and more parameters to specify colorbar position and properties ([#4048](https://github.com/GenericMappingTools/pygmt/pull/4048)) - `Figure.grdview`: Improve parameters `plane`/`facade_fill`/`facade_pen` to set the plane and facade ([#4235](https://github.com/GenericMappingTools/pygmt/pull/4235)) - `Figure.histogram`: Split parameter `bar_width` into `bar_width` and `bar_offset` ([#4316](https://github.com/GenericMappingTools/pygmt/pull/4316)) - `Figure.inset`: Add parameters `position`/`width`/`height` to specify inset position and dimensions ([#4047](https://github.com/GenericMappingTools/pygmt/pull/4047)) - `Figure.image`: Add aliases for **-I** (`invert`) and **-B** (`frame`) ([#4089](https://github.com/GenericMappingTools/pygmt/pull/4089), [#4301](https://github.com/GenericMappingTools/pygmt/pull/4301)) - `Figure.image`: Add parameters `position`/`width`/`height`/`dpi`/`replicate` to control image position and properties ([#4045](https://github.com/GenericMappingTools/pygmt/pull/4045)) - `Figure.legend`: Add aliases for **-S** (`scale`) and **-B** (`frame`) ([#4254](https://github.com/GenericMappingTools/pygmt/pull/4254)) - `Figure.legend`: Add parameters `position`/`width`/`height`/`line_spacing` to specify legend position and properties ([#4046](https://github.com/GenericMappingTools/pygmt/pull/4046)) - `Figure.logo`: Add parameters `position`/`width`/`height` to specify logo position and dimensions ([#4014](https://github.com/GenericMappingTools/pygmt/pull/4014)) - `Figure.wiggle`: Add parameters `position`/`length`/`label`/`label_alignment` for the scalebar position and properties ([#4049](https://github.com/GenericMappingTools/pygmt/pull/4049)) Read through the [changelog](https://www.pygmt.org/v0.18.0/changes.html) for the full list of changes. Installation/upgrade :arrow_up: instructions are at https://www.pygmt.org/v0.18.0/install.html! This version is compatible with GMT 6.5.0 - 6.6.0, and now requires Python 3.12+ :snake:, NumPy 2.0+, pandas 2.2+, and Xarray 2024.5+ following our [support policy for GMT and other package dependencies](https://www.pygmt.org/v0.18.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 (introduced in GMT 6.5.0) was potentially confusing, and led us to [document a workaround](https://www.pygmt.org/v0.18.0/api/generated/pygmt.Figure.colorbar.html) in PR [#4126](https://github.com/GenericMappingTools/pygmt/pull/4126)! ### :bulb: Additions and updates to Gallery examples | [GeoPandas: Point geometry](https://www.pygmt.org/v0.18.0/gallery/symbols/points_cities.html) | [GeoPandas: Line geometry](https://www.pygmt.org/v0.18.0/gallery/lines/linestrings.html) | [GeoPandas: Polygon geometry](https://www.pygmt.org/v0.18.0/gallery/maps/choropleth_map.html) | |:---:|:---:|:--:| |[![](https://www.pygmt.org/v0.18.0/_images/sphx_glr_points_cities_001.png)](https://www.pygmt.org/v0.18.0/gallery/symbols/points_cities.html) | [![](https://www.pygmt.org/v0.18.0/_images/sphx_glr_linestrings_001.png)](https://www.pygmt.org/v0.18.0/gallery/lines/linestrings.html) | [![](https://www.pygmt.org/v0.18.0/_images/sphx_glr_choropleth_map_001.png)](https://www.pygmt.org/v0.18.0/gallery/maps/choropleth_map.html) | | [Legend size coding](https://www.pygmt.org/v0.18.0/tutorials/basics/plot.html) | [Legend line spacing](https://www.pygmt.org/v0.18.0/tutorials/advanced/legends.html#adjust-position-and-line-spacing) | |:---:|:---:| | [![](https://www.pygmt.org/v0.18.0/_images/sphx_glr_plot_002.png)](https://www.pygmt.org/v0.18.0/tutorials/basics/plot.html) | [![](https://www.pygmt.org/v0.18.0/_images/sphx_glr_legends_002.png)](https://www.pygmt.org/v0.18.0/tutorials/advanced/legends.html#adjust-position-and-line-spacing) | ### :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` ([#4015](https://github.com/GenericMappingTools/pygmt/pull/4015)), `Figure.directional_rose` ([#4025](https://github.com/GenericMappingTools/pygmt/pull/4025)), `Figure.magnetic_rose` ([#4051](https://github.com/GenericMappingTools/pygmt/pull/4051)) - **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)) 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.18.0/contributing.html) to figure out how you can help and get started :rocket:. ### :warning: Upcoming deprecations - **v0.19.0 (Planned for March 2026)** * `pygmt.grdfill`: Deprecate parameter `no_data` to `hole` (since v0.15.0) * `pygmt.grdfill`: Deprecate parameter `mode`, use parameters `constantfill`/`gridfill`/`neighborfill`/`splinefill` instead (since v0.15.0) * `pygmt.grdclip`: Deprecate parameter `new` to `replace` (since v0.15.0) * `utils.sequence_join`: Deprecate parameter `separator` to `sep` (since v0.17.0) - **v0.20.0 (Planned for June 2026)** (*Sorry, but in a long term aproach this will make the names more consistent and intuitive, and they will align with with the PEP 8 style guide*) * `pygmt.grdfill`: Deprecate parameters `constantfill`/`gridfill`/`neighborfill`/`splinefill` to `constant_fill`/`grid_fill`/`neighbor_fill`/`spline_fill` (since v0.18.0) * `pygmt.grdlandmask`: Deprecate parameters `bordervalues`/`maskvalues` to `broder_values`/`mask_values` (since v0.18.0) * `Figure.grdview`: Deprecate parameters `contourpen`/`facadepen`/`meshpen` to `contour_pen`/`facade_pen`/`mesh_pen` (since v0.18.0) * `Figure.grdview`: Deprecate parameter `drapegrid` to `drape_grid` (since v0.18.0) * `Figure.histogram`: Deprecate parameter `barwidth` to `bar_width` (since v0.18.0) * `Figure.inset`: Deprecate parameter `margin` to `clearance` (since v0.18.0) * `Figure.meca`: Deprecate parameters `compressionfill`/`extensionfill` to `compression_fill`/`extension_fill` (since v0.18.0) * `Figure.meca`: Deprecate parameter `labelbox` to `label_box` (since v0.18.0) * `pygmt.select`: Deprecate parameter `gridmask` to `mask_grid` (since v0.18.0) * `pygmt.select`: Deprecate parameter `mask` to `mask_values` (since v0.18.0) * `pygmt.surface`: Deprecate parameter `maxradius` to `max_radius` (since v0.18.0) * `Figure.velo`: Deprecate parameters `uncertaintyfill` to `uncertainty_fill` (since v0.18.0) * `Figure.wiggle`: Deprecate parameters `fillnegative`/`fillpositive` to `negative_fill`/`positive_fill` (since v0.18.0) * `pygmt.x2sys_cross`: Deprecate parameter `trackvalues` to `track_values` (since v0.18.0) * Remove deprecated `pygmt.io.load_dataarray` (since v0.16.0) * `Session.virtualfile_in`: Remove deprecated parameters `required_z`/`extra_arrays`/`required_data` (since v0.16.0) - **v0.21.0** * `pygmt.grdsample`: Deprecate parameter `translate` to `toggle` (since v0.18.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.18.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? 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!