Skip to main content

xarray DataArray accessors for PyVista

Project description

PyVista xarray

PyPI codecov MyBinder

xarray DataArray accessors for PyVista to visualize datasets in 3D

🚀 Usage

You must import pvxarray in order to register the DataArray accessor with xarray. After which, a pyvista namespace of accessors will be available.

Try on MyBinder: https://mybinder.org/v2/gh/pyvista/pyvista-xarray/HEAD

The following is an example to visualize a RectilinearGrid with PyVista:

import pvxarray
import xarray as xr

ds = xr.tutorial.load_dataset("air_temperature")
da = ds.air[dict(time=0)]  # Select DataArray for a timestep

# Plot in 3D
da.pyvista.plot(x="lon", y="lat", show_edges=True, cpos='xy')

# Or grab the mesh object for use with PyVista
mesh = da.pyvista.mesh(x="lon", y="lat")

air_temperature

Or you can read VTK meshes directly to xarray:

import xarray as xr

ds = xr.open_dataset("data.vtk", engine="pyvista")
ds["data array"].pyvista.plot(x="x", y="y", z="z")

⬇️ Installation

🐍 Installing with conda

Conda makes managing pyvista-xarray's dependencies across platforms quite easy and this is the recommended method to install:

conda install -c conda-forge pyvista-xarray

🎡 Installing with pip

If you prefer pip, then you can install from PyPI: https://pypi-hypernode.com/project/pyvista-xarray/

pip install pyvista-xarray

Upstream Work

Many of the examples leverage brand new features in PyVista v0.38.1 and GeoVista which may not yet be released when you're reading this. Here is a list of pull requests needed for some of the examples:

Work that was required and merged:

💭 Feedback

Please share your thoughts and questions on the Discussions board. If you would like to report any bugs or make feature requests, please open an issue.

If filing a bug report, please share a scooby Report:

import pvxarray
print(pvxarray.Report())

🏏 Further Examples

The following are a few simple examples taken from the xarray and rioxarray documentation. There are also more sophisticated examples in the examples/ directory in this repository.

Simple RectilinearGrid

import numpy as np
import pvxarray
import xarray as xr

lon = np.array([-99.83, -99.32])
lat = np.array([42.25, 42.21])
z = np.array([0, 10])
temp = 15 + 8 * np.random.randn(2, 2, 2)

ds = xr.Dataset(
    {
        "temperature": (["z", "x", "y"], temp),
    },
    coords={
        "lon": (["x"], lon),
        "lat": (["y"], lat),
        "z": (["z"], z),
    },
)

mesh = ds.temperature.pyvista.mesh(x="lon", y="lat", z="z")
mesh.plot()

Raster with rioxarray

import pvxarray
import rioxarray
import xarray as xr

da = rioxarray.open_rasterio("TC_NG_SFBay_US_Geo_COG.tif")
da = da.rio.reproject("EPSG:3857")

# Grab the mesh object for use with PyVista
mesh = da.pyvista.mesh(x="x", y="y", component="band")

mesh.plot(scalars="data", cpos='xy', rgb=True)

raster

import pvxarray
import rioxarray

da = rioxarray.open_rasterio("Elevation.tif")
da = da.rio.reproject("EPSG:3857")

# Grab the mesh object for use with PyVista
mesh = da.pyvista.mesh(x="x", y="y")

# Warp top and plot in 3D
mesh.warp_by_scalar().plot()

topo

StructuredGrid

import pvxarray
import pyvista as pv
import xarray as xr

ds = xr.tutorial.open_dataset("ROMS_example.nc", chunks={"ocean_time": 1})

if ds.Vtransform == 1:
    Zo_rho = ds.hc * (ds.s_rho - ds.Cs_r) + ds.Cs_r * ds.h
    z_rho = Zo_rho + ds.zeta * (1 + Zo_rho / ds.h)
elif ds.Vtransform == 2:
    Zo_rho = (ds.hc * ds.s_rho + ds.Cs_r * ds.h) / (ds.hc + ds.h)
    z_rho = ds.zeta + (ds.zeta + ds.h) * Zo_rho

ds.coords["z_rho"] = z_rho.transpose()  # needing transpose seems to be an xarray bug

da = ds.salt[dict(ocean_time=0)]

# Make array ordering consistent
da = da.transpose("s_rho", "xi_rho", "eta_rho", transpose_coords=False)

# Grab StructuredGrid mesh
mesh = da.pyvista.mesh(x="lon_rho", y="lat_rho", z="z_rho")

# Plot in 3D
p = pv.Plotter()
p.add_mesh(mesh, lighting=False, cmap='plasma', clim=[0, 35])
p.view_vector([1, -1, 1])
p.set_scale(zscale=0.001)
p.show()

raster

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyvista-xarray-0.1.7.tar.gz (26.3 MB view details)

Uploaded Source

Built Distribution

pyvista_xarray-0.1.7-py3-none-any.whl (17.7 kB view details)

Uploaded Python 3

File details

Details for the file pyvista-xarray-0.1.7.tar.gz.

File metadata

  • Download URL: pyvista-xarray-0.1.7.tar.gz
  • Upload date:
  • Size: 26.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.19

File hashes

Hashes for pyvista-xarray-0.1.7.tar.gz
Algorithm Hash digest
SHA256 c25d555e27c6b9f2cda5a14feefb4cc3ba8f5b93f70f876779a0a5e0fded7651
MD5 751b3af491b68763507bdacc8b6f9709
BLAKE2b-256 4815bbc16110e80533af5cd4e59315e74901c76c5dd04366e3f351a1754b83ef

See more details on using hashes here.

File details

Details for the file pyvista_xarray-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for pyvista_xarray-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 7d7aef884eb21374a7b25dc6154ab040ea0c0f220a40edf6903c7368177b856e
MD5 6d8d56418f306d17320cc51f70f3eb5f
BLAKE2b-256 706a815147d7f6e32148abd55cf0da10b571e307f5b8fc9a0498112807b0544e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page