Closed rabernat closed 6 years ago
Hi @rabernat, the issue is that the to
interface eagerly populates the value dimensions of the gv.Image
with all available value dimensions, and the Image
is complaining because it's only expecting a single value dimension. I'll think about providing better exception messages for this case but the straightforward fix should be this:
gvds_from_xr = gv.Dataset(ds, kdims=['XC', 'YC', 'k', 'time'], vdims=['Theta', 'Salt'])
gvds_from_xr.to(gv.Image, ['XC', 'YC'], 'Theta', dynamic=True)
Here we explicitly told it that the Image should show the Theta
values of your dataset, you can of course visualize Salt
in the same way. If your dataset is really large I'd also strongly recommend using dynamic=True
in this case which will ensure it lazily loads your data. Unlike the non-dynamic case this won't auto-compute a global normalization range for your images so if you want you can use redim
to set an absolute range:
gvds_from_xr.to(gv.Image, ['XC', 'YC'], 'Theta', dynamic=True).redim(Theta=dict(range=(0,100)))
Let me know if you have any more questions we're usually available on Gitter.
Thanks for your quick reply! Your code worked, but I hit a new problem when trying to actually view the map. I will follow up on gitter.
Just for completeness, here is the error I get when I print that last line:
AttributeErrorTraceback (most recent call last)
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/IPython/core/formatters.pyc in __call__(self, obj)
305 pass
306 else:
--> 307 return printer(obj)
308 # Finally look for special method names
309 method = get_real_method(obj, self.print_method)
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/ipython/display_hooks.pyc in pprint_display(obj)
214 if not ip.display_formatter.formatters['text/plain'].pprint:
215 return None
--> 216 return display(obj, raw=True)
217
218
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/ipython/display_hooks.pyc in display(obj, raw, **kwargs)
200 html = layout_display(obj)
201 elif isinstance(obj, (HoloMap, DynamicMap)):
--> 202 html = map_display(obj)
203 else:
204 return repr(obj) if raw else IPython.display.display(obj, **kwargs)
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/ipython/display_hooks.pyc in wrapped(element)
101 html = fn(element,
102 max_frames=OutputMagic.options['max_frames'],
--> 103 max_branches = OutputMagic.options['max_branches'])
104
105 # Only want to add to the archive for one display hook...
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/ipython/display_hooks.pyc in map_display(vmap, max_frames, max_branches)
154 return sanitize_HTML(vmap)
155
--> 156 return render(vmap)
157
158
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/ipython/display_hooks.pyc in render(obj, **kwargs)
49
50 backend = Store.current_backend
---> 51 return Store.renderers[backend].html(obj, **kwargs)
52
53
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/plotting/renderer.pyc in html(self, obj, fmt, css)
248 Renders plot or data structure and wraps the output in HTML.
249 """
--> 250 plot, fmt = self._validate(obj, fmt)
251 figdata, _ = self(plot, fmt)
252 if css is None: css = self.css
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/plotting/renderer.pyc in _validate(self, obj, fmt)
188 if isinstance(obj, tuple(self.widgets.values())):
189 return obj, 'html'
--> 190 plot = self.get_plot(obj)
191
192 fig_formats = self.mode_formats['fig'][self.mode]
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/plotting/renderer.pyc in get_plot(self_or_cls, obj)
164 continue
165 if dmap.call_mode == 'key':
--> 166 dmap[dmap._initial_key()]
167 else:
168 try:
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/spaces.pyc in __getitem__(self, key)
669 # Not a cross product and nothing cached so compute element.
670 if cache: return cache
--> 671 val = self._execute_callback(*tuple_key)
672 if self.call_mode == 'counter':
673 val = val[1]
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/spaces.pyc in _execute_callback(self, *args)
542 retval = next(self.callback)
543 else:
--> 544 retval = self.callback(*args)
545
546 if self.call_mode=='key':
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/data/__init__.pyc in load_subset(*args)
403 return group_type(([group],), group=self.group,
404 label=self.label, vdims=self.vdims)
--> 405 return group_type(group.reindex(group_dims), **group_kwargs)
406 dynamic_dims = [d(values=list(self.interface.values(self, d.name, False)))
407 for d in dimensions]
/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)
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
662 xsampling = (float(r-l)/(xs-1))/2.
/home/rpa/.conda/envs/lagrangian_vorticity/lib/python2.7/site-packages/holoviews/core/data/xarray.pyc in range(cls, dataset, dimension)
80 data = dataset.data[dim]
81 dmin, dmax = data.min().data, data.max().data
---> 82 dmin = dmin if np.isscalar(dmin) else dmin.item()
83 dmax = dmax if np.isscalar(dmax) else dmax.item()
84 return dmin, dmax
AttributeError: 'Array' object has no attribute 'item'
Out[41]:
:DynamicMap [k,time]
@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?
hv/gv.Dataset
now natively understands datasets with multi-dimensional coordinates and they can now be plotted with a QuadMesh
. Closing.
I have an xarray dataset with the following structure:
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:
This raises the error
If I try
(replacing physical dimension 'Z' with logical dimension 'k') I get the following stack trace:
Clearly I am doing something wrong, but I can't figure out what.
Thanks for any help you can provide.