{"id":13478243,"url":"https://github.com/bjlittle/geovista","last_synced_at":"2025-05-16T03:03:59.221Z","repository":{"id":37025445,"uuid":"366434296","full_name":"bjlittle/geovista","owner":"bjlittle","description":"Cartographic rendering and mesh analytics powered by PyVista","archived":false,"fork":false,"pushed_at":"2025-05-12T17:13:23.000Z","size":7348,"stargazers_count":186,"open_issues_count":38,"forks_count":29,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-05-12T18:27:21.065Z","etag":null,"topics":["cartography","curvilinear","earth-science","grid","mesh","python","pyvista","rectilinear","ugrid","unstructured","vtk"],"latest_commit_sha":null,"homepage":"https://geovista.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bjlittle.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.rst","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-05-11T15:40:46.000Z","updated_at":"2025-05-12T17:13:27.000Z","dependencies_parsed_at":"2023-11-18T03:29:08.417Z","dependency_job_id":"dd609a32-034f-45a3-a34f-f83e47bb52f6","html_url":"https://github.com/bjlittle/geovista","commit_stats":{"total_commits":1078,"total_committers":13,"mean_commits":82.92307692307692,"dds":"0.22170686456400746","last_synced_commit":"9aa6bf7a3feee087266de77bc93ee4c6fdb456e2"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjlittle%2Fgeovista","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjlittle%2Fgeovista/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjlittle%2Fgeovista/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjlittle%2Fgeovista/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bjlittle","download_url":"https://codeload.github.com/bjlittle/geovista/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253805860,"owners_count":21967053,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cartography","curvilinear","earth-science","grid","mesh","python","pyvista","rectilinear","ugrid","unstructured","vtk"],"created_at":"2024-07-31T16:01:54.515Z","updated_at":"2025-05-16T03:03:54.212Z","avatar_url":"https://github.com/bjlittle.png","language":"Python","funding_links":[],"categories":["Python","Geoscience","Geometry","Geospatial","Software","Geoscience / Geospatial"],"sub_categories":["Visualization"],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003ca href=\"https://github.com/bjlittle/geovista#--------\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/branding/logo/primary/geovistalogo.svg\"\n         alt=\"GeoVista\"\n         width=\"200\"\u003e\u003c/a\u003e\n\u003c/h1\u003e\n\n\u003ch3 align=\"center\"\u003e\n  Cartographic rendering and mesh analytics powered by \u003ca href=\"https://docs.pyvista.org/index.html\"\u003ePyVista\u003c/a\u003e\n\u003c/h3\u003e\n\n|              |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |\n|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ⚙️ CI        | [![ci-citation](https://github.com/bjlittle/geovista/actions/workflows/ci-citation.yml/badge.svg)](https://github.com/bjlittle/geovista/actions/workflows/ci-citation.yml) [![ci-linkcheck](https://github.com/bjlittle/geovista/actions/workflows/ci-linkcheck.yml/badge.svg)](https://github.com/bjlittle/geovista/actions/workflows/ci-linkcheck.yml) [![ci-locks](https://github.com/bjlittle/geovista/actions/workflows/ci-locks.yml/badge.svg)](https://github.com/bjlittle/geovista/actions/workflows/ci-locks.yml) [![ci-manifest](https://github.com/bjlittle/geovista/actions/workflows/ci-manifest.yml/badge.svg)](https://github.com/bjlittle/geovista/actions/workflows/ci-manifest.yml) [![ci-tests](https://github.com/bjlittle/geovista/actions/workflows/ci-tests.yml/badge.svg)](https://github.com/bjlittle/geovista/actions/workflows/ci-tests.yml) [![ci-wheels](https://github.com/bjlittle/geovista/actions/workflows/ci-wheels.yml/badge.svg)](https://github.com/bjlittle/geovista/actions/workflows/ci-wheels.yml) [![pre-commit](https://results.pre-commit.ci/badge/github/bjlittle/geovista/main.svg)](https://results.pre-commit.ci/latest/github/bjlittle/geovista/main) |\n| 💬 Community | [![Contributor Covenant](https://img.shields.io/badge/contributor%20covenant-2.1-4baaaa.svg)](https://github.com/bjlittle/geovista/blob/main/CODE_OF_CONDUCT.md) [![GH Discussions](https://img.shields.io/badge/github-discussions%20%F0%9F%92%AC-yellow?logo=github\u0026logoColor=lightgrey)](https://github.com/bjlittle/geovista/discussions) [![Bluesky](https://img.shields.io/badge/geovista-0285FF?label=bluesky\u0026logo=bluesky\u0026logoColor=0285FF)](https://bsky.app/profile/geovista.bsky.social) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCMJIzZ23r_3fvtqNpYi57Lw?label=@geovista_devs)](https://www.youtube.com/@geovista_devs/videos) [![All Contributors](https://img.shields.io/github/all-contributors/bjlittle/geovista?color=ee8449)](https://geovista.readthedocs.io/en/latest/reference/about.html#contributors) [![Mentioned in Awesome Open Geoscience](https://awesome.re/mentioned-badge.svg)](https://github.com/softwareunderground/awesome-open-geoscience) [![GitHub Repo stars](https://img.shields.io/github/stars/bjlittle/geovista)](https://github.com/bjlittle/geovista/stargazers)                                                |\n| 📚 Docs      | [![Documentation Status](https://readthedocs.org/projects/geovista/badge/?version=latest)](https://geovista.readthedocs.io/en/latest/?badge=latest)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| 📈 Health    | [![codecov](https://codecov.io/gh/bjlittle/geovista/branch/main/graph/badge.svg?token=RVVXGP1SD3)](https://codecov.io/gh/bjlittle/geovista)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |\n| ✨ Meta       | [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) [![SPEC 0 — Minimum Supported Dependencies](https://img.shields.io/badge/SPEC-0-green?labelColor=%23004811\u0026color=%235CA038)](https://scientific-python.org/specs/spec-0000/) [![license - bsd-3-clause](https://img.shields.io/github/license/bjlittle/geovista)](https://github.com/bjlittle/geovista/blob/main/LICENSE) [![conda platform](https://img.shields.io/conda/pn/conda-forge/geovista.svg)](https://anaconda.org/conda-forge/geovista)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |\n| 📦 Package   | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7608302.svg)](https://doi.org/10.5281/zenodo.7608302) [![conda-forge](https://img.shields.io/conda/vn/conda-forge/geovista?color=orange\u0026label=conda-forge\u0026logo=conda-forge\u0026logoColor=white)](https://anaconda.org/conda-forge/geovista) [![pypi](https://img.shields.io/pypi/v/geovista?color=orange\u0026label=pypi\u0026logo=python\u0026logoColor=white)](https://pypi.org/project/geovista/) [![pypi - python version](https://img.shields.io/pypi/pyversions/geovista.svg?color=orange\u0026logo=python\u0026label=python\u0026logoColor=white)](https://pypi.org/project/geovista/)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |\n| 🧰 Repo      | [![commits-since](https://img.shields.io/github/commits-since/bjlittle/geovista/latest.svg)](https://github.com/bjlittle/geovista/commits/main) [![contributors](https://img.shields.io/github/contributors/bjlittle/geovista)](https://github.com/bjlittle/geovista/graphs/contributors) [![release](https://img.shields.io/github/v/release/bjlittle/geovista)](https://github.com/bjlittle/geovista/releases)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| 🛡️ Status   | [![scitools](https://img.shields.io/badge/scitools-ownership%20pending-yellow)](https://github.com/bjlittle/geovista/issues/167)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n|              |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |\n\n## Rediscover Your Data\n\n[WW3 SMC time-series 🎥](https://github.com/bjlittle/geovista/assets/2051656/876d877e-a6fa-42ff-8153-08c41ff8a19e)\n\nGeoVista is built on the shoulders of giants, namely [PyVista](https://docs.pyvista.org/version/stable/) and\n[VTK](https://vtk.org/documentation/), thus allowing it to easily leverage the power of the GPU.\n\nAs a result, it offers a paradigm shift in rendering performance and interactive user experience, as demonstrated by\nthis realtime, time-series animation of WAVEWATCH III® third-generation wave model (**WAVE**-height, **WAT**er depth\nand **C**urrent **H**indcasting) data developed at [NOAA](https://www.noaa.gov/)/[NCEP](https://www.weather.gov/ncep/).\n\nThe animation shows a time-series of Sea Surface Wave Significant Height data located on the cell faces of a\nquasi-unstructured Spherical Multi-Cell (SMC) grid.\n\nBring your data alive with GeoVista! 🚀\n\nTempted? Keen to know more? Well, let's begin ...\n\n## Motivation\n\nThe goal of GeoVista is simple; to complement [PyVista](https://docs.pyvista.org/index.html) with a convenient\ncartographic capability.\n\nIn this regard, from a design perspective we aim to keep GeoVista as **pure** to PyVista as possible i.e.,\n**minimise specialisation** as far as practically possible in order to **maximise native compatibility** within the\nPyVista and [VTK](https://vtk.org/) ecosystems.\n\nWe intend GeoVista to be a cartographic gateway into the powerful world of PyVista, and all that it offers.\n\nGeoVista is intentionally agnostic to packages such as [geopandas](https://geopandas.org/en/stable/),\n[iris](https://scitools-iris.readthedocs.io/en/latest/?badge=latest), [xarray](https://docs.xarray.dev/en/stable/)\net al, which specialise in preparing your spatial data for visualisation. Rather, we delegate that responsibility and\nchoice of tool to you the user, as we want GeoVista to remain as flexible and open-ended as possible to the entire\nScientific Python community.\n\nSimply put, \"*[GeoVista](https://geovista.readthedocs.io/) is to\n[PyVista](https://docs.pyvista.org/)*\", as\n\"*[Cartopy](https://scitools.org.uk/cartopy/docs/latest/) is to\n[Matplotlib](https://matplotlib.org/)*\". Well, that's the aspiration.\n\n## Installation\n\nGeoVista is available on both [conda-forge](https://anaconda.org/conda-forge/geovista) and [PyPI](https://pypi.org/project/geovista/).\n\nWe recommend using [conda](https://docs.conda.io/projects/conda/en/latest/index.html) to install GeoVista 👍\n\n### Conda\n\nGeoVista is available on [conda-forge](https://anaconda.org/conda-forge/geovista), and can be easily installed with\n[conda](https://docs.conda.io/projects/conda/en/latest/index.html):\n```shell\nconda install -c conda-forge geovista\n```\nFor more information see our [conda-forge feedstock](https://github.com/conda-forge/geovista-feedstock) and\n[prefix.dev dashboard](https://prefix.dev/channels/conda-forge/packages/geovista).\n\n### Pip\n\nGeoVista is also available on [PyPI](https://pypi.org/project/geovista/):\n\n```shell\npip install geovista\n```\n\nCheckout out our [PyPI Download Stats](https://pypistats.org/packages/geovista), if you like that kinda thing.\n\n## Quick Start\n\nGeoVista comes with various pre-canned resources to help get you started on your visualisation journey.\n\n### Resources\n\nGeoVista makes use of various resources, such as rasters, VTK meshes,\n[Natural Earth](https://www.naturalearthdata.com/features/) features, and sample model data.\n\nIf you want to download and cache all registered GeoVista resources to make them available offline, simply:\n```shell\ngeovista download --all\n```\nAlternatively, just leave GeoVista to download resources on-the-fly, as and when she needs them.\n\nTo view the list of registered resources, simply:\n```shell\ngeovista download --list\n```\n\nWant to know more?\n```shell\ngeovista download --help\n```\n\n### Plotting Examples\n\nLet's explore a sample of various oceanographic and atmospheric model data using GeoVista.\n\n#### WAVEWATCH III\n\nFirst, let's render a [WAVEWATCH III](https://github.com/NOAA-EMC/WW3) (WW3) **unstructured** triangular mesh, with\n[10m Natural Earth coastlines](https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-coastline/), a\n[1:50m Natural Earth Cross-Blended Hypsometric Tints](https://www.naturalearthdata.com/downloads/50m-raster-data/50m-cross-blend-hypso/)\nbase layer, and the gorgeous perceptually uniform [cmocean balance](https://matplotlib.org/cmocean/#balance) diverging\ncolormap.\n\n\u003cdetails aria-expanded=\"false\" aria-label=\"Click for code\"\u003e\n\u003csummary\u003e🗒 Click for code ...\u003c/summary\u003e\n\n```python\nimport geovista as gv\nfrom geovista.pantry.data import ww3_global_tri\nimport geovista.theme\n\n# Load the sample data.\nsample = ww3_global_tri()\n\n# Create the mesh from the sample data.\nmesh = gv.Transform.from_unstructured(\n    sample.lons, sample.lats, connectivity=sample.connectivity, data=sample.data\n)\n\n# Plot the mesh.\np = gv.GeoPlotter()\nsargs = {\"title\": f\"{sample.name} / {sample.units}\"}\np.add_mesh(mesh, show_edges=True, scalar_bar_args=sargs)\np.add_base_layer(texture=gv.natural_earth_hypsometric())\np.add_coastlines()\np.add_graticule()\np.view_xy(negative=True)\np.add_axes()\np.show()\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/readme/ww3-tri.png\"\n       alt=\"WAVEWATCH III Model, Unstructured Triangular Mesh of Sea Surface Wave Significant Height\"\n       style=\"width: 75%; height: 75%\"\u003e\n\u003c/p\u003e\n\n#### Finite Volume Community Ocean Model\n\nNow, let's visualise the bathymetry of the\n[Plymouth Sound and Tamar River](https://www.google.com/maps/place/Plymouth+Sound/@50.3337382,-4.2215988,12z/data=!4m5!3m4!1s0x486c93516bbce307:0xded7654eaf4f8f83!8m2!3d50.3638359!4d-4.1441365)\nfrom an [FVCOM](https://www.fvcom.org/) **unstructured** mesh, as kindly provided by the\n[Plymouth Marine Laboratory](https://pml.ac.uk/) using the lush [cmocean deep](https://matplotlib.org/cmocean/#deep) colormap.\n\n\u003cdetails aria-expanded=\"false\" aria-label=\"Click for code\"\u003e\n\u003csummary\u003e🗒 Click for code ...\u003c/summary\u003e\n\n```python\nimport geovista as gv\nfrom geovista.pantry.data import fvcom_tamar\nimport geovista.theme\n\n# Load the sample data.\nsample = fvcom_tamar()\n\n# Create the mesh from the sample data.\nmesh = gv.Transform.from_unstructured(\n    sample.lons,\n    sample.lats,\n    connectivity=sample.connectivity,\n    data=sample.face,\n    name=\"face\",\n)\n\n# Warp the mesh nodes by the bathymetry.\nmesh.point_data[\"node\"] = sample.node\nmesh.compute_normals(cell_normals=False, point_normals=True, inplace=True)\nmesh.warp_by_scalar(scalars=\"node\", inplace=True, factor=2e-5)\n\n# Plot the mesh.\np = gv.GeoPlotter()\nsargs = {\"title\": f\"{sample.name} / {sample.units}\"}\np.add_mesh(mesh, cmap=\"deep\", scalar_bar_args=sargs)\np.add_axes()\np.show()\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/readme/tamar.png\"\n       alt=\"Finite Volume Community Ocean Model, Unstructured Triangular Mesh of Sea Floor Below Geoid\"\n       style=\"width: 75%; height: 75%\"\u003e\n\u003c/p\u003e\n\n#### CF UGRID\n\n##### Local Area Model\n\nInitial projection support is available within GeoVista for **Cylindrical** and **Pseudo-Cylindrical** projections. As\nGeoVista matures and stabilises, we'll aim to complement this capability with other classes of projections, such as\n**Azimuthal** and **Conic**.\n\nIn the meantime, let's showcase our basic projection support with some high-resolution **unstructured** Local Area Model\n(LAM) data reprojected to [Mollweide](https://proj.org/operations/projections/moll.html) using a\n[PROJ](https://proj.org/index.html) string, with\n[10m Natural Earth coastlines](https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-coastline/) and a\n[1:50m Natural Earth Cross-Blended Hypsometric Tints](https://www.naturalearthdata.com/downloads/50m-raster-data/50m-cross-blend-hypso/)\nbase layer.\n\n\u003cdetails aria-expanded=\"false\" aria-label=\"Click for code\"\u003e\n\u003csummary\u003e🗒 Click for code ...\u003c/summary\u003e\n\n```python\nimport geovista as gv\nfrom geovista.pantry.data import lam_pacific\nimport geovista.theme\n\n# Load the sample data.\nsample = lam_pacific()\n\n# Create the mesh from the sample data.\nmesh = gv.Transform.from_unstructured(\n    sample.lons,\n    sample.lats,\n    connectivity=sample.connectivity,\n    data=sample.data,\n)\n\n# Plot the mesh on a mollweide projection using a Proj string.\np = gv.GeoPlotter(crs=\"+proj=moll\")\nsargs = {\"title\": f\"{sample.name} / {sample.units}\"}\np.add_mesh(mesh, scalar_bar_args=sargs)\np.add_base_layer(texture=gv.natural_earth_hypsometric())\np.add_coastlines()\np.add_graticule()\np.add_axes()\np.view_xy()\np.show()\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/readme/lam-moll.png\"\n       alt=\"CF UGRID Local Area Model, Unstructured Quadrilateral Mesh of Air Potential Temperature\"\n       style=\"width: 75%; height: 75%\"\u003e\n\u003c/p\u003e\n\nUsing the same **unstructured** LAM data, reproject to\n[Equidistant Cylindrical](https://proj.org/operations/projections/eqc.html) but this time using a\n[Cartopy Plate Carrée CRS](https://scitools.org.uk/cartopy/docs/latest/reference/projections.html#cartopy.crs.PlateCarree),\nalso with [10m Natural Earth coastlines](https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-coastline/)\nand a\n[1:50m Natural Earth Cross-Blended Hypsometric Tints](https://www.naturalearthdata.com/downloads/50m-raster-data/50m-cross-blend-hypso/)\nbase layer.\n\n\u003cdetails aria-expanded=\"false\" aria-label=\"Click for code\"\u003e\n\u003csummary\u003e🗒 Click for code ...\u003c/summary\u003e\n\n```python\nimport cartopy.crs as ccrs\n\nimport geovista as gv\nfrom geovista.pantry.data import lam_pacific\nimport geovista.theme\n\n# Load the sample data.\nsample = lam_pacific()\n\n# Create the mesh from the sample data.\nmesh = gv.Transform.from_unstructured(\n    sample.lons,\n    sample.lats,\n    connectivity=sample.connectivity,\n    data=sample.data,\n)\n\n# Plot the mesh on a Plate Carrée projection using a cartopy CRS.\np = gv.GeoPlotter(crs=ccrs.PlateCarree(central_longitude=180))\nsargs = {\"title\": f\"{sample.name} / {sample.units}\"}\np.add_mesh(mesh, scalar_bar_args=sargs)\np.add_base_layer(texture=gv.natural_earth_hypsometric())\np.add_coastlines()\np.add_graticule()\np.add_axes()\np.view_xy()\np.show()\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/readme/lam-eqc.png\"\n       alt=\"CF UGRID Local Area Model, Unstructured Quadrilateral Mesh of Air Potential Temperature in Plate Carrée Projection\"\n       style=\"width: 75%; height: 75%\"\u003e\n\u003c/p\u003e\n\n#### LFRic Cube-Sphere\n\nNow render a [Met Office LFRic](https://www.metoffice.gov.uk/research/approach/modelling-systems/lfric) C48 cube-sphere\n**unstructured** mesh of Sea Surface Temperature data on a\n[Robinson Projection](https://proj.org/operations/projections/robin.html) using an ESRI SRID, with\n[10m Natural Earth coastlines](https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-coastline/) and a\n[cmocean thermal](https://matplotlib.org/cmocean/#thermal) colormap.\n\n\u003cdetails aria-expanded=\"false\" aria-label=\"Click for code\"\u003e\n\u003csummary\u003e🗒 Click for code ...\u003c/summary\u003e\n\n```python\nimport geovista as gv\nfrom geovista.pantry.data import lfric_sst\nimport geovista.theme\n\n# Load the sample data.\nsample = lfric_sst()\n\n# Create the mesh from the sample data.\nmesh = gv.Transform.from_unstructured(\n    sample.lons,\n    sample.lats,\n    connectivity=sample.connectivity,\n    data=sample.data,\n)\n\n# Plot the mesh on a Robinson projection using an ESRI spatial reference identifier.\np = gv.GeoPlotter(crs=\"ESRI:54030\")\nsargs = {\"title\": f\"{sample.name} / {sample.units}\"}\np.add_mesh(mesh, cmap=\"thermal\", show_edges=True, scalar_bar_args=sargs)\np.add_coastlines()\np.view_xy()\np.add_axes()\np.show()\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/readme/lfric-robin.png\"\n       alt=\"LFRic Model, Unstructured Cube Sphere of Surface Temperature in Robinson Projection\"\n       style=\"width: 75%; height: 75%\"\u003e\n\u003c/p\u003e\n\n#### NEMO ORCA2\n\nSo far we've demonstrated GeoVista's ability to cope with **unstructured** data. Now let's plot a **curvilinear** mesh\nusing Nucleus for European Modelling of the Ocean (NEMO) ORCA2 Sea Water Potential Temperature data, with\n[10m Natural Earth coastlines](https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-coastline/) and a\n[1:50m Natural Earth I](https://www.naturalearthdata.com/downloads/50m-raster-data/50m-natural-earth-1/) base layer.\n\n\u003cdetails aria-expanded=\"false\" aria-label=\"Click for code\"\u003e\n\u003csummary\u003e🗒 Click for code ...\u003c/summary\u003e\n\n```python\nimport geovista as gv\nfrom geovista.pantry.data import nemo_orca2\nimport geovista.theme\n\n# Load sample data.\nsample = nemo_orca2()\n\n# Create the mesh from the sample data.\nmesh = gv.Transform.from_2d(sample.lons, sample.lats, data=sample.data)\n\n# Remove cells from the mesh with NaN values.\nmesh = mesh.threshold()\n\n# Plot the mesh.\np = gv.GeoPlotter()\nsargs = {\"title\": f\"{sample.name} / {sample.units}\"}\np.add_mesh(mesh, show_edges=True, scalar_bar_args=sargs)\np.add_base_layer(texture=gv.natural_earth_1())\np.add_coastlines()\np.view_xy()\np.add_axes()\np.show()\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/readme/nemo-orca.png\"\n       alt=\"NEMO ORCA2 Model, Curvilinear Quadrilateral Mesh of Sea Water Potential Temperature\"\n       style=\"width: 75%; height: 75%\"\u003e\n\u003c/p\u003e\n\n#### OISST AVHRR\n\nNow let's render a [NOAA/NCEI Optimum Interpolation SST](https://www.ncei.noaa.gov/products/optimum-interpolation-sst)\n(OISST) Advanced Very High Resolution Radiometer (AVHRR) **rectilinear** mesh, with\n[10m Natural Earth coastlines](https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-coastline/) and a\n[NASA Blue Marble](https://visibleearth.nasa.gov/collection/1484/blue-marble) base layer.\n\n\u003cdetails aria-expanded=\"false\" aria-label=\"Click for code\"\u003e\n\u003csummary\u003e🗒 Click for code ...\u003c/summary\u003e\n\n```python\nimport geovista as gv\nfrom geovista.pantry.data import oisst_avhrr_sst\nimport geovista.theme\n\n# Load sample data.\nsample = oisst_avhrr_sst()\n\n# Create the mesh from the sample data.\nmesh = gv.Transform.from_1d(sample.lons, sample.lats, data=sample.data)\n\n# Remove cells from the mesh with NaN values.\nmesh = mesh.threshold()\n\n# Plot the mesh.\np = gv.GeoPlotter()\nsargs = {\"title\": f\"{sample.name} / {sample.units}\"}\np.add_mesh(mesh, scalar_bar_args=sargs)\np.add_base_layer(texture=gv.blue_marble())\np.add_coastlines()\np.view_xz()\np.add_axes()\np.show()\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/readme/oisst-avhrr.png\"\n       alt=\"Optimum Interpolation Sea Surface Temperature Advanced Very High Resolution Radiometer Model, Rectilinear Quadrilateral Mesh\"\n       style=\"width: 75%; height: 75%\"\u003e\n\u003c/p\u003e\n\n#### DYNAMICO\n\nFinally, to demonstrate support for non-traditional cell geometries i.e., not triangles or quadrilaterals, we plot\nthe **unstructured** mesh from the [DYNAMICO](https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico) project. This\nmodel uses hexagonal and pentagonal cells, and is a new dynamical core for\n[LMD-Z](https://www.lmd.ipsl.fr/en/modelisations/lmdz-en/), the atmospheric General Circulation Model (GCM) part of the\n[IPSL-CM](https://cmc.ipsl.fr/ipsl-climate-models/) Earth System Model. The render also contains\n[10m Natural Earth coastlines](https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-coastline/).\n\n\u003cdetails aria-expanded=\"false\" aria-label=\"Click for code\"\u003e\n\u003csummary\u003e🗒 Click for code ...\u003c/summary\u003e\n\n```python\nimport geovista as gv\nfrom geovista.pantry.data import dynamico\nimport geovista.theme\n\n# Load sample data.\nsample = dynamico()\n\n# Create the mesh from the sample data.\nmesh = gv.Transform.from_unstructured(sample.lons, sample.lats, data=sample.data)\n\n# Plot the mesh.\np = gv.GeoPlotter()\nsargs = {\"title\": f\"{sample.name} / {sample.units}\"}\np.add_mesh(mesh, scalar_bar_args=sargs)\np.add_coastlines()\np.add_axes()\np.show()\n```\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bjlittle/geovista-media/2024.07.0/media/readme/dynamico-icosahedral.png\"\n       alt=\"DYNAMICO Model, Unstructured Hexagonal Mesh of Surface Air Temperature\"\n       style=\"width: 75%; height: 75%\"\u003e\n\u003c/p\u003e\n\n## Further Examples\n\n\u003cp align=\"center\"\u003e\n\"\u003cem\u003ePlease, sir, I want some more\u003c/em\u003e\", Charles Dickens, Oliver Twist, 1838.\n\u003c/p\u003e\n\nCertainly, our pleasure! From the command line, simply:\n\n```bash\ngeovista examples --run all --verbose\n```\n\nWant to know more?\n```shell\ngeovista examples --help\n```\n\n\n## Candy Store 🍬\n\nWe've opened the doors to the [Candy Store 🍬](https://github.com/bjlittle/geovista/discussions/1033).\n\nA community space where you can openly share and promote how you're using\nGeoVista for your work, research or pleasure!\n\nShowcase your most awesome GeoVista eye candy with undiluted pride and tell\nus more about your work.\n\nWe'd 💚 to hear from you!\n\n\n## Documentation\n\nThe [documentation](https://geovista.readthedocs.io/en/latest/) is built by [Sphinx](https://www.sphinx-doc.org/en/master/) and hosted on [Read the Docs](https://docs.readthedocs.io/en/stable/).\n\n\n## Ecosystem\n\nWhilst you're here, why not hop on over to the [pyvista-xarray](https://github.com/pyvista/pyvista-xarray) project and\ncheck it out!\n\nIt's aiming to provide `xarray DataArray accessors for PyVista to visualize datasets in 3D` for the\n[xarray](https://github.com/pydata/xarray) community, and will be building on top of GeoVista 🎉\n\n\n## Support\n\nNeed help? 😢\n\nWhy not check out our [existing GitHub issues](https://github.com/bjlittle/geovista/issues). See something similar?\nWell, give it a 👍 to raise its priority and feel free to chip in on the conversation. Otherwise, don't hesitate to\ncreate a [new GitHub issue](https://github.com/bjlittle/geovista/issues/new/choose) instead.\n\nHowever, if you'd rather have a natter, then head on over to our\n[GitHub Discussions](https://github.com/bjlittle/geovista/discussions). That's definitely the place to wax lyrical all\nthings GeoVista!\n\n\n## License\n\nGeoVista is distributed under the terms of the [BSD-3-Clause](https://spdx.org/licenses/BSD-3-Clause.html) license.\n\n\n## Star History\n\nDiggin' GeoVista? Then why not show it some 💚 with a GitHub ⭐!\n\nIt's a simple click that means the world to us, and helps others discover our\ncommunity too!\n\n[![Star History Chart](https://api.star-history.com/svg?repos=bjlittle/geovista\u0026type=Date)](https://star-history.com/#bjlittle/geovista\u0026Date)\n\n\n## [#ShowYourStripes](https://showyourstripes.info/s/globe)\n\n\u003ch4 align=\"center\"\u003e\n  \u003ca href=\"https://showyourstripes.info/s/globe\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/ed-hawkins/show-your-stripes/master/2022/GLOBE---1850-2022-MO.png\"\n         height=\"50\" width=\"800\"\n         alt=\"#showyourstripes Global 1850-2022\"\u003e\u003c/a\u003e\n\u003c/h4\u003e\n\n**Graphics and Lead Scientist**: [Ed Hawkins](http://www.met.reading.ac.uk/~ed/home/index.php), National Centre for Atmospheric Science, University of Reading.\n\n**Data**: Berkeley Earth, NOAA, UK Met Office, MeteoSwiss, DWD, SMHI, UoR, Meteo France \u0026 ZAMG.\n\n\u003cp\u003e\n\u003ca href=\"https://showyourstripes.info/s/globe\"\u003e#ShowYourStripes\u003c/a\u003e is distributed under a\n\u003ca href=\"https://creativecommons.org/licenses/by/4.0/\"\u003eCreative Commons Attribution 4.0 International License\u003c/a\u003e\n\u003ca href=\"https://creativecommons.org/licenses/by/4.0/\"\u003e\n  \u003cimg src=\"https://i.creativecommons.org/l/by/4.0/80x15.png\"\n       alt=\"creative-commons-by\" style=\"border-width:0\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjlittle%2Fgeovista","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbjlittle%2Fgeovista","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjlittle%2Fgeovista/lists"}