geovista
Cartographic rendering and mesh analytics powered by PyVista ๐
Science Score: 67.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
โCITATION.cff file
Found CITATION.cff file -
โcodemeta.json file
Found codemeta.json file -
โ.zenodo.json file
Found .zenodo.json file -
โDOI references
Found 3 DOI reference(s) in README -
โAcademic publication links
Links to: zenodo.org -
โCommitters with academic emails
-
โInstitutional organization owner
-
โJOSS paper metadata
-
โScientific vocabulary similarity
Low similarity (3.5%) to scientific vocabulary
Keywords
Keywords from Contributors
Repository
Cartographic rendering and mesh analytics powered by PyVista ๐
Basic Info
- Host: GitHub
- Owner: bjlittle
- License: bsd-3-clause
- Language: Python
- Default Branch: main
- Homepage: https://geovista.readthedocs.io/
- Size: 8.46 MB
Statistics
- Stars: 202
- Watchers: 8
- Forks: 30
- Open Issues: 33
- Releases: 13
Topics
Metadata Files
README.md
Cartographic rendering and mesh analytics powered by PyVista
| | |
|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| โ๏ธ CI |
|
| ๐ฌ Community |
|
| ๐ Docs |
|
| ๐ Health |
|
| โจ Meta |
|
| ๐ฆ Package |
|
| ๐งฐ Repo |
|
| ๐ก๏ธ Status |
|
| | |
Rediscover Your Data
GeoVista is built on the shoulders of giants, namely PyVista and VTK, thus allowing it to easily leverage the power of the GPU.
As a result, it offers a paradigm shift in rendering performance and interactive user experience, as demonstrated by this realtime, time-series animation of WAVEWATCH IIIยฎ third-generation wave model (WAVE-height, WATer depth and Current Hindcasting) data developed at NOAA/NCEP.
The animation shows a time-series of Sea Surface Wave Significant Height data located on the cell faces of a quasi-unstructured Spherical Multi-Cell (SMC) grid.
Bring your data alive with GeoVista! ๐
Tempted? Keen to know more? Well, let's begin ...
Motivation
The goal of GeoVista is simple; to complement PyVista with a convenient cartographic capability.
In this regard, from a design perspective we aim to keep GeoVista as pure to PyVista as possible i.e., minimise specialisation as far as practically possible in order to maximise native compatibility within the PyVista and VTK ecosystems.
We intend GeoVista to be a cartographic gateway into the powerful world of PyVista, and all that it offers.
GeoVista is intentionally agnostic to packages such as geopandas, iris, xarray et al, which specialise in preparing your spatial data for visualisation. Rather, we delegate that responsibility and choice of tool to you the user, as we want GeoVista to remain as flexible and open-ended as possible to the entire Scientific Python community.
Simply put, "GeoVista is to PyVista", as "Cartopy is to Matplotlib". Well, that's the aspiration.
Installation
GeoVista is available on both conda-forge and PyPI. See our Installation guide for further details.
Conda
GeoVista is available on conda-forge, and can be easily installed with conda:
shell
conda install --channel conda-forge geovista
Also see our conda-forge feedstock.
Pip
GeoVista is also available on PyPI:
shell
pip install geovista
Checkout out our PyPI Download Stats, if you like that kinda thing.
Pixi ๐ง
Alternatively, install GeoVista with pixi:
shell
pixi add geovista
`
For more information visit our prefix.dev dashboard.
Quick Start
GeoVista comes with various pre-canned resources to help get you started on your visualisation journey.
Resources
GeoVista makes use of various resources, such as rasters, VTK meshes, Natural Earth features, and sample model data.
If you want to download and cache all registered GeoVista resources to make them available offline, simply:
shell
geovista download --all
Alternatively, just leave GeoVista to download resources on-the-fly, as and when she needs them.
To view the list of registered resources, simply:
shell
geovista download --list
Want to know more?
shell
geovista download --help
Plotting Examples
Let's explore a sample of various oceanographic and atmospheric model data using GeoVista.
WAVEWATCH III
First, let's render a WAVEWATCH III (WW3) unstructured triangular mesh, with 10m Natural Earth coastlines, a 1:50m Natural Earth Cross-Blended Hypsometric Tints base layer, and the gorgeous perceptually uniform cmocean balance diverging colormap.
๐ Click for code ...
```python import geovista as gv from geovista.pantry.data import ww3_global_tri import geovista.theme # Load the sample data. sample = ww3_global_tri() # Create the mesh from the sample data. mesh = gv.Transform.from_unstructured( sample.lons, sample.lats, connectivity=sample.connectivity, data=sample.data ) # Plot the mesh. p = gv.GeoPlotter() sargs = {"title": f"{sample.name} / {sample.units}"} p.add_mesh(mesh, show_edges=True, scalar_bar_args=sargs) p.add_base_layer(texture=gv.natural_earth_hypsometric()) p.add_coastlines() p.add_graticule() p.view_xy(negative=True) p.add_axes() p.show() ```
Finite Volume Community Ocean Model
Now, let's visualise the bathymetry of the Plymouth Sound and Tamar River from an FVCOM unstructured mesh, as kindly provided by the Plymouth Marine Laboratory using the lush cmocean deep colormap.
๐ Click for code ...
```python import geovista as gv from geovista.pantry.data import fvcom_tamar import geovista.theme # Load the sample data. sample = fvcom_tamar() # Create the mesh from the sample data. mesh = gv.Transform.from_unstructured( sample.lons, sample.lats, connectivity=sample.connectivity, data=sample.face, name="face", ) # Warp the mesh nodes by the bathymetry. mesh.point_data["node"] = sample.node mesh.compute_normals(cell_normals=False, point_normals=True, inplace=True) mesh.warp_by_scalar(scalars="node", inplace=True, factor=2e-5) # Plot the mesh. p = gv.GeoPlotter() sargs = {"title": f"{sample.name} / {sample.units}"} p.add_mesh(mesh, cmap="deep", scalar_bar_args=sargs) p.add_axes() p.show() ```
CF UGRID
Local Area Model
Initial projection support is available within GeoVista for Cylindrical and Pseudo-Cylindrical projections. As GeoVista matures and stabilises, we'll aim to complement this capability with other classes of projections, such as Azimuthal and Conic.
In the meantime, let's showcase our basic projection support with some high-resolution unstructured Local Area Model (LAM) data reprojected to Mollweide using a PROJ string, with 10m Natural Earth coastlines and a 1:50m Natural Earth Cross-Blended Hypsometric Tints base layer.
๐ Click for code ...
```python import geovista as gv from geovista.pantry.data import lam_pacific import geovista.theme # Load the sample data. sample = lam_pacific() # Create the mesh from the sample data. mesh = gv.Transform.from_unstructured( sample.lons, sample.lats, connectivity=sample.connectivity, data=sample.data, ) # Plot the mesh on a mollweide projection using a Proj string. p = gv.GeoPlotter(crs="+proj=moll") sargs = {"title": f"{sample.name} / {sample.units}"} p.add_mesh(mesh, scalar_bar_args=sargs) p.add_base_layer(texture=gv.natural_earth_hypsometric()) p.add_coastlines() p.add_graticule() p.add_axes() p.view_xy() p.show() ```
Using the same unstructured LAM data, reproject to Equidistant Cylindrical but this time using a Cartopy Plate Carrรฉe CRS, also with 10m Natural Earth coastlines and a 1:50m Natural Earth Cross-Blended Hypsometric Tints base layer.
๐ Click for code ...
```python import cartopy.crs as ccrs import geovista as gv from geovista.pantry.data import lam_pacific import geovista.theme # Load the sample data. sample = lam_pacific() # Create the mesh from the sample data. mesh = gv.Transform.from_unstructured( sample.lons, sample.lats, connectivity=sample.connectivity, data=sample.data, ) # Plot the mesh on a Plate Carrรฉe projection using a cartopy CRS. p = gv.GeoPlotter(crs=ccrs.PlateCarree(central_longitude=180)) sargs = {"title": f"{sample.name} / {sample.units}"} p.add_mesh(mesh, scalar_bar_args=sargs) p.add_base_layer(texture=gv.natural_earth_hypsometric()) p.add_coastlines() p.add_graticule() p.add_axes() p.view_xy() p.show() ```
LFRic Cube-Sphere
Now render a Met Office LFRic C48 cube-sphere unstructured mesh of Sea Surface Temperature data on a Robinson Projection using an ESRI SRID, with 10m Natural Earth coastlines and a cmocean thermal colormap.
๐ Click for code ...
```python import geovista as gv from geovista.pantry.data import lfric_sst import geovista.theme # Load the sample data. sample = lfric_sst() # Create the mesh from the sample data. mesh = gv.Transform.from_unstructured( sample.lons, sample.lats, connectivity=sample.connectivity, data=sample.data, ) # Plot the mesh on a Robinson projection using an ESRI spatial reference identifier. p = gv.GeoPlotter(crs="ESRI:54030") sargs = {"title": f"{sample.name} / {sample.units}"} p.add_mesh(mesh, cmap="thermal", show_edges=True, scalar_bar_args=sargs) p.add_coastlines() p.view_xy() p.add_axes() p.show() ```
NEMO ORCA2
So far we've demonstrated GeoVista's ability to cope with unstructured data. Now let's plot a curvilinear mesh using Nucleus for European Modelling of the Ocean (NEMO) ORCA2 Sea Water Potential Temperature data, with 10m Natural Earth coastlines and a 1:50m Natural Earth I base layer.
๐ Click for code ...
```python import geovista as gv from geovista.pantry.data import nemo_orca2 import geovista.theme # Load sample data. sample = nemo_orca2() # Create the mesh from the sample data. mesh = gv.Transform.from_2d(sample.lons, sample.lats, data=sample.data) # Remove cells from the mesh with NaN values. mesh = mesh.threshold() # Plot the mesh. p = gv.GeoPlotter() sargs = {"title": f"{sample.name} / {sample.units}"} p.add_mesh(mesh, show_edges=True, scalar_bar_args=sargs) p.add_base_layer(texture=gv.natural_earth_1()) p.add_coastlines() p.view_xy() p.add_axes() p.show() ```
OISST AVHRR
Now let's render a NOAA/NCEI Optimum Interpolation SST (OISST) Advanced Very High Resolution Radiometer (AVHRR) rectilinear mesh, with 10m Natural Earth coastlines and a NASA Blue Marble base layer.
๐ Click for code ...
```python import geovista as gv from geovista.pantry.data import oisst_avhrr_sst import geovista.theme # Load sample data. sample = oisst_avhrr_sst() # Create the mesh from the sample data. mesh = gv.Transform.from_1d(sample.lons, sample.lats, data=sample.data) # Remove cells from the mesh with NaN values. mesh = mesh.threshold() # Plot the mesh. p = gv.GeoPlotter() sargs = {"title": f"{sample.name} / {sample.units}"} p.add_mesh(mesh, scalar_bar_args=sargs) p.add_base_layer(texture=gv.blue_marble()) p.add_coastlines() p.view_xz() p.add_axes() p.show() ```
DYNAMICO
Finally, to demonstrate support for non-traditional cell geometries i.e., not triangles or quadrilaterals, we plot the unstructured mesh from the DYNAMICO project. This model uses hexagonal and pentagonal cells, and is a new dynamical core for LMD-Z, the atmospheric General Circulation Model (GCM) part of the IPSL-CM Earth System Model. The render also contains 10m Natural Earth coastlines.
๐ Click for code ...
```python import geovista as gv from geovista.pantry.data import dynamico import geovista.theme # Load sample data. sample = dynamico() # Create the mesh from the sample data. mesh = gv.Transform.from_unstructured(sample.lons, sample.lats, data=sample.data) # Plot the mesh. p = gv.GeoPlotter() sargs = {"title": f"{sample.name} / {sample.units}"} p.add_mesh(mesh, scalar_bar_args=sargs) p.add_coastlines() p.add_axes() p.show() ```
Further Examples
"Please, sir, I want some more", Charles Dickens, Oliver Twist, 1838.
Certainly, our pleasure! From the command line, simply:
bash
geovista examples --run all --verbose
Want to know more?
shell
geovista examples --help
Candy Store ๐ฌ
We've opened the doors to the Candy Store ๐ฌ.
A community space where you can openly share and promote how you're using GeoVista for your work, research or pleasure!
Showcase your most awesome GeoVista eye candy with undiluted pride and tell us more about your work.
We'd ๐ to hear from you!
Documentation
The documentation is built by Sphinx and hosted on Read the Docs.
Ecosystem
Whilst you're here, why not hop on over to the pyvista-xarray project and check it out!
It's aiming to provide xarray DataArray accessors for PyVista to visualize datasets in 3D for the
xarray community, and will be building on top of GeoVista ๐
Support
Need help? ๐ข
Why not check out our existing GitHub issues. See something similar? Well, give it a ๐ to raise its priority and feel free to chip in on the conversation. Otherwise, don't hesitate to create a new GitHub issue instead.
However, if you'd rather have a natter, then head on over to our GitHub Discussions. That's definitely the place to wax lyrical all things GeoVista!
License
GeoVista is distributed under the terms of the BSD-3-Clause license.
Star History
Diggin' GeoVista? Then why not show it some ๐ with a GitHub โญ!
It's a simple click that means the world to us, and helps others discover our community too!
#ShowYourStripes
Graphics and Lead Scientist: Ed Hawkins, National Centre for Atmospheric Science, University of Reading.
Data: Berkeley Earth, NOAA, UK Met Office, MeteoSwiss, DWD, SMHI, UoR, Meteo France & ZAMG.
#ShowYourStripes is distributed under a
Creative Commons Attribution 4.0 International License
Owner
- Name: Bill Little
- Login: bjlittle
- Kind: user
- Location: Exeter, Devon, England
- Company: Met Office
- Website: https://www.metoffice.gov.uk/
- Twitter: billjameslittle
- Repositories: 136
- Profile: https://github.com/bjlittle
Soft, fluffy and machine washable.
Citation (CITATION.cff)
cff-version: 1.2.0 message: "If you use this software, please cite it as below." authors: - family-names: "Little" given-names: "Bill" orcid: "https://orcid.org/0000-0002-1345-9465" title: "geovista" abstract: "Cartographic rendering and mesh analytics powered by PyVista" repository-code: "https://github.com/bjlittle/geovista" license: "BSD-3-Clause" license-url: "https://spdx.org/licenses/BSD-3-Clause.html" doi: "10.5281/zenodo.7608302" type: "software"
Committers
Last synced: 9 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Bill Little | b****e@g****m | 1,171 |
| geovista-ci[bot] | 1****] | 185 |
| pre-commit-ci[bot] | 6****] | 127 |
| dependabot[bot] | 4****] | 113 |
| allcontributors[bot] | 4****] | 87 |
| github-actions[bot] | 4****] | 27 |
| Martin Yeo | 4****s | 13 |
| Tetsuo Koyama | t****0@g****m | 13 |
| Henry Wright | 8****t | 3 |
| Bane Sullivan | b****n@g****m | 3 |
| Elias | 1****O | 2 |
| stephenworsley | 4****y | 2 |
| Andrew Coughtrie | 2****e | 1 |
| Patrick Peglar | p****r@m****k | 1 |
| RichardScottOZ | 7****Z | 1 |
| beroda | 1****a | 1 |
| bjlittle-pr-auth[bot] | 1****] | 1 |
| geovista-actions[bot] | 1****] | 1 |
| tkknight | 2****t | 1 |
| user27182 | 8****2 | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 170
- Total pull requests: 1,941
- Average time to close issues: about 2 months
- Average time to close pull requests: about 24 hours
- Total issue authors: 24
- Total pull request authors: 18
- Average comments per issue: 2.45
- Average comments per pull request: 1.02
- Merged pull requests: 1,691
- Bot issues: 81
- Bot pull requests: 902
Past Year
- Issues: 98
- Pull requests: 786
- Average time to close issues: 5 days
- Average time to close pull requests: about 19 hours
- Issue authors: 9
- Pull request authors: 13
- Average comments per issue: 0.32
- Average comments per pull request: 0.87
- Merged pull requests: 643
- Bot issues: 78
- Bot pull requests: 443
Top Authors
Issue Authors
- github-actions[bot] (76)
- bjlittle (38)
- tkoyama010 (12)
- trexfeathers (9)
- banesullivan (5)
- dennissergeev (5)
- PBrockmann (4)
- geovista-ci[bot] (2)
- pp-mo (2)
- k-a-mendoza (2)
- akaszynski (2)
- jbusecke (1)
- dependabot[bot] (1)
- stephenworsley (1)
- allcontributors[bot] (1)
Pull Request Authors
- bjlittle (946)
- geovista-ci[bot] (323)
- dependabot[bot] (237)
- pre-commit-ci[bot] (177)
- allcontributors[bot] (165)
- tkoyama010 (29)
- trexfeathers (24)
- HGWright (7)
- banesullivan (6)
- pp-mo (6)
- stephenworsley (4)
- ESadek-MO (4)
- user27182 (4)
- tkknight (2)
- beroda (2)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 3
-
Total downloads:
- pypi 1,028 last-month
-
Total dependent packages: 2
(may contain duplicates) -
Total dependent repositories: 3
(may contain duplicates) - Total versions: 29
- Total maintainers: 5
proxy.golang.org: github.com/bjlittle/geovista
- Documentation: https://pkg.go.dev/github.com/bjlittle/geovista#section-documentation
- License: bsd-3-clause
-
Latest release: v0.5.3
published over 1 year ago
Rankings
pypi.org: geovista
Cartographic rendering and mesh analytics powered by PyVista
- Documentation: https://geovista.readthedocs.io
- License: BSD 3-Clause License Copyright (c) 2021, GeoVista Contributors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
Latest release: 0.5.3
published over 1 year ago
Rankings
Maintainers (5)
conda-forge.org: geovista
GeoVista provides a cartographic gateway into the world of PyVista. It leverages the power of the GPU through VTK to provide a paradigm shift in rendering performance and interactive user experience.
- Homepage: https://github.com/bjlittle/geovista
- License: BSD-3-Clause
-
Latest release: 0.1a0
published over 4 years ago
Rankings
Dependencies
- actions/checkout v4 composite
- citation-file-format/cffconvert-github-action 2.0.0 composite
- actions-ecosystem/action-add-labels v1 composite
- actions/labeler v4 composite
- ./.github/workflows/composite/conda-env-cache * composite
- ./.github/workflows/composite/conda-pkg-cache * composite
- ./.github/workflows/composite/tox-cache * composite
- actions/checkout v4 composite
- actions/download-artifact v3 composite
- actions/upload-artifact v3 composite
- conda-incubator/setup-miniconda v2 composite
- peter-evans/create-pull-request 153407881ec5c347639a548ade7d8ad1d6740e38 composite
- tibdex/github-app-token v2 composite
- actions/checkout v4 composite
- actions/stale v8 composite
- ./.github/workflows/composite/cartopy-cache * composite
- ./.github/workflows/composite/conda-env-cache * composite
- ./.github/workflows/composite/conda-pkg-cache * composite
- ./.github/workflows/composite/tox-cache * composite
- actions/checkout v4 composite
- conda-incubator/setup-miniconda v2 composite
- ./.github/workflows/composite/conda-env-cache * composite
- ./.github/workflows/composite/conda-pkg-cache * composite
- ./.github/workflows/composite/tox-cache * composite
- actions/checkout v4 composite
- actions/download-artifact v3 composite
- actions/upload-artifact v3 composite
- conda-incubator/setup-miniconda v2 composite
- pypa/gh-action-pypi-publish release/v1 composite
- actions/checkout v4 composite
- github/codeql-action/analyze v2 composite
- github/codeql-action/autobuild v2 composite
- github/codeql-action/init v2 composite
- actions/cache v3 composite
- actions/cache v3 composite
- actions/cache v3 composite
- actions/cache v3 composite
- cartopy >=0.20
- click *
- click-default-group *
- cmocean *
- netCDF4 *
- numpy >=1.21
- platformdirs *
- pooch *
- pykdtree *
- pyproj >=3.3
- pyvista >=0.40
- colorcet *
- jupyter-sphinx *
- pydata-sphinx-theme *
- sphinx *
- sphinx-copybutton *
- codecov * test
- pre-commit * test
- pytest >=6.0 test
- pytest-cov * test
- pytest-mock * test
- hmarr/auto-approve-action v3 composite
- tibdex/github-app-token v2 composite
- fastparquet *
- pandas *
