MetPy

A collection of tools in Python for reading, visualizing and performing calculations with weather data.
https://github.com/Unidata/MetPy

Category: Atmosphere
Sub Category: Meteorological Observation and Forecast

Keywords

atmospheric-science hacktoberfest hodograph meteorology plotting python scientific-computations skew-t weather weather-data

Keywords from Contributors

unidata thredds-catalogs climate thredds grib notebook projections atmospheric-sciences climate-model geoscience

Last synced: about 13 hours ago
JSON representation

Repository metadata

MetPy is a collection of tools in Python for reading, visualizing and performing calculations with weather data.

README.md

MetPy

MetPy Logo
Unidata Logo

License
Gitter
PRs Welcome

Latest Docs
PyPI Package
Conda Package
PyPI Downloads
Conda Downloads

PyPI Tests
Conda Tests
Code Coverage Status
Codacy Badge
Code Climate

MetPy is a collection of tools in Python for reading, visualizing and
performing calculations with weather data.

MetPy follows semantic versioning in its version number. This means
that any MetPy 1.x release will be backwards compatible with an earlier 1.y release. By
"backward compatible", we mean that correct code that works on a 1.y version will work
on a future 1.x version.

For additional MetPy examples not included in this repository, please see the Unidata Python
Gallery
.

We support Python >= 3.9.

Need Help?

Need help using MetPy? Found an issue? Have a feature request? Checkout our
support page.

Important Links

Dependencies

Other required packages:

  • Numpy
  • Scipy
  • Matplotlib
  • Pandas
  • Pint
  • Xarray

There is also an optional dependency on the pyproj library for geographic
projections (used with cross sections, grid spacing calculation, and the GiniFile interface).

See the installation guide
for more information.

Code of Conduct

We want everyone to feel welcome to contribute to MetPy and participate in discussions. In that
spirit please have a look at our Code of Conduct.

Contributing

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 a project like this one?

We assure you - the little voice in your head is wrong. If you can write code at all,
you can contribute code to open source. Contributing to open source projects is a fantastic
way to advance one's coding skills. Writing perfect code isn't the measure of a good developer
(that would disqualify all of us!); it's trying to create something, making mistakes, and
learning from those mistakes. That's how we all improve, and we are happy to help others learn.

Being an open source contributor doesn't just mean writing code, either. You can help out by
writing documentation, tests, or even giving feedback about the project (and yes - that
includes giving feedback about the contribution process). Some of these contributions may be
the most valuable to the project as a whole, because you're coming to the project with fresh
eyes, so you can see the errors and assumptions that seasoned contributors have glossed over.

For more information, please read the see the contributing guide.

Philosophy

The space MetPy aims for is GEMPAK (and maybe NCL)-like functionality, in a way that plugs
easily into the existing scientific Python ecosystem (numpy, scipy, matplotlib). So, if you
take the average GEMPAK script for a weather map, you need to:

  • read data
  • calculate a derived field
  • show on a map/skew-T

One of the benefits hoped to achieve over GEMPAK is to make it easier to use these routines for
any meteorological Python application; this means making it easy to pull out the LCL
calculation and just use that, or reuse the Skew-T with your own data code. MetPy also prides
itself on being well-documented and well-tested, so that on-going maintenance is easily
manageable.

The intended audience is that of GEMPAK: researchers, educators, and any one wanting to script
up weather analysis. It doesn't even have to be scripting; all python meteorology tools are
hoped to be able to benefit from MetPy. Conversely, it's hoped to be the meteorological
equivalent of the audience of scipy/scikit-learn/skimage.

Citation (CITATION.cff)

abstract: >
    MetPy is an open-source and community-driven Python package for meteorology designed to fit well within the scientific Python stack (numpy, matplotlib, etc.).
    Its goal is to bring the scripted weather analysis capabilities of GEMPAK (and tools like it) to the powerful scientific Python ecosystem.
    The guiding principle is to make MetPy easy to use with any dataset that can be read into Python.
    MetPy's general functionality breaks down into reading data, meteorological calculations, and meteorology-specific plotting.
authors: 
  - family-names: May
    given-names: Ryan
    affiliation: "UCAR/Unidata"
    orcid: "https://orcid.org/0000-0003-2907-038X"
  - family-names: Arms
    given-names: Sean
    affiliation: "UCAR/Unidata"
    orcid: "https://orcid.org/0000-0001-9835-113X"
  - family-names: Marsh
    given-names: Patrick
  - family-names: Bruning
    given-names: Eric
    affiliation: "Texas Tech University"
    orcid: "https://orcid.org/0000-0003-1959-442X"
  - family-names: Leeman
    given-names: John
    orcid: "https://orcid.org/0000-0002-3624-1821"
  - family-names: Goebbert
    given-names: Kevin
    affiliation: "Valparaiso University"
    orcid: "https://orcid.org/0000-0001-7559-2432"
  - family-names: Thielen
    given-names: Jonathan
    orcid: "https://orcid.org/0000-0002-5479-0189"
  - family-names: Bruick
    given-names: Zachary
    orcid: "https://orcid.org/0000-0002-0299-9845"
  - family-names: Camron
    given-names: "M. Drew"
    affiliation: "UCAR/Unidata"
    orcid: "https://orcid.org/0000-0001-7246-6502"
cff-version: "1.2.0"
contact:
  - name: Unidata
    city: Boulder
    region: Colorado
    country: US
    email: "[email protected]"
    tel: "303-497-8643"
    fax: "303-497-8690"
    website: "https://www.unidata.ucar.edu"
doi: "10.5065/D6WW7G29"
keywords:
  - meteorology
  - weather
license: "BSD-3-Clause"
message: "If you use or contribute to MetPy, please use this information to reference it."
repository-code: "https://github.com/Unidata/MetPy"
title: "MetPy: A Python Package for Meteorological Data"
type: software
url: "https://www.unidata.ucar.edu/software/metpy/"
references:
  - type: grant
    authors:
      - family-names: Ramamurthy
        given-names: Mohan
        email: "[email protected]"
    date-released: 2014-04-01
    institution:
      name: "National Science Foundation"
    identifiers:
      - description: "NSF award number."
        type: other
        value: "AGS-1344155"
    title: "Unidata 2018: Transforming Geoscience through Innovative Data Services"
    url: "https://www.nsf.gov/awardsearch/showAward?AWD_ID=1344155"
  - type: grant
    authors:
      - family-names: May
        given-names: Ryan
        email: "[email protected]"
      - family-names: Goebbert
        given-names: Kevin
      - family-names: Leeman
        given-names: John
    date-released: 2017-09-01
    institution:
      name: "National Science Foundation"
    identifiers:
      - description: "NSF award number."
        type: other
        value: "OAC-1740315"
    title: "MetPy - A Python GEMPAK Replacement for Meteorological Data Analysis"
    url: "https://www.nsf.gov/awardsearch/showAward?AWD_ID=1740315"
  - type: grant
    authors:
      - family-names: Paul
        given-names: Kevin
        email: "[email protected]"
      - family-names: May
        given-names: Ryan
      - family-names: Hamman
        given-names: Joseph
      - family-names: "Del Vento"
        given-names: Davide
    date-released: 2017-08-21
    institution:
      name: "National Science Foundation"
    identifiers:
      - description: "NSF award number."
        type: other
        value: "OCE-1740633"
    title: "Pangeo: An Open Source Big Data Climate Science Platform"
    url: "https://www.nsf.gov/awardsearch/showAward?AWD_ID=1740633"
  - type: grant
    authors:
      - family-names: Ramamurthy
        given-names: Mohan
        email: "[email protected]"
    date-released: 2019-05-01
    institution:
      name: "National Science Foundation"
    identifiers:
      - description: "NSF award number."
        type: other
        value: "AGS-1901712"
    title: "Unidata: Next-generation Data Services and Workflows to Advance Geoscience Research and Education"
    url: "https://www.nsf.gov/awardsearch/showAward?AWD_ID=1901712"
  - type: grant
    authors:
      - family-names: May
        given-names: Ryan
        email: "[email protected]"
      - family-names: Goebbert
        given-names: Kevin
      - family-names: Camron
        given-names: Michael
    date-released: 2021-05-01
    institution:
      name: "National Science Foundation"
    identifiers:
      - description: "NSF award number."
        type: other
        value: "OAC-2103682"
    title: "Elements: Scaling MetPy to Big Data Workflows in Meteorology and Climate Science"
    url: "https://www.nsf.gov/awardsearch/showAward?AWD_ID=2103682"

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 7 days ago

Total Commits: 4,836
Total Committers: 89
Avg Commits per committer: 54.337
Development Distribution Score (DDS): 0.51

Commits in past year: 325
Committers in past year: 18
Avg Commits per committer in past year: 18.056
Development Distribution Score (DDS) in past year: 0.489

Name Email Commits
Ryan May r****y@u****u 2368
dependabot[bot] 4****] 964
John Leeman k****b@g****m 347
Jon Thielen g****b@j****c 167
Drew Camron d****n@u****u 166
Zach Bruick z****k@v****u 118
Kevin Goebbert k****t@v****u 104
Steven Decker s****r@e****u 55
Nathan Wendt n****t@n****v 36
mgrover1 m****x@g****m 34
Sean Arms s****s@u****u 33
Connor Cozad 2****d@g****m 32
Daryl Herzmann a****z@i****u 29
Claude Dicaire 3****6 26
Haoyu Zhuang z****d@g****m 25
Alex Haberlie a****e@n****u 23
Kristen Pozsonyi k****n@m****u 23
Tyler Wixtrom t****m@g****m 23
Kyle J Gillett 1****t 19
Patrick Marsh p****x@g****m 19
Matt Wilson m****n@v****u 16
Andrew Huang a****1@i****u 13
Ana Castaneda a****1@g****m 13
Christian F c****2@g****m 9
Eric Bruning e****g@g****m 9
Nathan Wendt n****t@o****u 8
Sarawut Arthayakun 4****g 8
Lydia Bunting l****g@t****u 8
Aaron Hill a****l@t****u 6
David Ahijevych a****c@u****u 6
and 59 more...

Committer domains:


Issue and Pull Request metadata

Last synced: 1 day ago

Total issues: 1,208
Total pull requests: 2,403
Average time to close issues: 5 months
Average time to close pull requests: 19 days
Total issue authors: 277
Total pull request authors: 120
Average comments per issue: 2.88
Average comments per pull request: 1.38
Merged pull request: 2,072
Bot issues: 78
Bot pull requests: 1,186

Past year issues: 54
Past year pull requests: 269
Past year average time to close issues: 19 days
Past year average time to close pull requests: 6 days
Past year issue authors: 38
Past year pull request authors: 18
Past year average comments per issue: 2.56
Past year average comments per pull request: 0.43
Past year merged pull request: 228
Past year bot issues: 11
Past year bot pull requests: 218

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/Unidata/MetPy

Top Issue Authors

  • dopplershift (375)
  • jrleeman (168)
  • github-actions[bot] (78)
  • sgdecker (61)
  • jthielen (31)
  • kgoebber (29)
  • akrherz (20)
  • dcamron (17)
  • ahuang11 (12)
  • raybellwaves (9)
  • eliteuser26 (9)
  • zbruick (9)
  • winash12 (8)
  • avatar101 (6)
  • DanielAdriaansen (6)

Top Pull Request Authors

  • dependabot[bot] (1,171)
  • dopplershift (473)
  • jrleeman (157)
  • jthielen (84)
  • kgoebber (72)
  • zbruick (52)
  • dcamron (39)
  • sgdecker (34)
  • akrherz (28)
  • 23ccozad (20)
  • tjwixtrom (19)
  • nawendt (17)
  • mwilson14 (13)
  • mgrover1 (13)
  • github-actions[bot] (12)

Top Issue Labels

  • Type: Bug (361)
  • Area: Calc (302)
  • Type: Enhancement (234)
  • Type: Feature (204)
  • Type: Maintenance (197)
  • Area: Plots (172)
  • Area: Docs (166)
  • Area: IO (92)
  • Area: Infrastructure (91)
  • Area: Units (64)
  • Area: Xarray (64)
  • good first issue (57)
  • Status: Not A Bug (56)
  • Area: Examples (48)
  • GEMPAK Conversion (44)
  • Status: Duplicate (26)
  • Subarea: Thermo (26)
  • Type: API Change (24)
  • Type: Question (20)
  • Area: Tests (20)
  • Area: Gridding (18)
  • Area: Projections (17)
  • Status: Upstream (17)
  • Status: On Hold (9)
  • Area: Cross-sections (9)
  • Hacktoberfest (4)
  • Epic (3)
  • Status: Need Info (3)
  • Status: Won't Fix (3)
  • Area: DevTools (2)

Top Pull Request Labels

  • Type: Maintenance (1,471)
  • Area: Infrastructure (924)
  • Type: Enhancement (285)
  • Area: Calc (282)
  • Type: Bug (279)
  • Area: Docs (220)
  • Type: Feature (142)
  • Area: Plots (140)
  • Area: IO (71)
  • Area: Xarray (58)
  • Area: Examples (53)
  • Area: Tests (47)
  • Area: Units (39)
  • Type: API Change (33)
  • Area: Projections (14)
  • backport (12)
  • backported-pr (12)
  • Area: Gridding (12)
  • Status: Not A Bug (8)
  • Subarea: Thermo (8)
  • hacktoberfest-accepted (6)
  • Area: DevTools (4)
  • Area: Cross-sections (4)
  • nightly-ci (3)
  • Status: Duplicate (2)
  • manual backport (2)
  • GEMPAK Conversion (1)
  • Status: Team Discussion (1)

Package metadata

pypi.org: metpy

Collection of tools for reading, visualizing and performing calculations with weather data.

  • Homepage:
  • Documentation: https://unidata.github.io/MetPy/
  • Licenses: BSD-3-Clause
  • Latest release: 1.7.0 (published 17 days ago)
  • Last Synced: 2025-05-16T00:34:25.798Z (1 day ago)
  • Versions: 42
  • Dependent Packages: 37
  • Dependent Repositories: 76
  • Downloads: 84,578 Last month
  • Docker Downloads: 12
  • Rankings:
    • Dependent packages count: 0.462%
    • Dependent repos count: 1.712%
    • Average: 1.728%
    • Downloads: 1.868%
    • Stargazers count: 1.931%
    • Forks count: 2.666%
  • Maintainers (2)
conda-forge.org: metpy

The space MetPy aims for is GEMPAK (and maybe NCL)-like functionality, in a way that plugs easily into the existing scientific Python ecosystem (numpy, scipy, matplotlib). So, if you take the average GEMPAK script for a weather map, you need to: read data, calculate a derived field, and show on a map/skew-T. One of the benefits hoped to achieve over GEMPAK is to make it easier to use these routines for any meteorological Python application; this means making it easy to pull out the LCL calculation and just use that, or re-use the Skew-T with your own data code. MetPy also prides itself on being well-documented and well-tested, so that on-going maintenance is easily manageable.

  • Homepage: https://github.com/Unidata/MetPy
  • Licenses: BSD-3-Clause
  • Latest release: 1.3.1 (published almost 3 years ago)
  • Last Synced: 2025-05-16T00:35:26.656Z (1 day ago)
  • Versions: 27
  • Dependent Packages: 12
  • Dependent Repositories: 104
  • Rankings:
    • Dependent repos count: 3.338%
    • Dependent packages count: 5.115%
    • Average: 7.445%
    • Forks count: 8.703%
    • Stargazers count: 12.625%
proxy.golang.org: github.com/unidata/metpy

  • Homepage:
  • Documentation: https://pkg.go.dev/github.com/unidata/metpy#section-documentation
  • Licenses: bsd-3-clause
  • Latest release: v1.7.0 (published 17 days ago)
  • Last Synced: 2025-05-16T00:34:28.587Z (1 day ago)
  • Versions: 41
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent packages count: 6.999%
    • Average: 8.173%
    • Dependent repos count: 9.346%
spack.io: py-metpy

Collection of tools for reading, visualizing and performing calculations with weather data.

  • Homepage: https://github.com/Unidata/MetPy
  • Licenses: []
  • Latest release: 1.6.2 (published 7 months ago)
  • Last Synced: 2025-05-16T00:34:21.167Z (1 day ago)
  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent repos count: 0.0%
    • Forks count: 4.752%
    • Stargazers count: 7.489%
    • Average: 17.379%
    • Dependent packages count: 57.274%
  • Maintainers (1)

Dependencies

.github/actions/build-docs/action.yml actions
  • actions/upload-artifact v3 composite
.github/actions/install-conda/action.yml actions
  • mamba-org/provision-with-micromamba v14 composite
.github/actions/install-pypi/action.yml actions
  • actions/setup-python v4 composite
.github/actions/run-tests/action.yml actions
  • actions/upload-artifact v3 composite
  • codecov/codecov-action v3 composite
.github/workflows/assign-milestone.yml actions
  • actions/github-script v6 composite
.github/workflows/backport-prs.yml actions
  • actions-ecosystem/action-remove-labels v1 composite
  • actions/checkout v3 composite
  • actions/github-script v6 composite
  • peter-evans/create-pull-request v4 composite
.github/workflows/cffcheck.yml actions
  • actions/checkout v3 composite
  • citation-file-format/cffconvert-github-action 2.0.0 composite
.github/workflows/code-analysis.yml actions
  • actions/checkout v3 composite
  • github/codeql-action/analyze v2 composite
  • github/codeql-action/init v2 composite
.github/workflows/docs-conda.yml actions
  • ./.github/actions/build-docs * composite
  • ./.github/actions/install-conda * composite
  • actions/checkout v3 composite
.github/workflows/docs.yml actions
  • ./.github/actions/build-docs * composite
  • ./.github/actions/install-pypi * composite
  • actions/checkout v3 composite
  • actions/download-artifact v3 composite
  • peaceiris/actions-gh-pages v3 composite
.github/workflows/linting.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
.github/workflows/nightly-builds.yml actions
  • ./.github/actions/build-docs * composite
  • ./.github/actions/install-pypi * composite
  • ./.github/actions/run-tests * composite
  • actions/checkout v3 composite
  • actions/download-artifact v3 composite
  • actions/github-script v6 composite
  • actions/upload-artifact v3 composite
.github/workflows/release.yml actions
  • actions/checkout v3 composite
  • actions/download-artifact v3 composite
  • actions/setup-python v4 composite
  • actions/upload-artifact v3 composite
  • pypa/gh-action-pypi-publish v1.6.4 composite
.github/workflows/tests-conda.yml actions
  • ./.github/actions/install-conda * composite
  • ./.github/actions/run-tests * composite
  • actions/checkout v3 composite
ci/requirements.txt pypi
  • importlib_resources ==5.10.2
  • matplotlib ==3.6.2
  • numpy ==1.24.1
  • pandas ==1.5.2
  • pint ==0.20.1
  • pooch ==1.6.0
  • pyproj ==3.4.1
  • scipy ==1.10.0
  • traitlets ==5.8.0
  • xarray ==2022.12.0
.github/workflows/tests-pypi.yml actions
  • ./.github/actions/install-pypi * composite
  • ./.github/actions/run-tests * composite
  • actions/checkout v3 composite
.devcontainer/Dockerfile docker
  • mcr.microsoft.com/vscode/devcontainers/miniconda latest build
ci/doc_requirements.txt pypi
  • geopandas ==0.12.2
  • myst-parser ==0.18.1
  • netCDF4 ==1.6.2
  • pydata-sphinx-theme ==0.8.1
  • rtree ==1.0.1
  • sphinx ==4.5.0
  • sphinx-gallery ==0.11.1
ci/extra_requirements.txt pypi
  • cartopy ==0.21.1
  • shapely ==2.0.0
ci/linting_requirements.txt pypi
  • codespell ==2.2.2
  • doc8 ==1.1.1
  • flake8 ==5.0.4
  • flake8-bugbear ==22.12.6
  • flake8-builtins ==2.1.0
  • flake8-comprehensions ==3.10.1
  • flake8-continuation ==1.0.5
  • flake8-copyright ==0.2.3
  • flake8-docstrings ==1.6.0
  • flake8-isort ==6.0.0
  • flake8-mutable ==1.2.0
  • flake8-pie ==0.16.0
  • flake8-print ==5.0.0
  • flake8-quotes ==3.3.2
  • flake8-requirements ==1.7.5
  • flake8-rst-docstrings ==0.3.0
  • flake8-simplify ==0.19.3
  • isort ==5.11.4
  • pep8-naming ==0.13.3
  • pycodestyle ==2.9.1
  • pydocstyle ==6.2.2
  • pyflakes ==2.5.0
  • restructuredtext_lint ==1.4.0
ci/test_requirements.txt pypi
  • coverage ==7.0.3 test
  • dask ==2022.12.1 test
  • netCDF4 ==1.6.2 test
  • pytest ==7.2.0 test
  • pytest-mpl ==0.16.1 test
.github/workflows/unstable-builds.yml actions
  • ./.github/actions/build-docs * composite
  • ./.github/actions/install-pypi * composite
  • ./.github/actions/run-tests * composite
  • actions/checkout v3 composite
  • actions/upload-artifact v3 composite
.github/workflows/run-unstable-pr.yml actions
pyproject.toml pypi
  • matplotlib >=3.5.0
  • numpy >=1.20.0
  • pandas >=1.2.0
  • pint >=0.15
  • pooch >=1.2.0
  • pyproj >=3.0.0
  • scipy >=1.6.0
  • traitlets >=5.0.5
  • xarray >=0.18.0
.github/workflows/automerge-dependabot.yml actions

Score: 23.25572747457802