GeoViews#

Mit GeoViews lassen sich geografische, meteorologische und ozeanografische Datensätze leicht erkunden und visualisieren. GeoViews basiert auf HoloViews und ergänzt deren Visualisierung multidimensionaler Daten um geografischen Plot-Typen, die auf Cartopy basieren.

Installation#

Wenn Cartopy bereits installiert ist, kann GeoViews mit pipenv installiert werden:

$ pipenv install geoviews

Beispiele#

GeoViews arbeitet gut mit Iris- und xarray-Bibliotheken für mehrdimensionale Arrays zusammen, wie sie in netCDF-Dateien gespeichert sind. GeoViews akzeptiert jedoch auch Daten als NumPy-Arrays und Pandas-Datenrahmen. In jedem Fall können die Daten in ihrem ursprünglichen, nativen Format gespeichert und in ein HoloViews- oder GeoViews-Objekt verpackt werden, das interaktive Visualisierungen ermöglicht.

xarray-Beispiel#

Für das folgende Beispiel benötigen wir ebenfalls noch xarray. Es kann mit Spack installiert werden mit:

$ spack install py-xarray
[1]:
import geoviews as gv
import geoviews.feature as gf
import xarray as xr

from cartopy import crs


gv.extension("bokeh", "matplotlib")
[2]:
(gf.ocean + gf.land + gf.ocean * gf.land * gf.coastline * gf.borders).opts(
    "Feature", projection=crs.Geostationary(), global_extent=True, height=325
).cols(3)
[2]:

Als Beispieldaten verwenden wir geoviews-sample-data.zip und entpacken es als data-Verzeichnis.

[3]:
!curl http://assets.holoviews.org/geoviews-sample-data.zip --output geoviews-sample-data.zip
!unzip geoviews-sample-data.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 6246k  100 6246k    0     0  5679k      0  0:00:01  0:00:01 --:--:-- 5694k
Archive:  geoviews-sample-data.zip
  inflating: ensemble.nc
  inflating: ensembles.nc
  inflating: pre-industrial.nc
[4]:
dataset = gv.Dataset(xr.open_dataset("./ensemble.nc"))
ensemble = dataset.to(
    gv.Image, ["longitude", "latitude"], "surface_temperature"
)

gv.output(
    ensemble.opts(
        cmap="viridis", colorbar=True, fig_size=200, backend="matplotlib"
    )
    * gf.coastline(),
    backend="matplotlib",
)

GeoPandas-Beispiel#

GeoViews unterstützt auch nativ GeoPandas-Datenstrukturen, so dass wir shapefiles und Choropleth einfach darstellen können:

[4]:
import geopandas as gpd


gv.Polygons(
    gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")),
    vdims=["pop_est", ("name", "Country")],
).opts(tools=["hover"], width=600, projection=crs.Robinson())
/tmp/ipykernel_88986/2104909695.py:5: FutureWarning: The geopandas.dataset module is deprecated and will be removed in GeoPandas 1.0. You can get the original 'naturalearth_lowres' data from https://www.naturalearthdata.com/downloads/110m-cultural-vectors/.
  gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")),
[4]: