PyGMT - A Python interface for the Generic Mapping Tools

Overview

PyGMT

A Python interface for the Generic Mapping Tools

Documentation (development version) | Contact | Try Online

Latest version on PyPI GitHub Actions Tests status GitHub Actions GMT Dev Tests status Test coverage status Compatible Python versions. Discourse forum Digital Object Identifier for the Zenodo archive Contributor Code of Conduct

Why PyGMT?

A beautiful map is worth a thousand words. To truly understand how powerful PyGMT is, play with it online on Binder! But if you need some convincing first, watch this 1 hour introduction to PyGMT!

Afterwards, feel free to look at our Tutorials or visit the PyGMT Gallery.

Remote Online Sessions for Emerging Seismologists (ROSES): Unit 8 - PyGMT

Disclaimer

🚨 This package is still undergoing rapid development. 🚨

All of the API (functions/classes/interfaces) is subject to change until we reach v1.0.0 as per the semantic versioning specification. There may be non-backward compatible changes as we experiment with new design ideas and implement new features. This is not a finished product, use with caution.

We welcome any feedback and ideas! Let us know by submitting issues on GitHub or by posting on our Discourse forum.

About

PyGMT is a library for processing geospatial and geophysical data and making publication quality maps and figures. It provides a Pythonic interface for the Generic Mapping Tools (GMT), a command-line program widely used in the Earth Sciences.

We rely heavily on new features that have been implemented in GMT 6.0. In particular, a new modern execution mode that greatly simplifies figure creation. These features are not available in the 5.4 version of GMT.

Project goals

  • Make GMT more accessible to new users.
  • Build a Pythonic API for GMT.
  • Interface with the GMT C API directly using ctypes (no system calls).
  • Support for rich display in the Jupyter notebook.
  • Integration with the PyData ecosystem: numpy.ndarray or pandas.DataFrame for data tables and xarray.DataArray for grids.

Contacting Us

Contributing

Code of conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Contributing Guidelines

Please read our Contributing Guide to see how you can help and give feedback.

Imposter syndrome disclaimer

We want your help. No, really.

There may be a little voice inside your head that is telling you that you're not ready to be an open source contributor; that your skills aren't nearly good enough to contribute. What could you possibly offer?

We assure you that the little voice in your head is wrong.

Being a contributor doesn't just mean writing code. Equally important contributions include: writing or proof-reading documentation, suggesting or implementing tests, or even giving feedback about the project (including giving feedback about the contribution process). If you're coming to the project with fresh eyes, you might see the errors and assumptions that seasoned contributors have glossed over. If you can write any code at all, you can contribute code to open source. We are constantly trying out new skills, making mistakes, and learning from those mistakes. That's how we all improve and we are happy to help others learn.

This disclaimer was adapted from the MetPy project.

Citing PyGMT

PyGMT is a community developed project. See the AUTHORS.md file on GitHub for a list of the people involved and a definition of the term "PyGMT Developers". Feel free to cite our work in your research using the following BibTeX:

@software{pygmt_2021_5162003,
  author       = {Uieda, Leonardo and
                  Tian, Dongdong and
                  Leong, Wei Ji and
                  Schlitzer, William and
                  Toney, Liam and
                  Grund, Michael and
                  Jones, Meghan and
                  Yao, Jiayuan and
                  Materna, Kathryn and
                  Newton, Tyler and
                  Anant, Abhishek and
                  Ziebarth, Malte and
                  Magen, Yohai and
                  Wessel, Paul},
  title        = {{PyGMT: A Python interface for the Generic Mapping Tools}},
  month        = aug,
  year         = 2021,
  publisher    = {Zenodo},
  version      = {v0.4.1},
  doi          = {10.5281/zenodo.5162003},
  url          = {https://doi.org/10.5281/zenodo.5162003}
}

To cite a specific version of PyGMT, go to our Zenodo page at https://doi.org/10.5281/zenodo.3781524 and use the "Export to BibTeX" function there. It is also strongly recommended to cite the GMT6 paper (which PyGMT wraps around). Note that some modules like surface and x2sys also have their dedicated citation. Further information for all these can be found at https://www.generic-mapping-tools.org/cite.

License

PyGMT is free software: you can redistribute it and/or modify it under the terms of the BSD 3-clause License. A copy of this license is provided in LICENSE.txt.

Support

The development of PyGMT has been supported by NSF grants OCE-1558403 and EAR-1948603.

Related projects

  • GMT.jl: A Julia wrapper for GMT.
  • gmtmex: A Matlab/Octave wrapper for GMT.

Other Python wrappers for GMT:

Compatibility with GMT/Python/NumPy versions

PyGMT Version Documentation GMT Python Numpy
v0.5.0 (upcoming release) Dev Documentation (reflects main branch) >=6.2.0 >=3.7 >=1.18
v0.4.1 (latest release) v0.4.1 Documentation >=6.2.0 >=3.7 >=1.17
v0.4.0 v0.4.0 Documentation >=6.2.0 >=3.7 >=1.17
v0.3.1 v0.3.1 Documentation >=6.1.1 >=3.7  
v0.3.0 v0.3.0 Documentation >=6.1.1 >=3.7  
v0.2.1 v0.2.1 Documentation >=6.1.1 >=3.6  
v0.2.0 v0.2.0 Documentation >=6.1.1 3.6 - 3.8  
v0.1.2 v0.1.2 Documentation >=6.0.0 3.6 - 3.8  
v0.1.1 v0.1.1 Documentation >=6.0.0 3.6 - 3.8  
v0.1.0 v0.1.0 Documentation >=6.0.0 3.6 - 3.8  
Comments
  • -JEPSG:4326 not writing CRS to netcdf in surface

    -JEPSG:4326 not writing CRS to netcdf in surface

    Description of the problem

    Using a Spanish government gravity dataset converted to epsg:4326. Run blockmedian and surface seems to work fine. If I put a proj string in it seems to write that projection to the netcdf file.

    However, -JEPSG:4326 (or -Jepsg:4326 or 4326) do

    es not.

    I made a script version and put a debug print in the utils library generating the run arguments and that gives this:

    RUNARGS -I65.15s -R-9.34335092522/3.46340435922/35.8532670285/43.8612236053 RUNARGS -GD:\Spain\GMTtext15.nc -I65.15s -J4326 -R-9.34335092522/3.46340435922/35.8532670285/43.8612236053 -Vc

    Full code that generated the error

    #!/usr/bin/env python
    # coding: utf-8
    
    # In[1]:
    
    
    import pygmt
    import pandas as pd
    import geopandas as gpd
    import numpy as np
    #import rasterio
    
    
    #import pyvista as pv
    
    from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import
    
    import matplotlib.pyplot as plt
    from matplotlib import cm
    from matplotlib.ticker import LinearLocator, FormatStrFormatter
    from matplotlib.patches import Rectangle
    
    import verde as vd
    #import cartopy.crs as ccrs
    import dask
    import pyproj
    import pooch
    import xarray as xr
    import os
    
    spain = gpd.read_file(r'D:\Spain\Gravimetria.shp')
    
    # In[60]:
    
    spain.head()
    
    # In[3]:
    
    Z = spain['VALU_BOU26'].values
    lat =  spain.geometry.y.values
    lon =  spain.geometry.x.values
    
    # In[4]:
    
    xmin = spain.total_bounds[0]
    xmax = spain.total_bounds[2]
    ymin = spain.total_bounds[1]
    ymax = spain.total_bounds[3]
    region = [xmin, xmax, ymin, ymax]
    
    # In[5]:
    
    datatable = pd.DataFrame()
    datatable['longitude'] = lon.tolist()
    datatable['latitude'] = lat.tolist()
    datatable['bouguer_anomaly'] = Z.tolist()
    
    # In[61]:
    
    region2=[-9.31, 3.430053434000058, 35.92, 43.77780739100007]
    region3="-9.34335092522/3.46340435922/35.8532670285/43.8612236053"
    
    datatable_blockmedian = pygmt.blockmedian(table=datatable, spacing="65.15s", region=region3)  #e is metres
    #grid_s = pygmt.surface(datatable_blockmedian['longitude'],datatable_blockmedian['latitude'],datatable_blockmedian['bouguer_anomaly'],spacing="65.15s",region=region3,J="epsg:4326",V="c",outfile=r'D:\Spain\GMTtext15.nc')
    grid_s = pygmt.surface(datatable_blockmedian['longitude'],datatable_blockmedian['latitude'],datatable_blockmedian['bouguer_anomaly'],spacing="65.15s",region=region3,J="4326",V="c",outfile=r'D:\Spain\GMTtext15.nc')
    
     #+proj=longlat+ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0
    
    # In[62]:
    
    get_ipython().system('gdalinfo "D:\\Spain\\GMTText15.nc"')
    
    # In[ ]:
    

    Full error message

    From gdalinfo
    Driver: netCDF/Network Common Data Format
    
    Warning 1: Recode from UTF-8 to CP_ACP failed with the error: "Invalid argument".
    Warning 1: dimension #1 (x) is not a Longitude/X dimension.
    Warning 1: dimension #0 (y) is not a Latitude/Y dimension.
    C:\Users\rscott\AppData\Local\Continuum\anaconda3\envs\pygmt\lib\threading.py:874: ResourceWarning: unclosed file <_io.BufferedWriter name=4>
      del self._target, self._args, self._kwargs
    ResourceWarning: Enable tracemalloc to get the object allocation traceback
    C:\Users\rscott\AppData\Local\Continuum\anaconda3\envs\pygmt\lib\threading.py:874: ResourceWarning: unclosed file <_io.BufferedReader name=5>
      del self._target, self._args, self._kwargs
    ResourceWarning: Enable tracemalloc to get the object allocation traceback
    C:\Users\rscott\AppData\Local\Continuum\anaconda3\envs\pygmt\lib\threading.py:874: ResourceWarning: unclosed file <_io.BufferedReader name=6>
      del self._target, self._args, self._kwargs
    ResourceWarning: Enable tracemalloc to get the object allocation traceback
    
    
    Files: D:\Spain\GMTText15.nc
    Size is 709, 443
    Origin = (-9.352395243923700,43.870282379708144)
    Pixel Size = (0.018088637407401,-0.018117548816290)
    Metadata:
      NC_GLOBAL#Conventions=CF-1.7
      NC_GLOBAL#GMT_version=6.1.1 [64-bit]
      NC_GLOBAL#history=surface @[email protected] -GD:\Spain\GMTtext15.nc -I65.15s -J+4326 -R-9.34335092522/3.46340435922/35.8532670285/43.8612236053 -Vc
      NC_GLOBAL#title=Data gridded with continuous surface splines in tension
      x#actual_range={-9.343350925219999,3.46340435922}
      x#long_name=x
      y#actual_range={35.8532670285,43.8612236053}
      y#long_name=y
      z#actual_range={-143.2124328613281,312.9815673828125}
      z#long_name=z
      z#_FillValue=-nan(ind)
    Corner Coordinates:
    Upper Left  (  -9.3523952,  43.8702824) 
    Lower Left  (  -9.3523952,  35.8442083) 
    Upper Right (   3.4724487,  43.8702824) 
    Lower Right (   3.4724487,  35.8442083) 
    Center      (  -2.9399733,  39.8572453) 
    Band 1 Block=709x1 Type=Float32, ColorInterp=Undefined
      NoData Value=nan
      Metadata:
        actual_range={-143.2124328613281,312.9815673828125}
        long_name=z
        NETCDF_VARNAME=z
        _FillValue=-nan(ind)
    In [ ]:
    
    

    System information

    Please paste the output of python -c "import pygmt; pygmt.show_versions()":

    PyGMT information:
      version: v0.2.0
    System information:
      python: 3.8.6 | packaged by conda-forge | (default, Oct  7 2020, 18:22:52) [MSC v.1916 64 bit (AMD64)]
      executable: C:\Users\rscott\AppData\Local\Continuum\anaconda3\envs\pygmt\python.exe
      machine: Windows-10-10.0.18362-SP0
    Dependency information:
      numpy: 1.19.2
      pandas: 1.1.3
      xarray: 0.16.1
      netCDF4: 1.5.3
      packaging: 20.4
      ghostscript: 9.53.3
      gmt: 6.1.1
    GMT library information:
      binary dir: C:/Users/rscott/AppData/Local/Continuum/anaconda3/envs/pygmt
      cores: 12
      grid layout: rows
      library path: C:/Users/rscott/AppData/Local/Continuum/anaconda3/envs/pygmt/Library/bin/gmt.dll
      padding: 2
      plugin dir: C:/Users/rscott/AppData/Local/Continuum/anaconda3/envs/pygmt/Library/bin/gmt_plugins
      share dir: C:/Users/rscott/AppData/Local/Continuum/anaconda3/envs/pygmt/Library/share/gmt
      version: 6.1.1
    
    opened by RichardScottOZ 48
  • Release PyGMT v0.3.1

    Release PyGMT v0.3.1

    Release: v0.3.1 Scheduled Date: 2021/03/14 Pull request due date: 2021/03/12

    Priority PRs/issues to complete prior to release @GenericMappingTools/python Any priorities to finish for this patch release?

    • [x] Unnecessary files in the source distributions (#904)
    • [ ] ~~Document how to skip CI in the contributing guides (#908)~~
    • [x] Better categories for gallery examples (#876)
    • [x] Let pygmt.info load datetime columns into a str dtype array (#960)

    Before release:

    • [x] Reserve a DOI on Zenodo by clicking on "New Version"
    • [x] Finish up 'Changelog entry for v0.3.1' Pull Request (#1047):
      • [x] Add a new entry in doc/_static/version_switch.js for documentation switcher
      • [x] Update citation information https://github.com/GenericMappingTools/pygmt#citing-pygmt
      • [x] Add the documentation link https://github.com/GenericMappingTools/pygmt#documentation-for-other-versions
      • [x] Add compatibility information https://github.com/GenericMappingTools/pygmt#compatibility-with-python-and-gmt-versions
      • [x] Copy draft changelog from Release Drafter and edit it to look nice

    Release:

    • [x] At the PyGMT release page on GitHub:
      • [x] Edit the draft release notes with the finalized changelog
      • [x] Set the tag version and release title to v0.3.1
      • [x] Make a release by clicking the 'Publish Release' button, this will automatically create a tag too
    • [x] Manually upload the pygmt-v0.3.1.zip file to https://zenodo.org/deposit, ensure that it is filed under the correct reserved DOI

    After release:

    • [x] Update conda-forge pygmt-feedstock [Usually done automatically by conda-forge's bot]
    • [x] Bump PyGMT version on https://github.com/GenericMappingTools/try-gmt
    • [x] Announce the release on:

    • [x] Party :tada: (don't tick before all other checkboxes are ticked!)
    maintenance 
    opened by willschlitzer 41
  • Change main branch from

    Change main branch from "master" to "main"

    In the interest of inclusivity, should we change the main git branch from master to main? This would be in line with changes to large Python repos, including CPython, Numpy, Flask, and Django, as well as the default main branch for all new GitHub repos.

    Are you willing to help implement and maintain this feature? Yes

    maintenance 
    opened by willschlitzer 36
  • Release PyGMT v0.3.0

    Release PyGMT v0.3.0

    Release: v0.3.0 Scheduled Date: 2021/02/15 Pull request due date: 2021/02/13

    Priority PRs/issues to complete prior to release

    • [x] Wrap subplot (#822)
    • [x] Wrap grd2cpt (#803)
    • [x] Wrap grdinfo aliases (#799)
    • [x] Move plotting functions to separate modules (#808)
    • [x] Add affiliation and ORCID to AUTHORS.md (#857)
    • [x] Fail to install the dev version following the install instructions (#856)

    Before release:

    • [x] Reserve a DOI on Zenodo by clicking on "New Version" (@weiji14)
    • [x] Update Changelog (#887) (@willschlitzer)
    • [x] Add a new entry in doc/_static/version_switch.js for documentation switcher
    • [x] Update citation information https://github.com/GenericMappingTools/pygmt#citing-pygmt

    Release:

    • [x] Go to GitHub Release and make a release, this will automatically create a tag too (@willschlitzer)
    • [x] Manually upload the pygmt-vX.Y.Z.zip file to https://zenodo.org/deposit, make sure you file it under the correct reserved DOI (@weiji14)

    After release:

    • [x] Update conda-forge pygmt-feedstock [Usually done automatically by conda-forge's bot] (https://github.com/conda-forge/pygmt-feedstock/pull/14)
    • [x] Bump PyGMT version on https://github.com/GenericMappingTools/try-gmt (@seisman) (https://github.com/GenericMappingTools/try-gmt/commit/bd8090ce9fe07c6a083cfacfe5ae0e0a9a77b4a1)
    • [x] Announce the release on:
      • [x] GMT forum (https://forum.generic-mapping-tools.org/t/pygmt-v0-3-0-released)
      • [x] GMT website (News) (@michaelgrund) (https://github.com/GenericMappingTools/website/pull/95)
      • [x] ResearchGate link
      • ~~Twitter~~ (feel free to tweet the release anyone!)

    • [x] Party :tada: (don't tick before all other checkboxes are ticked!)
    maintenance 
    opened by willschlitzer 32
  • Bump to GMT 6.2.0rc1

    Bump to GMT 6.2.0rc1

    The first release candidate of GMT 6.2.0 has been released (https://github.com/GenericMappingTools/gmt/releases/tag/6.2.0rc1) today.

    Now GMT 6.2.0rc1 is available in the devel channel on conda-forge (https://anaconda.org/conda-forge/gmt/) and can be installed using:

    conda install -c conda-forge/label/dev gmt=6.2.0rc1
    

    We need to:

    • [x] Bump the GMT version to 6.2.0rc1 used in the CI tests (#1218)
    • [ ] Some tests fail and we need to fix them
    • [ ] Add some new tests for upstream bugs that were fixed in 6.2.0rc1
    help wanted maintenance 
    opened by seisman 30
  • Wrap velo

    Wrap velo

    Adding the velo function! Original GMT velo function can be found at https://docs.generic-mapping-tools.org/latest/supplements/geodesy/velo.html.

    Live documentation preview: https://pygmt-git-fork-lhoupert-add-velo-gmt.vercel.app/api/generated/pygmt.Figure.velo.html Gallery example preview: https://pygmt-git-fork-lhoupert-add-velo-gmt.vercel.app/gallery/seismology/velo_arrow_ellipse.html

    I followed advice from @weiji14 [see the feature request I opened here]. I implemented the function by mostly copy-modify-pasted from plot and edited the doc string. The options for velo are quite different from plot so most of the parameters were changed.

    Problems encountered I need help to understand how pygmt is handling the dataframe data. The gmt velo function requires the argument table (One or more ASCII (or binary, see -bi[ncols][type]) data table file(s) holding a number of data columns. If no tables are given then we read from standard input.). My opinion is that in pygmt, Figure.velo should reads data values from files, numpy array or panda dataframe.

    Can someone help to figure out what should be the pygmt code to run the gmt example given at the end of my request?

    I converted the table from standard input into a panda dataframe:

    data={'Long.': {0: 0, 1: -8, 2: 0, 3: -5, 4: 5, 5: 0}, 
        ...:  'Lat.': {0: -8, 1: 5, 2: 0, 3: -5, 4: 0, 5: -5}, 
        ...:  'Evel': {0: 0, 1: 3, 2: 4, 3: 6, 4: -6, 5: 6}, 
        ...:  'Nvel': {0: 0, 1: 3, 2: 6, 3: 4, 4: 4, 5: -4}, 
        ...:  'Esig': {0: 4, 1: 0, 2: 4, 3: 6, 4: 6, 5: 6}, 
        ...:  'Nsig': {0: 6, 1: 0, 2: 6, 3: 4, 4: 4, 5: 4}, 
        ...:  'CorEN': {0: 0.5, 1: 0.5, 2: 0.5, 3: 0.5, 4: -0.5, 5: -0.5}, 
        ...:  'SITE': {0: '4x6', 1: '3x3', 2: 'NaN', 3: '6x4', 4: '-6x4', 5: '6x-4'}}  
    
    df1 = pd.DataFrame(data)
    

    Original GMT example for velo (more details here) The following should make big red arrows with green ellipses outlined in red. Note that the 39% confidence scaling will give an ellipse which fits inside a rectangle of dimension Esig by Nsig.

    gmt psvelo << END -h2 -R-10/10/-10/10 -W0.25p,red -Ggreen -L -Se0.2/0.39/18 \
        -B1g1 -Jx0.4/0.4 -A0.3p -P -V > test.ps
    #Long. Lat. Evel Nvel Esig Nsig CorEN SITE
    #(deg) (deg) (mm/yr) (mm/yr)
    0. -8. 0.0 0.0 4.0 6.0 0.500 4x6
    -8. 5. 3.0 3.0 0.0 0.0 0.500 3x3
    0. 0. 4.0 6.0 4.0 6.0 0.500
    -5. -5. 6.0 4.0 6.0 4.0 0.500 6x4
    5. 0. -6.0 4.0 6.0 4.0 -0.500 -6x4
    0. -5. 6.0 -4.0 6.0 4.0 -0.500 6x-4
    END
    

    test2

    Fixes #510

    feature 
    opened by lhoupert 30
  • Passing xarray.DataArray to grdfilter gives incorrect results

    Passing xarray.DataArray to grdfilter gives incorrect results

    Description of the problem

    Here is the result from GMT CLI. From the output, we can know the min and max of the filtered grid, -6147.49072266 and 5164.06005859.

    $ gmt grdfilter @earth_relief_01d_p -Fg600 -D4 -Goutput.nc
    $ gmt grdinfo -C output.nc
    output.nc	-180	180	-90	90	-6147.49072266	5164.06005859	1	1	360	180	1	1
    

    This is how we do the same thing in Python:

    from pygmt import grdfilter
    from pygmt.datasets import load_earth_relief
    
    # passing a grid file
    result1 = grdfilter("@earth_relief_01d_p", filter="g600", distance="4")
    print("result1:", result1.data.min(), result1.data.max())
    
    # passing a xarray.DataArray
    grid = load_earth_relief(resolution="01d", registration="pixel")
    result2 = grdfilter(grid=grid, filter="g600", distance="4")
    print("result2:", result2.data.min(), result2.data.max())
    

    The output is:

    result1: -6147.4907 5164.06
    result2: -6147.4727 5164.1157
    

    Obviously, passing xarray.DataArray to grdfilter gives incorrect results.

    It's still unclear to me if this is a PyGMT bug or an upstream GMT bug.

    Note: the tests in test_grdfilter.py is testing the "wrong" results. We need to update the tests after figuring out the reason.

    bug upstream 
    opened by seisman 29
  • Improve PyGMT documentation

    Improve PyGMT documentation

    We have to decide whether we want to add quotes to all arguments, e.g., '05m' or 05m. Originally posted in https://github.com/GenericMappingTools/pygmt/pull/976#discussion_r584484932.

    We use quotes for many arguments, e.g., https://github.com/GenericMappingTools/pygmt/blob/afe9293d8d6705587be9982909820d9ebf5e75eb/pygmt/datasets/earth_relief.py#L34-L39

    Meanwhile, we don't use quotes in some cases, e.g., https://github.com/GenericMappingTools/pygmt/blob/afe9293d8d6705587be9982909820d9ebf5e75eb/pygmt/datasets/earth_relief.py#L44-L45

    We could refer to other projects posted in https://github.com/GenericMappingTools/pygmt/pull/976#discussion_r584759875

    Just checked other projects, numpy (https://numpy.org/doc/stable/reference/generated/numpy.datetime_as_string.html#numpy.datetime_as_string), pandas (https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html) and matplotlib (https://matplotlib.org/stable/api/legend_api.html) use 'string', not 'string'.

    documentation 
    opened by core-man 28
  • Wrap solar

    Wrap solar

    Description of proposed changes

    Wrap the GMT module solar.

    Reminders

    • [x] Run make format and make check to make sure the code follows the style guide.
    • [x] Add tests for new features or tests that would have caught the bug that you're fixing.
    • [x] Add new public functions/methods/classes to doc/api/index.rst.
    • [x] Write detailed docstrings for all functions/methods.
    • [x] If adding new functionality, add an example to docstrings or tutorials.

    Notes

    • You can write /format in the first line of a comment to lint the code automatically
    feature 
    opened by willschlitzer 28
  • Update the docstrings in the plotting modules

    Update the docstrings in the plotting modules

    Description of proposed changes

    Update the docstrings of aliases following the convention in #631.

    To do:

    • [ ] Update docstrings for data modules
    • [ ] Format docstrings as raw strings

    Reminders

    • [ ] Run make format and make check to make sure the code follows the style guide.
    • [ ] Add tests for new features or tests that would have caught the bug that you're fixing.
    • [ ] Add new public functions/methods/classes to doc/api/index.rst.
    • [ ] Write detailed docstrings for all functions/methods.
    • [ ] If adding new functionality, add an example to docstrings or tutorials.

    Slash Commands

    You can write slash commands (/command) in the first line of a comment to perform specific operations. Supported slash commands are:

    • /format: automatically format and lint the code
    • /test-gmt-dev: run full tests on the latest GMT development version
    documentation 
    opened by maxrjones 27
  • Initialize data version control for managing test images

    Initialize data version control for managing test images

    Description of proposed changes

    Using a data version control package called dvc to manage the PNG test images in our repository!

    In a nutshell, we will only store the hash of the PNG on GitHub (in a *.png.dvc file) and the actual PNG will be stored at https://dagshub.com/GenericMappingTools/pygmt (see e.g. https://dagshub.com/GenericMappingTools/pygmt/src/data_version_control/pygmt/tests/baseline/test_logo_on_a_map.png).

    image

    List of commands ran so far on this 'data_version_control' branch (will update as I test things out):

    Background (only needed to be done once for this repo)

    Installing DVC for developing PyGMT

    cd ~/path/to/pygmt
    conda activate pygmt
    make install
    pip install dvc
    

    DVC init

    dvc init # creates .dvcignore file and .dvc/ folder
    # remove .dvc/plots folder as won't be used
    # git add only the .dvcignore, .dvc/.gitignore and .dvc/config file
    git add .dvcignore .dvc/.gitignore .dvc/config
    git commit -m "Initialize data version control"
    

    Setup DVC remote

    dvc remote add upstream https://dagshub.com/GenericMappingTools/pygmt.dvc # updates .dvc/config file with remote URL
    dvc remote default upstream  # set default dvc remote to 'upstream'
    

    When a new test is being written (Everyone will need to run)

    DVC remote authentication config (changes .dvc/config.local)

    dvc remote modify upstream --local auth basic
    dvc remote modify upstream --local user "$DAGSHUB_USER"
    dvc remote modify upstream --local password "$DAGSHUB_PASS"  # generate token at https://dagshub.com/user/settings/tokens
    

    Generate new baseline PNG images

    pytest --mpl-generate-path=baseline pygmt/tests/test_logo.py  # generate new baseline images
    mv baseline/*.png pygmt/tests/baseline/
    dvc add pygmt/tests/baseline/test_logo.png pygmt/tests/baseline/test_logo_on_a_map.png
    git rm -r --cached 'pygmt/tests/baseline/test_logo.png'
    git rm -r --cached 'pygmt/tests/baseline/test_logo_on_a_map.png'
    # echo "/test_*.png" > pygmt/tests/baseline/.gitignore
    

    Push images to DVC remote

    dvc add pygmt/tests/baseline/test_logo.png pygmt/tests/baseline/test_logo_on_a_map.png
    git add pygmt/tests/baseline/.gitignore pygmt/tests/baseline/test_*.png.dvc
    git commit -m "Add test_logo_*.png into DVC"
    
    dvc push --remote upstream
    git push
    

    Pull PNG images from DVC remote (needed for Github Actions CI)

    dvc status  # should report any files 'not_in_cache'
    dvc pull  # pull down files from DVC remote cache (fetch + checkout)
    pytest pygmt/tests/test_logo.py  # run pytest as per usual
    

    Note: Some of the dvc commands may not be necessary if we dvc install some git hooks so that dvc add/checkout/push actions happen simply with git add/checkout/push, but need to try this out a bit more. One forseeable con with this solution is that dvc may (?) run even for commits where no PNG images change, so an extra layer of slowness.

    References:

    • https://dvc.org/doc/start/data-versioning
    • https://hackernoon.com/how-to-get-started-with-data-version-control-dvc-nn2n31bo
    • https://dagshub.com/blog/configure-a-dvc-remote-without-a-devops-degree/
    • https://dagshub.com/blog/datasets-should-behave-like-git-repositories/
    • https://dagshub.com/blog/data-version-control-tools/
    • https://dagshub.com/blog/data-science-pull-requests/

    Addresses #963

    Reminders

    • [ ] Run make format and make check to make sure the code follows the style guide.
    • [ ] Add tests for new features or tests that would have caught the bug that you're fixing.
    • [ ] Add new public functions/methods/classes to doc/api/index.rst.
    • [ ] Write detailed docstrings for all functions/methods.
    • [ ] If adding new functionality, add an example to docstrings or tutorials.

    Slash Commands

    You can write slash commands (/command) in the first line of a comment to perform specific operations. Supported slash commands are:

    • /format: automatically format and lint the code
    • /test-gmt-dev: run full tests on the latest GMT development version
    maintenance 
    opened by weiji14 26
  • Exclude an invalid link in the 'Check Links' workflow

    Exclude an invalid link in the 'Check Links' workflow

    Description of proposed changes

    Closes https://github.com/GenericMappingTools/pygmt/issues/2271

    Fixes #

    Reminders

    • [ ] Run make format and make check to make sure the code follows the style guide.
    • [ ] Add tests for new features or tests that would have caught the bug that you're fixing.
    • [ ] Add new public functions/methods/classes to doc/api/index.rst.
    • [ ] Write detailed docstrings for all functions/methods.
    • [ ] If wrapping a new module, open a 'Wrap new GMT module' issue and submit reasonably-sized PRs.
    • [ ] If adding new functionality, add an example to docstrings or tutorials.
    • [ ] Use underscores (not hyphens) in names of Python files and directories.

    Slash Commands

    You can write slash commands (/command) in the first line of a comment to perform specific operations. Supported slash commands are:

    • /format: automatically format and lint the code
    • /test-gmt-dev: run full tests on the latest GMT development version
    maintenance 
    opened by seisman 0
  • Add checking GMT Legacy/Dev Tests to the release checklist

    Add checking GMT Legacy/Dev Tests to the release checklist

    Description of proposed changes

    Related to https://github.com/GenericMappingTools/pygmt/pull/2281#issuecomment-1366768553.

    Reminders

    • [ ] Run make format and make check to make sure the code follows the style guide.
    • [ ] Add tests for new features or tests that would have caught the bug that you're fixing.
    • [ ] Add new public functions/methods/classes to doc/api/index.rst.
    • [ ] Write detailed docstrings for all functions/methods.
    • [ ] If wrapping a new module, open a 'Wrap new GMT module' issue and submit reasonably-sized PRs.
    • [ ] If adding new functionality, add an example to docstrings or tutorials.
    • [ ] Use underscores (not hyphens) in names of Python files and directories.

    Slash Commands

    You can write slash commands (/command) in the first line of a comment to perform specific operations. Supported slash commands are:

    • /format: automatically format and lint the code
    • /test-gmt-dev: run full tests on the latest GMT development version
    maintenance skip-changelog 
    opened by seisman 0
  • Rewrite gallery example

    Rewrite gallery example "track_sampling.py"

    Original posts by @weiji14 (https://github.com/GenericMappingTools/pygmt/pull/2190#pullrequestreview-1231163134) and @seisman (https://github.com/GenericMappingTools/pygmt/pull/2190#issuecomment-1366626976) regarding gallery example track_sampling.py:

    The original intention of the track_sampling.py gallery example added in #308 was to showcase the grdtrack data processing function, rather than as a proper 'map' per se.

    Personally, I feel that having just one colorbar (the normalized elevation one) would be enough, since the background grayscale earth_relief elevation is just for context. But I also find normalized elevation to be hard to interpret (see my comment below), so not sure what's a good plan forward 😅 What are your thoughts?

    Perhaps we can rewrite the grdtrack example to something like (https://docs.gmt-china.org/latest/examples/ex026/): image

    documentation help wanted 
    opened by yvonnefroehlich 0
  • Use plural for units for the other quantities

    Use plural for units for the other quantities

    Description of proposed changes

    This PR is similar to PR #2251 and changes the units for other quanities to plural.

    • [x] documentation
    • [x] datasets
    • [x] tests
    • [x] examples
      • [x] gallery
      • [x] tutorials
      • [x] get started
      • [x] projections

    Reminders

    • [ ] Run make format and make check to make sure the code follows the style guide.
    • [ ] Add tests for new features or tests that would have caught the bug that you're fixing.
    • [ ] Add new public functions/methods/classes to doc/api/index.rst.
    • [ ] Write detailed docstrings for all functions/methods.
    • [ ] If wrapping a new module, open a 'Wrap new GMT module' issue and submit reasonably-sized PRs.
    • [ ] If adding new functionality, add an example to docstrings or tutorials.
    • [ ] Use underscores (not hyphens) in names of Python files and directories.

    Slash Commands

    You can write slash commands (/command) in the first line of a comment to perform specific operations. Supported slash commands are:

    • /format: automatically format and lint the code
    • /test-gmt-dev: run full tests on the latest GMT development version
    documentation skip-changelog needs review 
    opened by yvonnefroehlich 2
  • Need to check if some modules modify the input in an unexpected way

    Need to check if some modules modify the input in an unexpected way

    See https://github.com/GenericMappingTools/gmt/pull/7171 and https://github.com/GenericMappingTools/gmt/pull/7172 for context.

    The PyGMT team may wish to check what other modules modify input. I do not think we will rewrite all modules to internally do this though, in that case simpler to pass the DUPLICATE flag.

    Originally posted by @PaulWessel in https://github.com/GenericMappingTools/gmt/issues/7172#issuecomment-1364653376

    maintenance 
    opened by seisman 0
  • Link Checker Report on 2022-12-25

    Link Checker Report on 2022-12-25

    Summary

    | Status | Count | |---------------|-------| | 🔍 Total | 23182 | | ✅ Successful | 5772 | | ⏳ Timeouts | 3 | | 🔀 Redirected | 0 | | 👻 Excluded | 17405 | | ❓ Unknown | 0 | | 🚫 Errors | 2 |

    Errors per input

    Errors in repository/README.rst

    Errors in repository/.github/ISSUE_TEMPLATE/bump_gmt_checklist.md

    Errors in repository/.github/ISSUE_TEMPLATE/release_checklist.md

    Errors in repository/AUTHORS.md

    Errors in documentation/dev/genindex.html

    Full Github Actions output

    maintenance 
    opened by github-actions[bot] 1
Releases(v0.8.0)
  • v0.8.0(Dec 29, 2022)

    Release v0.8.0 (2022/12/30)

    Digital Object Identifier for PyGMT v0.8.0

    Highlights

    • 🎉 Eighth minor release of PyGMT 🎉
    • Added support for tab auto-completion for all GMT default parameters (#2213)
    • Created functions to download GMT remote datasets (#1786)
    • Wrapped the ternary module (#1431)
    • Added an intro tutorial for creating contour maps (#2126)

    New Features

    • Add load_earth_free_air_anomaly function for Earth free-air anomaly dataset (#2238)
    • Add load_earth_geoid function for Earth Geoid dataset (#2236)
    • Add load_earth_magnetic_anomaly function for Earth magnetic anomaly dataset (#2196, #2239, #2241)
    • Add load_earth_vertical_gravity_gradient function for Earth vertical gravity gradient dataset (#2240)
    • load_earth_relief: Add the support of data sources "gebco" , "gebcosi", and "synbath" (#1818, #2162, #2192, #2281)
    • Wrap ternary (#1431)

    Enhancements

    • Set gridline (if available) as the default grid registration for remote datasets (#2266)
    • Add ternary sample dataset (#2211)
    • Figure.ternary: Add parameters "alabel", "blabel", and "clabel" (#2139)
    • Figure.psconvert: Add a new alias "gs_path" (-G) (#2076)
    • Figure.psconvert: Check if the given prefix is valid (#2170)
    • Figure.savefig: Raise a FileNotFoundError if the parent directory doesn't exist (#2160)
    • Figure.show: Allow keyword arguments passed to Figure.psconvert (#2078)
    • pygmt.config: Support tab auto-completion for all GMT defaults (#2213)
    • Rewrite the meca function to support offsetting and labeling beachballs (#1784)

    Deprecations

    • Deprecate xshift (X) and yshift (Y) aliases from all plotting modules (remove in v0.12.0) (#2071)
    • Figure.plot: Deprecate parameter "color" to "fill" (remove in v0.12.0) (#2177)
    • Figure.plot3d: Deprecate parameter "color" to "fill" (remove in v0.12.0) (#2178)
    • Figure.rose: Deprecate parameter color to fill (remove in v0.12.0) (#2181)
    • Figure.velo: Deprecate parameters "color" to "fill" and "uncertaintycolor" to "uncertaintyfill" (remove in v0.12.0) (#2206)
    • Figure.wiggle: Deprecate parameter "color" (remove in v0.12.0) and add "fillpositive"/"fillnegative" (#2205)
    • Figure.psconvert: Remove the deprecated parameter "icc_gray" (deprecated since v0.6.0) (#2267)
    • Figure.text: Deprecate parameter "incols" to "use_word" (remove in v0.10.0) (#1964)

    Bug Fixes

    • Figure.meca: Fix line and circle of offset parameter for dict/pandas input (#2226)
    • Figure.meca: Fix beachball offsetting with dict/pandas inputs (#2202)
    • Figure.meca: Fix the bug when passing a dict of scalar values to the spec parameter (#2174)
    • Figure.ternary: Fix the crash for pd.DataFrame input with GMT 6.3.0-6.4.0 (#2274)

    Documentation

    • Add intro tutorial section for creating contour map (#2126)
    • Add gallery example for Figure.ternary method (#2138)
    • Add gallery example showing the usage of vertical and horizontal bars (#1521)
    • Add inline example for coast (#2142)
    • Add inline example for grdcontour (#2148)
    • Add inline example for grdimage (#2146)
    • Add inline example for grd2cpt (#2145)
    • Add inline example for solar (#2147)
    • Add SciPy 2022 talk to presentations (#2053)
    • Add instructions to install pygmt kernel for Jupyter users (#2153)
    • Improve instructions about setting GMT_LIBRARY_PATH env variable (#2136)
    • Add badges for conda package version, license, and twitter (#2081)
    • Add PyOpenSci peer reviewed badge to main README.rst (#2112)

    Maintenance

    • Add an internal function to load GMT remote datasets (#2200)
    • Add support for Python 3.11 (#2172)
    • NEP29: Test PyGMT on NumPy 1.24 (#2256)
    • NEP29: Test PyGMT on NumPy 1.23 and 1.21 (#2057)
    • Bump the GMT version in CI to 6.4.0 (#1990)
    • Update baseline images for GMT 6.4.0 (#1883)
    • Migrate Continuous Documentation from Vercel to Readthedocs (#1859)
    • Set nested_sections to False for Sphinx-Gallery 0.11.0 regarding a correct navgation bar (#2046)
    • Convert bug report, feature, and module request issue templates into yaml configured forms (#2091, #2214, #2216)
    • doc: Set different html_baseurl for stable and dev versions (#2158)
    • Update the instructions for checking README syntax (#2265)
    • Use longname placeholders in the docstrings for common options (#1932)
    • Add optional dependencies to pyproject.toml (#2069)
    • Migrate project metadata from setup.py to pyproject.toml following PEP621 (#1848)
    • Move blackdoc options to pyproject.toml (#2093)
    • Move docformatter options from Makefile to pyproject.toml (#2072)
    • Replace flake8 with flakeheaven (#1847)
    • Add a workflow and Makefile target to test old GMT versions every Tuesday (#2079)
    • Check if a module outputs to a temporary file using "Path().stat().st_size > 0" (#2224)
    • pygmt.show_versions: Show GMT binary version and hide the Python interpreter path (#1838)
    • Refactor grdview and grdimage to use virtualfile_from_data (#1988)
    • Use the org-wide code of conduct (#2020)

    Contributors

    Source code(tar.gz)
    Source code(zip)
    baseline-images.zip(4.43 MB)
  • v0.7.0(Jul 2, 2022)

    Release v0.7.0 (2022/07/01)

    Digital Object Identifier for PyGMT v0.7.0

    Highlights

    • 🎉 Seventh minor release of PyGMT 🎉
    • Wrapped 3 GMT modules
    • Added two new PyGMT tutorials and EGU 2022 short course to external resources page (#1971 and #1935)

    New Features

    Enhancements

    • Support passing data in NumPy int8, int16, uint8 and uint16 dtypes to GMT (#1963)
    • inset: Add region and projection aliases and fix two examples (#1931)
    • basemap: Plotting frames if required parameters are not given (#1909)
    • basemap: Added box alias for F (#1894)
    • Add a sample dataset maunaLoa_co2 (#1961)
    • Add a sample dataset notre_dame_topography (#1920)
    • Add a sample dataset earth_relief_holes (#1921)

    Deprecations

    • NEP29: Set minimum required version to NumPy 1.20+ (#1985)
    • Figure.wiggle: Remove parameter 'columns', use 'incols' instead. (#1977)
    • Figure.histogram and pygmt.info: Remove parameter 'table', use 'data' instead (#1975)
    • pygmt.surface: Remove parameter 'outfile', use 'outgrid' instead (#1976)
    • blockm/contour/plot/plot3d/rose/surface/wiggle: Change the parameter order of data array and input arrays (#1978)

    Bug Fixes

    • grdtrack: Fix the bug when profile is given (#1867)
    • Fix the grid accessor (grid registration and type) for 3D grids (#1913)

    Documentation

    • Add instructions to install PyGMT using mamba (#1967)
    • Improve two gallery examples regarding categorical colormaps (#1934)
    • Add inline example to dimfilter (#1956)
    • Add inline example to surface (#1953)
    • Add inline example to grdfill (#1954)
    • Add inline code examples to contributing guidelines (#1924)
    • Add thumbnail images to the external resources page (#1941)
    • Redesign the team gallery using sphinx-design's card directive (#1937)

    Maintenance

    • Fix broken 'Improve this page' links using sphinx variable page_source_suffix (#1969)
    • Split up functions for loading datasets (#1955)
    • Set setuptools_scm fallback_version to follow PEP440 (#1945)
    • Refactor text to use virtualfile_from_data (#1121)
    • Run full tests only on Wednesday scheduled jobs (#1833)
    • Run GMT Dev Tests on Monday, Wednesday and Friday only (#1922)
    • Update GMT Dev Tests workflow to test on macOS-12 and ubuntu-22.04 (#1918)

    Contributors

    Source code(tar.gz)
    Source code(zip)
    baseline-images.zip(4.25 MB)
  • v0.6.1(Apr 11, 2022)

    Release v0.6.1 (2022/04/11)

    Digital Object Identifier for PyGMT v0.6.1

    Highlights

    • Patch release which allows passing None explicitly to pygmt functions (#1872, #1862, #1857, #1815)
    • A new tutorial for grdhisteq (#1821)

    Bug Fixes

    • Fix pathlib support for plot and plot3d (#1831)

    Documentation

    • Add inline example for grdvolume (#1726)
    • Format author affiliations in CITATION.cff and AUTHORS.md (#1844)

    Maintenance

    • NEP29: Run PyGMT tests and docs build on Python 3.10 (#1868)
    • Let pygmt.show_versions() report geopandas version (#1846)
    • Refactor build_arg_string to also deal with infile and outfile (#1837)
    • Migrate build system settings to pyproject.toml following pep517 and pep518 (#1845)
    • Use the build package to build sdist and wheel distributions (#1823)
    • Let slash command /test-gmt-dev report job URL (#1866)

    Contributors

    Source code(tar.gz)
    Source code(zip)
    baseline-images.zip(4.25 MB)
  • v0.6.0(Mar 14, 2022)

    Release v0.6.0 (2022/03/14)

    Digital Object Identifier for PyGMT v0.6.0

    Highlights

    • 🎉 Sixth minor release of PyGMT 🎉
    • New inline examples for 14 functions!
    • Single pygmt.datasets.load_sample_data function for loading any sample dataset (#1685)
    • Minimum required GMT version is now 6.3.0 (#1649)

    New Features

    • Wrap triangulate (#731)
    • Wrap grdhisteq (#1433)

    Enhancements

    • Add alias for blockmean's -S parameter (#1601)
    • Allow users to set the waiting time when displaying a preview image using an external viewer (#1618)
    • Raise an exception if the given parameter is not recognized and is longer than 2 characters (#1792)

    Deprecations

    • Figure.plot/plot3d: Remove parameter "sizes", use "size" instead (#1809)
    • Figure.contour/plot/plot3d/rose: Remove parameter "columns", use "incols" instead (#1806)
    • Figure.psconvert: Add new aliases and deprecate parameter "icc_gray" (remove in v0.8.0) (#1673)
    • NEP29: Set minimum required version to Python 3.8+ (#1676)
    • NEP29: Set minimum required version to NumPy 1.19+ (#1675)

    Bug Fixes

    • Allow passing arguments containing spaces into pygmt functions (#1487)
    • Fix the spacing parameter processing for many modules (#1805)
    • Fix missing gcmt convention keys in pygmt.meca (#1611)
    • Fix the spacing parameter and check required parameters in xyz2grd (#1804)
    • Fix UnicodeDecodeError with shapefiles for plot and plot3d (#1695)

    Documentation

    • Add a shorter video introduction to the home page (#1769)
    • Add Liam's 2021 ROSES video to learning resources (#1760)
    • Add quick conda install instructions in main README (#1717)
    • Add instructions for reporting upstream bugs to contributing.md (#1610)
    • List key development dependencies to install for new contributors (#1783)
    • Update Code of Conduct to v2.1 (#1754)
    • Update the contributing guide about pushing changes to dvc and git (#1776)
    • Update dataset links to the new remote-datasets site (#1785)
    • Add more sections to the API docs (#1643)
    • Add an "add a title" to starter tutorial (#1688)
    • Reorganize tutorial section in the documentation sidebar (#1603)
    • Update the starter tutorial introduction (#1607)
    • Add gallery example to showcase blockmean (#1598)
    • Add gallery example to showcase project (#1696)
    • Update text symbol gallery example (#1648)
    • Add inline example for blockmean (#1729)
    • Add inline example for blockmedian (#1730)
    • Add inline example for blockmode (#1731)
    • Add inline example for grd2xyz (#1713)
    • Add inline example for grdclip (#1711)
    • Add inline example for grdcut (#1689)
    • Add inline example for grdgradient (#1720)
    • Add inline example for grdlandmask (#1721)
    • Add inline example for grdproject (#1722)
    • Add inline example for grdsample (#1724)
    • Add inline example for grdtrack (#1725)
    • Add inline example for select (#1756)
    • Add inline example for sph2grd (#1718)
    • Add inline example for xyz2grd (#1719)

    Maintenance

    • Add a test to make sure the incols parameter works for pandas.DataFrame (#1771)
    • Add load_static_earth_relief function for internal testing (#1727)
    • Migrate pylint settings from .pylintrc to pyproject.toml (#1755)
    • NEP29: Test PyGMT on NumPy 1.22 (#1701)
    • Replace pkg_resources with importlib.metadata (#1674)
    • Update deprecated -g common option syntax (#1670)
    • Update deprecated -JG syntax (#1659)
    • Use pytest-doctestplus to skip some inline doctests (#1790)
    • Use Python 3.10 in Continuous Integration tests (#1577)

    Contributors

    Source code(tar.gz)
    Source code(zip)
    baseline-images.zip(4.25 MB)
  • v0.5.0(Oct 29, 2021)

    Release v0.5.0 (2021/10/29)

    Digital Object Identifier for PyGMT v0.5.0

    Highlights

    • 🎉 Fifth minor release of PyGMT 🎉
    • Wrapped 12 GMT modules
    • Standardized and reorder table inputs to be 'data, x, y, z' across functions (#1479)
    • Added a gallery example showing usage of line objects from a geopandas.GeoDataFrame (#1474)

    New Features

    • Wrap blockmode (#1456)
    • Wrap gmtselect (#1429)
    • Wrap grd2xyz (#1284)
    • Wrap grdproject (#1377)
    • Wrap grdsample (#1380)
    • Wrap grdvolume (#1299)
    • Wrap nearneighbor (#1379)
    • Wrap project (#1122)
    • Wrap sph2grd (#1434)
    • Wrap sphdistance (#1383)
    • Wrap sphinterpolate (#1418)
    • Wrap xyz2grd (#636)
    • Add function to import seafloor crustal age dataset (#1471)
    • Add pygmt.load_dataarray function (#1439)

    Enhancements

    • Expand table-like input options for Figure.contour (#1531)
    • Expand table-like input options for pygmt.surface (#1455)
    • Raise GMTInvalidInput exception when required z is missing (#1478)
    • Add support for passing pathlib.Path objects as filenames (#1382)
    • Allow passing a list to the 'incols' parameter for blockm, grdtrack and text (#1475)
    • Plot square or cube by default for OGR/GMT files with Point/MultiPoint types (#1438)
    • Plot square or cube by default for geopandas Point/MultiPoint types (#1405)
    • Add area_thresh to COMMON_OPTIONS (#1426)
    • Add function to import Mars dataset (#1420)
    • Add function to import hotspot dataset (#1386)

    Deprecations

    • pygmt.blockm*: Reorder input parameters to 'data, x, y, z' (#1565)
    • pygmt.surface: Reorder input parameters to 'data, x, y, z' (#1562)
    • Figure.contour: Reorder input parameters to 'data, x, y, z' (#1561)
    • Figure.plot3d: Reorder input parameters to 'data, x, y, z' (#1560)
    • Figure.plot: Reorder input parameters to "data, x, y" (#1547)
    • Figure.rose: Reorder input parameters to 'data, length, azimuth' (#1546)
    • Figure.wiggle: Reorder input parameter to 'data, x, y, z' (#1548)
    • Figure.histogram: Deprecate parameter "table" to "data" (remove in v0.7.0) (#1540)
    • pygmt.info: Deprecate parameter "table" to "data" (remove in v0.7.0) (#1538)
    • Figure.wiggle: Deprecate parameter "columns" to "incols" (remove in v0.7.0) (#1504)
    • pygmt.surface: Deprecate parameter "outfile" to "outgrid" (remove in v0.7.0) (#1458)
    • NEP29: Set minimum required version to NumPy 1.18+ (#1430)

    Bug Fixes

    • Allow GMTDataArrayAccessor to work on sliced datacubes (#1581)
    • Allow non-string color when input data is a matrix or a file for plot and plot3d (#1526)
    • Raise RuntimeWarning instead of an exception for irregular grid spacing (#1530)
    • Raise an error for zero increment grid (#1484)

    Documentation

    • Add CITATION.cff file for PyGMT (#1592)
    • Update region and projection standard docstrings (#1510)
    • Document gmtwhich -Ga option to download to appropriate cache folder (#1554)
    • Add gallery example showing the usage of text symbols (#1522)
    • Add gallery example for grdgradient (#1428)
    • Add gallery example for grdlandmask (#1469)
    • Add missing aliases to pygmt.grdgradient (#1515)
    • Add missing aliases to pygmt.sphdistance (#1516)
    • Add missing aliases to pygmt.blockmean and pygmt.blockmedian (#1500)
    • Add missing aliases to pygmt.Figure.wiggle (#1498)
    • Add missing aliases to pygmt.Figure.velo (#1497)
    • Add missing aliases to pygmt.surface (#1501)
    • Add missing aliases to pygmt.Figure.plot3d (#1503)
    • Add missing aliases to pygmt.grdlandmask (#1423)
    • Add missing aliases to pygmt.grdtrack (#1499)
    • Add missing aliases to pygmt.Figure.plot (#1502)
    • Add missing aliases to pygmt.Figure.text (#1448)
    • Add missing aliases to pygmt.Figure.histogram (#1451)
    • Add missing alias to pygmt.Figure.legend (#1453)
    • Add missing aliases to pygmt.Figure.rose (#1452)
    • Add missing alias to pygmt.Figure.grdview (#1450)
    • Add missing aliases to pygmt.Figure.image.py (#1449)
    • Add missing common options to contour (#1446)
    • Add missing 'incols' alias to info (#1476)

    Maintenance

    • Add support for Python 3.10 (#1591)
    • Make IPython partially optional on CI to increase test coverage of figure.py (#1496)
    • Use mamba to install Continuous Integration dependencies (#841)
    • Remove deprecated codecov dependency from CI (#1494)
    • Add the use of Flake8 to check examples and fix warnings (#1477)

    Contributors

    Source code(tar.gz)
    Source code(zip)
    baseline-images.zip(5.16 MB)
  • v0.4.1(Aug 7, 2021)

    Release v0.4.1 (2021/08/07)

    Digital Object Identifier for PyGMT v0.4.1

    Highlights

    • 🎉 Patch release with multiple gallery examples 🎉
    • Change default GitHub branch name from "master" to "main" to increase inclusivity (#1360)
    • Add a "PyGMT Team" page (#1308)

    Enhancements

    • Add common alias "verbose" (V) to grdlandmask and savefig (#1343)

    Bug Fixes

    • Change invalid input conditions in grdtrack (#1376)
    • Fix bug so that x2sys_cross accepts dataframes with NaN values (#1369)

    Documentation

    • Combine documentation and compatibility sections in README.rst (#1415)
    • Add a gallery example for grdclip (#1396)
    • Add a gallery example for different colormaps in subplots (#1394)
    • Add a gallery example for the contour method (#1387)
    • Add a gallery example showing individual custom symbols (#1348)
    • Add common option aliases to COMMON_OPTIONS in decorators.py (#1407)
    • Add return statement to grdclip and grdgradient docstring (#1390)
    • Restructure contributing.md to separate docs/general info from contributing code section (#1339)

    Maintenance

    • Add tomli as a dependency in GMT Dev Tests (#1401)
    • NEP29: Test PyGMT on NumPy 1.21 (#1355)

    Contributors

    Source code(tar.gz)
    Source code(zip)
    baseline-images.zip(5.10 MB)
  • v0.4.0(Jun 20, 2021)

    Release v0.4.0 (2021/06/20)

    Digital Object Identifier for PyGMT v0.4.0

    Highlights

    • 🎉 Fourth minor release of PyGMT 🎉
    • Add tutorials for datetime data (#1193) and plotting vectors (#1070)
    • Support tab auto-completion in Jupyter (#1282)
    • Minimum required GMT version is now 6.2.0 or newer (#1321)

    New Features

    • Wrap blockmean (#1092)
    • Wrap grdclip (#1261)
    • Wrap grdfill (#1276)
    • Wrap grdgradient (#1269)
    • Wrap grdlandmask (#1273)
    • Wrap histogram (#1072)
    • Wrap rose (#794)
    • Wrap solar (#804)
    • Wrap velo (#525)
    • Wrap wiggle (#1145)
    • Add new function to load fractures sample data (#1101)
    • Allow load_earth_relief() to load the original land-only 01s or 03s SRTM tiles (#976)
    • Handle geopandas and shapely geometries via geo_interface link (#1000)
    • Support passing string type numbers, geographic coordinates and datetimes (#975)

    Enhancements

    • Allow passing an array as intensity for plot3d (#1109)
    • Allow passing an array as intensity for plot (#1065)
    • Allow passing xr.DataArray as shading to grdimage (#750)
    • Allow x/y/z input for blockmedian and blockmean (#1319)
    • Allow pygmt.which to accept a list of filenames as input (#1312)
    • Refactor blockm* to use virtualfile_from_data and improve i/o (#1280)
    • Refactor grdtrack to use virtualfile_from_data and improve i/o to pandas.DataFrame (#1189)
    • Add parameters to histogram (#1249)
    • Add alias 'aspatial' to methods blockmedian, info, plot, plot3d, surface (#1090)
    • Add alias 'registration' to methods blockmean, info, grdfilter, surface (#1089)
    • Add incols to COMMON_OPTIONS, blockmean, and blockmedian (#1300)
    • Improve Figure.show for displaying previews in Jupyter notebooks and external viewers (#529)
    • Let Figure.savefig recommend .eps or .pdf when .ps extension is used (#1307)

    Deprecations

    • Figure.contour: Deprecate parameter "columns" to "incols" (remove in v0.6.0) (#1303)
    • Figure.plot: Deprecate parameter "sizes" to "size" (remove in v0.6.0) (#1254)
    • Figure.plot: Deprecate parameter "columns" to "incols" (remove in v0.6.0) (#1298)
    • Figure.plot3d: Deprecate parameter "sizes" to "size" (remove in v0.6.0) (#1258)
    • Figure.plot3d: Deprecate parameter "columns" to "incols" (remove in v0.6.0) (#1040)
    • Figure.rose: Deprecate parameter "columns" to "incols" (remove in v0.6.0) (#1306)
    • NEP29: Set minimum required versions to NumPy 1.17+ and Python 3.7+ (#1074)
    • Raise a warning for the use of short-form parameters when long-forms are available (#1316)

    Bug Fixes

    • Allow pandas.Series inputs to fig.histogram and pygmt.info (#1329)
    • Explicitly use netcdf4 engine in xarray.open_dataarray to read grd files (#1264)
    • Let Figure.savefig support filenames with spaces (#1116)
    • Let Figure.show(method='external') work well in Python scripts (#1062)

    Documentation

    • Add histogram gallery example (#1272)
    • Add a gallery example showing individual basic geometric symbols (#1211)
    • Specify rectangle's width and height via style parameter in multi-parameter symbols example (#1325)
    • Update the inset gallery example (#1287)
    • Add categorical colorbars for plot, plot3d and line colors gallery examples (#1267)
    • Apply NIST SI unit convention to some gallery examples (#1194)
    • Use colorblind-friendly colors in the scatter plots gallery example (#1013)
    • Added documentation for three oblique mercator projections (#1251)
    • Add a list of external PyGMT resources (#1210)
    • Complete documentation for grdtrack (#1190)
    • Add projection and region to grdview docstring (#1295)
    • Add common alias spacing (-I) for specifying grid increments (#1288)
    • Standardize docstrings for table-like inputs (#1186)
    • Clarify that the "transparency" parameter in plot/plot3d/text can be 1d array (#1265)
    • Clarify that the "color" parameter in plot/plot3d can be 1d array (#1260)
    • Clarify interplay of spacing and per_column in info (#1127)
    • Remove the "full test" section from installation guide (#1206)
    • Clarify position of deprecate_parameter decorator to be above use_alias (#1302)
    • Add guidelines for managing issues to maintenance.md (#1301)
    • Add alias name convention to CONTRIBUTING.md (#1256)
    • Move contributing guide details to website and rename two sections (#1335)
    • Update the check_figures_equal testing section in CONTRIBUTING.md (#1108)
    • Revise Pull Request review process in CONTRIBUTING.md (#1119)

    Maintenance

    • Add a workflow to upload baseline images as a release asset (#1317)
    • Add regression test for grdimage plotting an xarray.DataArray grid subset (#1314)
    • Add download_test_data to download data files used in tests (#1310)
    • Remove xfails and workarounds for datetime inputs into pygmt.info (#1236)
    • Improve the DVC image diff workflow to support side-by-side comparison of modified images (#1219)
    • Document the deprecation policy and add the deprecate_parameter decorator to deprecate parameters (#1160)
    • Convert booleans arguments in build_arg_string, not in kwargs_to_strings (#1125)
    • Create Github Action workflow for reporting DVC image diffs (#1104)
    • Update "GMT Dev Tests" workflow to test macOS-11.0 and pre-release Python packages (#1105)
    • Initialize data version control for managing test images (#1036)
    • Separate workflows for running tests and building documentation (#1033)

    Contributors

    Source code(tar.gz)
    Source code(zip)
    baseline-images.zip(5.10 MB)
  • v0.3.1(Mar 14, 2021)

    Release v0.3.1 (2021/03/14)

    Digital Object Identifier for PyGMT v0.3.1

    Highlights

    • 🎉 Multiple bug fixes and an improved gallery 🎉
    • Reorganized gallery examples into new categories (#995)
    • Added gallery examples for plotting vectors (#950, #890)
    • Last version to support GMT 6.1.1, future PyGMT versions will require GMT 6.2.0 or newer

    Enhancements

    • Support passing a sequence to the spacing parameter of pygmt.info() (#1031)

    Bug Fixes

    • Fix issues in loading GMT's shared library (#977)
    • Let pygmt.info load datetime columns into a str dtype array (#960)
    • Check invalid combinations of resolution and registration in load_earth_relief() (#965)
    • Open figures using the associated application on Windows (#952)
    • Fix bug that stops Figure.coast from plotting with only dcw parameter (#910)

    Documentation

    • Add a gallery example showing different line front styles (#1022)
    • Add a gallery example for a double y-axes graph (#1019)
    • Add a gallery example of inset map showing a rectangle region (#1020)
    • Add a gallery example to show coloring of points by categories (#1006)
    • Add gallery example showing different polar projection use cases (#955)
    • Add underscore guideline to CONTRIBUTING.md (#1034)
    • Add instructions to upgrade installed PyGMT version (#1029)
    • Improve the docstring of the pygmt package (#1016)
    • Add common alias coltypes (-f) for specifying i/o data types (#994)
    • Expand documentation linking in CONTRIBUTING.md (#802)
    • Write changelog in markdown using MyST (#941)
    • Update web font to Atkinson Hyperlegible (#938)
    • Improve the gallery example for datetime inputs (#919)

    Maintenance

    • Refactor plot and plot3d to use virtualfile_from_data (#990)
    • Explicitly exclude unnecessary files in source distributions (#999)
    • Refactor grd modules to use virtualfile_from_data (#992)
    • Refactor info and grdinfo to use virtualfile_from_data (#961)
    • Onboarding maintainer checklist (#773)
    • Add comprehensive tests for pygmt.clib.loading.clib_full_names (#872)
    • Add a workflow checking links in plaintext and HTML files (#634)
    • Remove nbsphinx extension (#931)
    • Improve the error message for loading an old version of the GMT library (#925)
    • Move requirements-dev.txt dependencies to environment.yml (#812)
    • Ensure proper non-dev version string when publishing to PyPI (#900)
    • Run tests in a single CI job (Ubuntu + Python 3.9) for draft PRs (#906)

    Contributors

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Feb 15, 2021)

    DOI

    Highlights

    • 🎉 Third minor release of PyGMT 🎉
    • Wrap inset (#788) for making overview maps and subplot (#822) for multi-panel figures
    • Apply standardized formatting conventions (#775) across most documentation pages
    • Drop Python 3.6 support (#699) so PyGMT now requires Python 3.7 or newer

    New Features

    • Wrap grd2cpt (#803)
    • Let Figure.text support record-by-record transparency (#716)
    • Provide basic support for FreeBSD (#700, #878)

    Enhancements

    • Let load_earth_relief support the 'region' parameter for all resolutions (#873)
    • Improve how PyGMT finds the GMT library (#702)
    • Add common alias panel (-c) to all plotting functions (#853)
    • Add aliases dcw (#765) and lakes (#781) to Figure.coast
    • Add alias shading to Figure.colorbar (#752)
    • Add alias annotation (A) to Figure.contour (#883)
    • Wrap Figure.grdinfo aliases (#799)
    • Add aliases frame and cmap to Figure.colorbar (#709)
    • Add alias frame to Figure.grdview (#707)
    • Improve the error message when PyGMT fails to load the GMT library (#814)
    • Add GMTInvalidInput error to Figure.coast (#787)

    Documentation

    • Add authorship policy (#726)
    • Update PyGMT development installation instructions (#865)
    • Add a tutorial for adding a map title (#720)
    • Add a tutorial for plotting Earth relief (#712)
    • Add a tutorial for 3D perspective image (#743)
    • Add a tutorial for contour maps (#705)
    • Add a tutorial for plotting lines (#741)
    • Add a tutorial for the region argument (#800)
    • Add a gallery example for datetime inputs (#779)
    • Add a gallery example for Figure.logo (#823)
    • Add a gallery example for plotting multi-parameter symbols (#772)
    • Add a gallery example for Figure.image (#777)
    • Add a gallery example for setting line colors with a custom CPT (#774)
    • Add more gallery examples for projections (#761, #721, #757, #723, #762, #742, #728, #727)
    • Update the docstrings in the plotting modules (#881)
    • Update the docstrings in the non-plotting modules (#882)
    • Update Figure.coast docstrings (#798)
    • Update the docstrings of common aliases (#862)
    • Add sphinx-copybutton extension to easily copy codes (#838)
    • Choose the best figures in tutorials for thumbnails (#826)
    • Update axis label explanation in frames tutorial (#820)
    • Add guidelines for types of tests to write (#796)
    • Recommend using SI units in documentation (#795)
    • Add a table for compatibility of PyGMT with Python and GMT (#763)
    • Add description for the "columns" arguments (#766)
    • Add a table of the available projections (#753)
    • Add projection description for Lambert Azimuthal Equal-Area (#760)
    • Change text when GMTInvalidInput error is raised for basemap (#729)

    Bug Fixes

    • Fix a bug of Figure.text when "text" is a non-string array (#724)
    • Fix the error message when IPython is not available (#701)

    Maintenance

    • Add dependabot to keep GitHub Actions up to date (#861)
    • Skip workflows in PRs if only non-source-code files are changed (#839)
    • Add slash command '/test-gmt-dev' to test GMT dev version (#831)
    • Check files for UNIX-style line breaks and 644 permission (#736)
    • Rename vercel configuration file from now.json to vercel.json (#738)
    • Add a CI job testing GMT master branch on Windows (#756)
    • Migrate documentation deployment from Travis CI to GitHub Actions (#713)
    • Move Figure.meca into a standalone module (#686)
    • Move plotting functions to separate modules (#808)
    • Move non-plotting modules to separate modules (#832)
    • Add isort to sort imports alphabetically (#745)
    • Convert relative imports to absolute imports (#754)
    • Switch from versioneer to setuptools-scm (#695)
    • Add docformatter to format plain text in docstrings (#642)
    • Migrate pytest configurations to pyproject.toml (#725)
    • Migrate coverage configurations to pyproject.toml (#667)
    • Show test execution times in pytest (#835)
    • Add tests for grdfilter (#809)
    • Add tests for GMTInvalidInput of Figure.savefig and Figure.show (#810)
    • Add args_in_kwargs function (#791)
    • Add a Makefile target 'distclean' for deleting project metadata files (#744)
    • Add a test for Figure.basemap map_scale (#739)
    • Use args_in_kwargs for Figure.basemap error raising (#797)

    Contributors

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Nov 14, 2020)

    DOI

    Highlights

    • 🎉 Patch release with more tutorials and gallery examples! 🎉
    • 🐍 Support Python 3.9 (#689)
    • 📹 Add Liam’s ROSES 2020 PyGMT talk (#643)

    New Features

    • Wrap plot3d (#471)
    • Wrap grdfilter (#616)

    Enhancements

    • Allow np.object dtypes into virtualfile_from_vectors (#684)
    • Let plot() accept record-by-record transparency (#626)
    • Refactor info to allow datetime inputs from xarray.Dataset and pandas.DataFrame tables (#619)

    Tutorials & Gallery

    • Add tutorial for pygmt.config (#482)
    • Add an example for different line styles (#604, #664)
    • Add a gallery example for varying transparent points (#654)
    • Add tutorial for pygmt.Figure.text (#480)
    • Add an example for scatter plots with auto legends (#607)
    • Improve colorbar gallery example (#596)

    Documentation Improvements

    • doc: Fix the description of grdcontour -G option (#681)
    • Refresh Code of Conduct from v1.4 to v2.0 (#673)
    • Add PyGMT Zenodo BibTeX entry to main README.md (#678)
    • Complete most of documentation for makecpt (#676)
    • Complete documentation for plot (#666)
    • Add “no_clip” to plot, text, contour and meca (#661)
    • Add common alias “verbose” (V) to all functions (#662)
    • Improve documentation of Figure.logo() (#651)
    • Add mini-galleries for methods and functions (#648)
    • Complete documentation of grdimage (#620)
    • Add common alias perspective (p) for plotting 3D illustrations (#627)
    • Add common aliases xshift (X) and yshift (Y) (#624)
    • Add common alias cores (x) for grdimage and other multi-threaded modules (#625)
    • Enable switching different versions of documentation (#621)
    • Add common alias transparency (-t) to all plotting functions (#614)

    Bug Fixes

    • Disallow passing arguments like -XNone to GMT (#639)

    Maintenance

    • Migrate PyPI release to GitHub Actions (#679)
    • Upload artifacts showing diff images on test failure (#675)
    • Add slash command “/format” to automatically format PRs (#646)
    • Add instructions to run specific tests (#660)
    • Add more tests for xarray grid shading (#650)
    • Refactor xfail tests to avoid storing baseline images (#603)
    • Add blackdoc to format Python codes in docstrings (#641)
    • Check and lint sphinx configuration file doc/conf.py (#630)
    • Improve Makefile to clean __pycache__ directory recursively (#611)
    • Update release process and checklist template (#602)

    Contributors

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Sep 12, 2020)

    DOI

    Highlights

    • 🎉 Second minor release of PyGMT 🎉
    • Minimum required GMT version is now 6.1.1 or newer (#577)
    • Plotting xarray grids using grdimage and grdview should not crash anymore and works for most cases (#560)
    • Easier time-series plots with support for datetime-like inputs to plot (#464) and the region argument (#562)

    New Features

    • Wrap GMT_Put_Strings to pass str columns into GMT C API directly (#520)
    • Wrap meca (#516)
    • Wrap x2sys_init and x2sys_cross (#546)
    • Let grdcut() accept xarray.DataArray as input (#541)
    • Initialize a GMTDataArrayAccessor (#500)

    Enhancements

    • Allow passing in pandas dataframes to x2sys_cross (#591)
    • Sensible array outputs for pygmt info (#575)
    • Allow pandas.DataFrame table and 1D/2D numpy array inputs into pygmt.info (#574)
    • Add auto-legend feature to grdcontour and contour (#568)
    • Add common alias verbose (V) (#550)
    • Let load_earth_relief() support all resolutions and optional subregion (#542)
    • Allow load_earth_relief() to load pixel or gridline registered data (#509)

    Documentation

    • Link to try-gmt binder repository (#598)
    • Improve docstring of data_kind() to include xarray grid (#588)
    • Improve the documentation of Figure.shift_origin() (#536)
    • Add shading to grdview gallery example (#506)

    Bug Fixes

    • Ensure surface and grdcut loads GMTDataArray accessor info into xarray (#539)
    • Raise an error if short- and long-form arguments coexist (#537)
    • Fix the grdtrack example to avoid crashes on macOS (#531)
    • Properly allow for either pixel or gridline registered grids (#476)

    Maintenance

    • Add a test for xarray shading (#581)
    • Remove expected failures on grdview tests (#589)
    • Redesign check_figures_equal testing function to be more explicit (#590)
    • Cut Windows CI build time in half to 15 min (#586)
    • Add a test for Session.write_data() writing netCDF grids (#583)
    • Add a test to make sure shift_origin does not crash (#580)
    • Add testing.check_figures_equal to avoid storing baseline images (#555)
    • Eliminate unnecessary jobs from Travis CI (#567) and Azure Pipelines (#513)
    • Improve the workflow to test both GMT master (#485) and 6.1 branches (#554)
    • Automatically cancel in-progress CI runs of old commits (#544)
    • Remove the Stickler CI configuration file (#538), run style checks using Github Actions (#519)
    • Cache GMT remote data as artifacts on Github (#530)
    • Let pytest generate both HTML and XML coverage reports (#512)
    • Run Continuous Integration tests on Github Actions (#475)

    Contributors

    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Jul 7, 2020)

    DOI

    Highlights

    • Patch release in preparation for the SciPy 2020 sprint session
    • Last version to support GMT 6.0, future PyGMT versions will require GMT 6.1 or newer

    New Features

    • Wrap grdcut (#492)
    • Add show_versions() function for printing debugging information used in issue reports (#466)

    Enhancements

    • Change load_earth_relief()'s default resolution to 01d (#488)
    • Enhance text with extra functionality and aliases (#481)

    Documentation

    • Add gallery example for grdview (#502)
    • Turn all short aliases into long form (#474)
    • Update the plotting example using the colormap generated by pygmt.makecpt (#472)
    • Add instructions to view the test coverage reports locally (#468)
    • Update the instructions for testing pygmt install (#459)

    Bug Fixes

    • Fix a bug when passing data to GMT in Session.open_virtual_file() (#490)

    Maintenance

    • Temporarily expect failures for some grdcontour and grdview tests (#503)
    • Fix several failures due to updates of earth relief data (#498)
    • Unpin pylint version and fix some lint warnings (#484)
    • Separate tests of gmtinfo and grdinfo (#461)
    • Fix the test for GMT_COMPATIBILITY=6 (#454)
    • Update baseline images for updates of earth relief data (#452)
    • Simplify PyGMT Release process (#446)

    Contributors

    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(May 22, 2020)

    DOI

    Highlights:

    • :checkered_flag: Windows users rejoice, this bugfix release is for you! :checkered_flag:
    • Let PyGMT work with the conda GMT package on Windows (#434)

    Enhancements:

    • Handle setting special parameters without default settings for config (#411)

    Documentation:

    • Update install instructions (#430)
    • Add PyGMT AGU 2019 poster to website (#425)
    • Redirect www.pygmt.org to latest, instead of dev (#423)

    Bug Fixes:

    • Set GMT_COMPATIBILITY to 6 when pygmt session starts (#432)
    • Improve how PyGMT finds the GMT library (#440)

    Maintenance:

    • Finalize fixes on WIndows test suite for v0.1.1 (#441)
    • Cache test data on Azure Pipelines (#438)

    This release contains contributions from:

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(May 3, 2020)

    DOI

    Highlights:

    • 🎉 First official release of PyGMT 🎉
    • Python 3.8 is now supported (#398)
    • PyGMT now uses the stable version of GMT 6.0.0 by default (#363)
    • Use sphinx-gallery to manage examples and tutorials (#268)

    New features:

    • Wrap blockmedian (#349)
    • Add pygmt.config() to change gmt defaults locally and globally (#293)
    • Wrap grdview (#330)
    • Wrap grdtrack (#308)
    • Wrap colorbar (#332)
    • Wrap text (#321)
    • Wrap legend (#333)
    • Wrap makecpt (#329)
    • Add a new method to shift plot origins (#289)

    Enhancements:

    • Allow text accepting "frame" as an argument (#385)
    • Allow for grids with negative lat/lon increments (#369)
    • Allow passing in list to 'region' argument in surface (#378)
    • Allow passing in scalar number to x and y in plot (#376)
    • Implement default position/box for legend (#359)
    • Add sequence_space converter in kwargs_to_string (#325)

    Documentation:

    • Update PyPI install instructions and API disclaimer message (#421)
    • Fix the link to GMT documentation (#419)
    • Use napoleon instead of numpydoc with sphinx (#383)
    • Document using a list for repeated arguments (#361)
    • Add legend gallery entry (#358)
    • Update instructions to set GMT_LIBRARY_PATH (#324)
    • Fix the link to the GMT homepage (#331)
    • Split projections gallery by projection types (#318)
    • Fix the link to GMT/Matlab API in the README (#297)
    • Use shinx extlinks for linking GMT docs (#294)
    • Comment about country code in projection examples (#290)
    • Add an overview page listing presentations (#286)

    Bug Fixes:

    • Let surface return xr.DataArray instead of xr.Dataset (#408)
    • Update GMT constant GMT_STR16 to GMT_VF_LEN for GMT API change in 6.1.0 (#397)
    • Properly trigger pytest matplotlib image comparison (#352)
    • Use uuid.uuid4 to generate unique names (#274)

    Maintenance:

    • Quickfix Zeit Now miniconda installer link to anaconda.com (#413)
    • Fix Github Pages deployment from Travis (#410)
    • Update and clean TravisCI configuration (#404)
    • Quickfix min elevation for new SRTM15+V2.1 earth relief grids (#401)
    • Wrap docstrings to 79 chars and check with flake8 (#384)
    • Update continuous integration scripts to 1.2.0 (#355)
    • Use Zeit Now to deploy doc builds from PRs (#344)
    • Move gmt from requirements.txt to CI scripts instead (#343)
    • Change py.test to pytest (#338)
    • Add Google Analytics to measure site visitors (#314)
    • Register mpl_image_compare marker to remove PytestUnknownMarkWarning (#323)
    • Disable Windows CI builds before PR #313 is merged (#320)
    • Enable Mac and Windows CI on Azure Pipelines (#312)
    • Fixes for using GMT 6.0.0rc1 (#311)
    • Assign authorship to "The PyGMT Developers" (#284)

    Deprecations:

    • Remove mention of gitter.im (#405)
    • Remove portrait (-P) from common options (#339)
    • Remove require.js since WorldWind was dropped (#278)
    • Remove Web WorldWind support (#275)

    This release contains contributions from:

    Source code(tar.gz)
    Source code(zip)
Owner
The Generic Mapping Tools (GMT)
Tools for manipulating geographic and Cartesian data and creating plots, maps, and 3D views
The Generic Mapping Tools (GMT)
A python package for your Kali Linux distro that find the fastest mirror and configure your apt to use that mirror

Kali Mirror Finder Using Single Python File A python package for your Kali Linux distro that find the fastest mirror and configure your apt to use tha

MrSingh 6 Dec 12, 2022
python-codicefiscale: a tiny library for encode/decode Italian fiscal code - codifica/decodifica del Codice Fiscale.

python-codicefiscale python-codicefiscale is a tiny library for encode/decode Italian fiscal code - codifica/decodifica del Codice Fiscale. Features T

Fabio Caccamo 53 Dec 14, 2022
convert a dict-list object from / to a typed object(class instance with type annotation)

objtyping 带类型定义的对象转换器 由来 Python不是强类型语言,开发人员没有给数据定义类型的习惯。这样虽然灵活,但处理复杂业务逻辑的时候却不够方便——缺乏类型检查可能导致很难发现错误,在IDE里编码时也没

Song Hui 15 Dec 22, 2022
Every 2 minutes, check for visa slots at VFS website

vfs-visa-slot-germany Every 2 minutes, check for visa slots at VFS website. If there are any, send a call and a message of the format: Sent from your

12 Dec 15, 2022
Control-Alt-Delete - Help Tux Escape Beastie's Jail!

Control-Alt-Delete Help Tux escape Beastie's jail by completing the following challenges! Challenges Challenge 00: Drinks: Tux needs to drink less. Ch

NDLUG 8 Oct 31, 2021
A Python class for checking the status of an enabled Minecraft server

mcstatus provides an easy way to query Minecraft servers for any information they can expose. It provides three modes of access (query, status and ping), the differences of which are listed below in

Nathan Adams 1.1k Jan 06, 2023
A python package containing all the basic functions and classes for python. From simple addition to advanced file encryption.

A python package containing all the basic functions and classes for python. From simple addition to advanced file encryption.

PyBash 11 May 22, 2022
Color getter (including method to get random color or complementary color) made out of Python

python-color-getter Color getter (including method to get random color or complementary color) made out of Python Setup pip3 install git+https://githu

Jung Gyu Yoon 2 Sep 17, 2022
Easy compression and extraction for any compression or archival format.

Tzar: Tar, Zip, Anything Really Easy compression and extraction for any compression or archival format. Usage/Examples tzar compress large-dir compres

DanielVZ 37 Nov 02, 2022
✨ Un pierre feuille ciseaux totalement fait en Python par moi, et en français.

Pierre Feuille Ciseaux ❗ Un pierre feuille ciseaux totalement fait en Python par moi. 🔮 Avec l'utilisation du module "random", j'ai pu faire un choix

MrGabin 3 Jun 06, 2021
A simple package for handling variables in string.

A simple package for handling string variables. Welcome! This is a simple package for handling variables in string, You can add or remove variables wi

1 Dec 31, 2021
Playing with python imports and inducing those pesky errors.

super-duper-python-imports In this repository we are playing with python imports and inducing those pesky ImportErrors. File Organization project │

James Kelsey 2 Oct 14, 2021
Regression Metrics Calculation Made easy

Regression Metrics Mean Absolute Error Mean Square Error Root Mean Square Error Root Mean Square Logarithmic Error Root Mean Square Logarithmic Error

Ashish Patel 12 Jan 02, 2023
Tools to connect to and interact with the Mila cluster

milatools The milatools package provides the mila command, which is meant to help with connecting to and interacting with the Mila cluster. Install Re

Mila 32 Dec 01, 2022
Enable ++x and --x expressions in Python

By default, Python supports neither pre-increments (like ++x) nor post-increments (like x++). However, the first ones are syntactically correct since Python parses them as two subsequent +x operation

Alexander Borzunov 85 Dec 29, 2022
Brainfuck rollup scaling experiment for fun

Optimistic Brainfuck Ever wanted to run Brainfuck on ethereum? Don't ask, now you can! And at a fraction of the cost, thanks to optimistic rollup tech

Diederik Loerakker 48 Dec 28, 2022
Python lightweight dependency injection library

pythondi pythondi is a lightweight dependency injection library for python Support both sync and async functions Installation pip3 install pythondi Us

Hide 41 Dec 16, 2022
A Python script that parses and checks public proxies. Multithreading is supported.

A Python script that parses and checks public proxies. Multithreading is supported.

LevPrav 7 Nov 25, 2022
Lark is a parsing toolkit for Python, built with a focus on ergonomics, performance and modularity.

Lark is a parsing toolkit for Python, built with a focus on ergonomics, performance and modularity.

Lark - Parsing Library & Toolkit 3.5k Jan 05, 2023
Abstraction of a Unit, includes convertions and basic operations.

Units Abstraction of a Unit, includes convertions and basic operations. ------ EXAMPLE : Free Fall (No air resistance) ------- from units_test import

1 Dec 23, 2021