question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

plot dataset with 2D coordinate variables

See original GitHub issue

I have an xarray dataset with the following structure:

<xarray.Dataset>
Dimensions:   (face: 13, i: 4320, j: 4320,  k: 90, time: 1)
Coordinates:
  * k         (k) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
  * j         (j) float64 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 ...
  * i         (i) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
  * face      (face) int64 0 1 2 3 4 5 6 7 8 9 10 11 12
    iter      (time) int64 487152
  * time      (time) int64 487152
    XC        (face, j, i) >f4 -114.932 -114.932 -114.932 -114.932 -114.932 ...
    YC        (face, j, i) >f4 -88.1771 -88.1801 -88.183 -88.1859 -88.1888 ...
    Z         (k) >f4 -0.5 -1.57 -2.79 -4.185 -5.78 -7.595 -9.66 -12.01 ...
Data variables:
    Theta     (time, k, face, j, i) >f4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ...
    Salt      (time, k, face, j, i) >f4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ...

This is an enormous dataset from a ocean simulation using a faceted curvilinear grid. The longitudes latitudes, and depths of the data are encoded by the variables ‘XC’ and ‘YC’.

I am trying, unsuccessfully, to use geoviews to visualize this data. Here is what I am doing:

import geoviews as gv
gvds_from_xr = gv.Dataset(ds, kdims=['XC', 'YC', 'Z', 'time'], vdims=['Theta', 'Salt'])
gvds_from_xr.to(gv.Image, ['XC', 'YC'])

This raises the error

ValueError: dimensions or multi-index levels ['Z'] do not exist

If I try

gvds_from_xr = gv.Dataset(ds, kdims=['XC', 'YC', 'k', 'time'], vdims=['Theta', 'Salt'])
gvds_from_xr.to(gv.Image, ['XC', 'YC'])

(replacing physical dimension ‘Z’ with logical dimension ‘k’) I get the following stack trace:

ValueErrorTraceback (most recent call last)
<ipython-input-27-02d44a5c1c08> in <module>()
      2 get_ipython().magic(u"time gvds_from_xr = gv.Dataset(ds, kdims=['XC', 'YC', 'k', 'time'], vdims=['Theta', 'Salt'])")
      3 print(gvds_from_xr)
----> 4 get_ipython().magic(u"time gvds_from_xr.to(gv.Image, ['XC', 'YC'])")

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc in magic(self, arg_s)
   2156         magic_name, _, magic_arg_s = arg_s.partition(' ')
   2157         magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
-> 2158         return self.run_line_magic(magic_name, magic_arg_s)
   2159 
   2160     #-------------------------------------------------------------------------

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc in run_line_magic(self, magic_name, line)
   2077                 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
   2078             with self.builtin_trap:
-> 2079                 result = fn(*args,**kwargs)
   2080             return result
   2081 

<decorator-gen-59> in time(self, line, cell, local_ns)

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/IPython/core/magic.pyc in <lambda>(f, *a, **k)
    186     # but it's overkill for just that one bit of state.
    187     def magic_deco(arg):
--> 188         call = lambda f, *a, **k: f(*a, **k)
    189 
    190         if callable(arg):

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/IPython/core/magics/execution.pyc in time(self, line, cell, local_ns)
   1174         if mode=='eval':
   1175             st = clock2()
-> 1176             out = eval(code, glob, local_ns)
   1177             end = clock2()
   1178         else:

<timed eval> in <module>()

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/geoviews/element/__init__.pyc in __call__(self, *args, **kwargs)
     24         if 'crs' not in kwargs and issubclass(group_type, _Element):
     25             kwargs['crs'] = self._element.crs
---> 26         return super(GeoConversion, self).__call__(*args, **kwargs)
     27 
     28     def linecontours(self, kdims=None, vdims=None, mdims=None, **kwargs):

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/data/__init__.pyc in __call__(self, new_type, kdims, vdims, mdims, sort, **kwargs)
     92             return element.sort() if sort else element
     93         group = selected.groupby(mdims, container_type=HoloMap,
---> 94                                  group_type=new_type, **params)
     95         if sort:
     96             return group.map(lambda x: x.sort(), [new_type])

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/data/__init__.pyc in groupby(self, dimensions, container_type, group_type, dynamic, **kwargs)
    409 
    410         return self.interface.groupby(self, dim_names, container_type,
--> 411                                       group_type, **kwargs)
    412 
    413     def __len__(self):

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/data/xarray.pyc in groupby(cls, dataset, dimensions, container_type, group_type, **kwargs)
    110             data = [(k, group_type(dataset.data.sel(**dict(zip(dimensions, k))),
    111                                    **group_kwargs))
--> 112                     for k in indexes]
    113 
    114         if issubclass(container_type, NdMapping):

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/geoviews/element/geo.pyc in __init__(self, data, **kwargs)
     83         elif crs:
     84             kwargs['crs'] = crs
---> 85         super(_Element, self).__init__(data, **kwargs)
     86 
     87 

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/element/raster.pyc in __init__(self, data, **params)
    657 
    658     def __init__(self, data, **params):
--> 659         super(GridImage, self).__init__(data, **params)
    660         (l, r), (b, t) = self.interface.range(self, 0), self.interface.range(self, 1)
    661         (ys, xs) = self.dimension_values(2, flat=False).shape

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/data/__init__.pyc in __init__(self, data, **kwargs)
    135                                            datatype=kwargs.get('datatype'))
    136         (data, self.interface, dims, extra_kws) = initialized
--> 137         super(Dataset, self).__init__(data, **dict(extra_kws, **dict(kwargs, **dims)))
    138         self.interface.validate(self)
    139 

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/dimension.pyc in __init__(self, data, **params)
    593                                   for d in params.pop(group)]
    594                 params[group] = dimensions
--> 595         super(Dimensioned, self).__init__(data, **params)
    596         self.ndims = len(self.kdims)
    597         cdims = [(d.name, val) for d, val in self.cdims.items()]

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/dimension.pyc in __init__(self, data, id, **params)
    297             params['group'] = long_name
    298 
--> 299         super(LabelledData, self).__init__(**params)
    300         if not group_sanitizer.allowable(self.group):
    301             raise ValueError("Supplied group %r contains invalid characters." %

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/param/parameterized.pyc in __init__(self, **params)
   1039         self.__generate_name()
   1040 
-> 1041         self._setup_params(**params)
   1042         object_count += 1
   1043 

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/param/parameterized.pyc in override_initialization(parameterized_instance, *args, **kw)
    976         original_initialized=parameterized_instance.initialized
    977         parameterized_instance.initialized=False
--> 978         fn(parameterized_instance,*args,**kw)
    979         parameterized_instance.initialized=original_initialized
    980     return override_initialization

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/param/parameterized.pyc in _setup_params(self, **params)
   1439                 self.warning("Setting non-parameter attribute %s=%s using a mechanism intended only for parameters",name,val)
   1440             # i.e. if not desc it's setting an attribute in __dict__, not a Parameter
-> 1441             setattr(self,name,val)
   1442 
   1443 

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/param/__init__.pyc in __set__(self, obj, val)
   1151     def __set__(self,obj,val):
   1152         """Set to the given value, raising an exception if out of bounds."""
-> 1153         self._check_bounds(val)
   1154         super(List,self).__set__(obj,val)
   1155 

/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/param/__init__.pyc in _check_bounds(self, val)
   1170             if min_length is not None and max_length is not None:
   1171                 if not (min_length <= l <= max_length):
-> 1172                     raise ValueError("%s: list length must be between %s and %s (inclusive)"%(self._attrib_name,min_length,max_length))
   1173             elif min_length is not None:
   1174                 if not min_length <= l:

ValueError: vdims: list length must be between 1 and 1 (inclusive)

Clearly I am doing something wrong, but I can’t figure out what.

Thanks for any help you can provide.

Issue Analytics

  • State:closed
  • Created 6 years ago
  • Comments:5 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
philippjfrcommented, Jan 8, 2018

hv/gv.Dataset now natively understands datasets with multi-dimensional coordinates and they can now be plotted with a QuadMesh. Closing.

0reactions
philippjfrcommented, Apr 26, 2017

@rabernat We have now released both HoloViews 1.7.0 and GeoViews 1.2.0 and are now focusing on improving the documentation. Could you try updating to the latest versions using:

conda install -c ioam -c conda-forge holoviews geoviews

And report back if everything is working for you?

Read more comments on GitHub >

github_iconTop Results From Across the Web

Working with Multidimensional Coordinates - Xarray
Many datasets have physical coordinates which differ from their logical coordinates. Xarray provides several ways to plot and analyze such datasets.
Read more >
Working with Multidimensional Coordinates - Xarray - PyData |
Many datasets have physical coordinates which differ from their logical coordinates. Xarray provides several ways to plot and analyze such datasets.
Read more >
How to Plot List of X, Y Coordinates in Matplotlib?
Method 1: Naive method · Import module · Create a list for X coordinates · Create a list for Y coordinate · Pass...
Read more >
Plotting a 2D Contour from data (A variable with its XY ...
I need to plot a 2D Contour form data. I have a variable called "Intensity" with 224x1 values and I have a variable...
Read more >
1D, 2D, and 3D Cross-Section Point Plots
Create a Cut Point 2D dataset. Under Point Data, enter the x- and y-coordinate values for the plot. Enter the same number of...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found