Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KeyError: 'show_bounds' when setting projection #433

Closed
kcpevey opened this issue Feb 19, 2020 · 9 comments
Closed

KeyError: 'show_bounds' when setting projection #433

kcpevey opened this issue Feb 19, 2020 · 9 comments

Comments

@kcpevey
Copy link

kcpevey commented Feb 19, 2020

ALL software version info

geoviews 1.7.0a3
bokeh 1.4.0

Description of expected behavior and the observed behavior

Complete, minimal, self-contained example code that reproduces the issue

This will plot correctly:

gv.Polygons([[[-88.8, 1], [-88.81, 30], [-60, 30], [-60, 1]]], crs=crs.PlateCarree())

But this will throw an error:

gv.Polygons([[[-88.8, 1], [-88.81, 30], [-60, 30], [-60, 1]]], crs=crs.PlateCarree()).opts(opts.Polygons(projection=crs.Robinson()))

Stack traceback and/or browser JavaScript console output

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/IPython/core/formatters.py in __call__(self, obj, include, exclude)
    968 
    969             if method is not None:
--> 970                 return method(include=include, exclude=exclude)
    971             return None
    972         else:

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/core/dimension.py in _repr_mimebundle_(self, include, exclude)
   1295         combined and returned.
   1296         """
-> 1297         return Store.render(self)
   1298 
   1299 

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/core/options.py in render(cls, obj)
   1386         data, metadata = {}, {}
   1387         for hook in hooks:
-> 1388             ret = hook(obj)
   1389             if ret is None:
   1390                 continue

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/ipython/display_hooks.py in pprint_display(obj)
    280     if not ip.display_formatter.formatters['text/plain'].pprint:
    281         return None
--> 282     return display(obj, raw_output=True)
    283 
    284 

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/ipython/display_hooks.py in display(obj, raw_output, **kwargs)
    250     elif isinstance(obj, (CompositeOverlay, ViewableElement)):
    251         with option_state(obj):
--> 252             output = element_display(obj)
    253     elif isinstance(obj, (Layout, NdLayout, AdjointLayout)):
    254         with option_state(obj):

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/ipython/display_hooks.py in wrapped(element)
    144         try:
    145             max_frames = OutputSettings.options['max_frames']
--> 146             mimebundle = fn(element, max_frames=max_frames)
    147             if mimebundle is None:
    148                 return {}, {}

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/ipython/display_hooks.py in element_display(element, max_frames)
    190         return None
    191 
--> 192     return render(element)
    193 
    194 

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/ipython/display_hooks.py in render(obj, **kwargs)
     66         renderer = renderer.instance(fig='png')
     67 
---> 68     return renderer.components(obj, **kwargs)
     69 
     70 

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/plotting/renderer.py in components(self, obj, fmt, comm, **kwargs)
    361             doc = Document()
    362             with config.set(embed=embed):
--> 363                 model = plot.layout._render_model(doc, comm)
    364             return render_model(model, comm) if embed else render_mimebundle(model, doc, comm)
    365         else:

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/panel/viewable.py in _render_model(self, doc, comm)
    355         if comm is None:
    356             comm = state._comm_manager.get_server_comm()
--> 357         model = self.get_root(doc, comm)
    358 
    359         if config.embed:

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/panel/viewable.py in get_root(self, doc, comm)
    526         """
    527         doc = doc or _curdoc()
--> 528         root = self._get_model(doc, comm=comm)
    529         self._preprocess(root)
    530         ref = root.ref['id']

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/panel/layout.py in _get_model(self, doc, root, parent, comm)
    134         if root is None:
    135             root = model
--> 136         objects = self._get_objects(model, [], doc, root, comm)
    137         props = dict(self._init_properties(), objects=objects)
    138         model.update(**self._process_param_change(props))

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/panel/layout.py in _get_objects(self, model, old_objects, doc, root, comm)
    124             else:
    125                 try:
--> 126                     child = pane._get_model(doc, root, model, comm)
    127                 except RerenderError:
    128                     return self._get_objects(model, current_objects[:i], doc, root, comm)

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/panel/pane/holoviews.py in _get_model(self, doc, root, parent, comm)
    225             plot = self.object
    226         else:
--> 227             plot = self._render(doc, comm, root)
    228 
    229         plot.pane = self

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/panel/pane/holoviews.py in _render(self, doc, comm, root)
    284             kwargs = {}
    285 
--> 286         return renderer.get_plot(self.object, **kwargs)
    287 
    288     def _cleanup(self, root):

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/plotting/bokeh/renderer.py in get_plot(self_or_cls, obj, doc, renderer, **kwargs)
     70         combining the bokeh model with another plot.
     71         """
---> 72         plot = super(BokehRenderer, self_or_cls).get_plot(obj, doc, renderer, **kwargs)
     73         if plot.document is None:
     74             plot.document = Document() if self_or_cls.notebook_context else curdoc()

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/holoviews/plotting/renderer.py in get_plot(self_or_cls, obj, doc, renderer, comm, **kwargs)
    215             plot_opts = dict(self_or_cls.plot_options(obj, self_or_cls.size),
    216                              **kwargs)
--> 217             plot = self_or_cls.plotting_class(obj)(obj, renderer=renderer,
    218                                                    **plot_opts)
    219             defaults = [kd.default for kd in plot.dimensions]

//miniconda3/envs/lsst_dev/lib/python3.8/site-packages/geoviews/plotting/bokeh/plot.py in __init__(self, element, **params)
     66             show_bounds = self._traverse_options(element, 'plot', ['show_bounds'],
     67                                                  defaults=False)
---> 68             self.show_bounds = not any(not sb for sb in show_bounds['show_bounds'])
     69             if self.show_grid:
     70                 param.main.warning(

KeyError: 'show_bounds'

I'll also note that running the broken code above on gv 1.6.6 does not throw an error

@Sieboldianus
Copy link

Sieboldianus commented Mar 22, 2020

I get the same error. In my case, I also get it with 1.6.6.

Versions:

  • python==3.7
  • bokeh==2.0.0
  • geoviews==1.6.6
  • holoviews==1.13.0

Notes:

  • Installed with conda from channels pyviz and conda-forge, in that order, with strict channel-priority).
  • With Holoviews 1.12.7 and bokeh 1.4.0, it doesn't show up.

@philippjfr
Copy link
Member

Thanks. I'll release a fix later today.

@philippjfr
Copy link
Member

Note that this is already fixed on master.

@drastogi4
Copy link

Hi,
I am getting the error below while using holoviews overlay command
Command:
ndoverlay = grouped.overlay('Country')
ndoverlay.opts(
opts.Curve(width=700,height=250,color=hv.Cycle('Category20')))
The current holoviews version is 1.13.1 and bokeh version is 2.0.0
It was working fine with holoviews version 1.12.7 and bokeh version 1.4.0. Not sure what happened. Thanks for your help.


KeyError Traceback (most recent call last)
/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/IPython/core/formatters.py in call(self, obj, include, exclude)
968
969 if method is not None:
--> 970 return method(include=include, exclude=exclude)
971 return None
972 else:

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/core/dimension.py in repr_mimebundle(self, include, exclude)
1302 combined and returned.
1303 """
-> 1304 return Store.render(self)
1305
1306

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/core/options.py in render(cls, obj)
1393 data, metadata = {}, {}
1394 for hook in hooks:
-> 1395 ret = hook(obj)
1396 if ret is None:
1397 continue

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/ipython/display_hooks.py in pprint_display(obj)
280 if not ip.display_formatter.formatters['text/plain'].pprint:
281 return None
--> 282 return display(obj, raw_output=True)
283
284

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/ipython/display_hooks.py in display(obj, raw_output, **kwargs)
250 elif isinstance(obj, (CompositeOverlay, ViewableElement)):
251 with option_state(obj):
--> 252 output = element_display(obj)
253 elif isinstance(obj, (Layout, NdLayout, AdjointLayout)):
254 with option_state(obj):

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/ipython/display_hooks.py in wrapped(element)
144 try:
145 max_frames = OutputSettings.options['max_frames']
--> 146 mimebundle = fn(element, max_frames=max_frames)
147 if mimebundle is None:
148 return {}, {}

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/ipython/display_hooks.py in element_display(element, max_frames)
190 return None
191
--> 192 return render(element)
193
194

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/ipython/display_hooks.py in render(obj, **kwargs)
66 renderer = renderer.instance(fig='png')
67
---> 68 return renderer.components(obj, **kwargs)
69
70

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/plotting/renderer.py in components(self, obj, fmt, comm, **kwargs)
363 doc = Document()
364 with config.set(embed=embed):
--> 365 model = plot.layout._render_model(doc, comm)
366 return render_model(model, comm) if embed else render_mimebundle(model, doc, comm)
367 else:

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/panel/viewable.py in _render_model(self, doc, comm)
363 if comm is None:
364 comm = state._comm_manager.get_server_comm()
--> 365 model = self.get_root(doc, comm)
366
367 if config.embed:

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/panel/viewable.py in get_root(self, doc, comm)
534 """
535 doc = doc or _curdoc()
--> 536 root = self._get_model(doc, comm=comm)
537 self._preprocess(root)
538 ref = root.ref['id']

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/panel/layout.py in _get_model(self, doc, root, parent, comm)
134 if root is None:
135 root = model
--> 136 objects = self._get_objects(model, [], doc, root, comm)
137 props = dict(self._init_properties(), objects=objects)
138 model.update(**self._process_param_change(props))

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/panel/layout.py in _get_objects(self, model, old_objects, doc, root, comm)
124 else:
125 try:
--> 126 child = pane._get_model(doc, root, model, comm)
127 except RerenderError:
128 return self._get_objects(model, current_objects[:i], doc, root, comm)

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/panel/pane/holoviews.py in _get_model(self, doc, root, parent, comm)
225 plot = self.object
226 else:
--> 227 plot = self._render(doc, comm, root)
228
229 plot.pane = self

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/panel/pane/holoviews.py in _render(self, doc, comm, root)
284 kwargs = {}
285
--> 286 return renderer.get_plot(self.object, **kwargs)
287
288 def _cleanup(self, root):

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/plotting/bokeh/renderer.py in get_plot(self_or_cls, obj, doc, renderer, **kwargs)
71 combining the bokeh model with another plot.
72 """
---> 73 plot = super(BokehRenderer, self_or_cls).get_plot(obj, doc, renderer, **kwargs)
74 if plot.document is None:
75 plot.document = Document() if self_or_cls.notebook_context else curdoc()

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/plotting/renderer.py in get_plot(self_or_cls, obj, doc, renderer, comm, **kwargs)
217 obj = Layout(obj)
218 plot = self_or_cls.plotting_class(obj)(obj, renderer=renderer,
--> 219 **plot_opts)
220 defaults = [kd.default for kd in plot.dimensions]
221 init_key = tuple(v if d is None else d for v, d in

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/geoviews/plotting/bokeh/plot.py in init(self, element, **params)
179
180 def init(self, element, **params):
--> 181 super(GeoOverlayPlot, self).init(element, **params)
182 self.geographic = any(element.traverse(is_geographic, [_Element]))
183 if self.geographic:

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/geoviews/plotting/bokeh/plot.py in init(self, element, **params)
61
62 def init(self, element, **params):
---> 63 super(GeoPlot, self).init(element, **params)
64 self.geographic = is_geographic(self.hmap.last)
65 if self.geographic and not isinstance(self.projection, (PlateCarree, Mercator)):

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/holoviews/plotting/plot.py in init(self, overlay, ranges, batched, keys, group_counter, **params)
1449 def init(self, overlay, ranges=None, batched=True, keys=None, group_counter=None, **params):
1450 if 'projection' not in params:
-> 1451 params['projection'] = self._get_projection(overlay)
1452
1453 super(GenericOverlayPlot, self).init(overlay, ranges=ranges, keys=keys,

/Applications/anaconda3/envs/idap/lib/python3.7/site-packages/geoviews/plotting/plot.py in _get_projection(self, obj)
34 [CompositeOverlay, Element],
35 keyfn=isoverlay, defaults=False)
---> 36 from_overlay = not all(p is None for p in opts[True]['projection'])
37 projections = opts[from_overlay]['projection']
38 infer = any(opts[from_overlay]['infer_projection']) or self.infer_projection

KeyError: 'projection'

Out[6]:
:NdOverlay [Country]
:Curve [Date] (Confirmed)

@philippjfr
Copy link
Member

You'll have to upgrade to GeoViews 1.7.0 or 1.8.0 (depending on which bokeh version you are using).

@drastogi4
Copy link

Thanks for your prompt response. I get the following error when I try to install Geoviews 1.7.0
Collecting package metadata (repodata.json): done
Solving environment: failed

ResolvePackageNotFound:

  • geoviews[version='>=1.7.0']

Thanks.

@philippjfr
Copy link
Member

For now it's only available on the pyviz channel:

conda install -c pyviz geoviews>=1.7

@akchaudhary57
Copy link

I tried "conda install -c pyviz geoviews>=1.7" but still I have same issue.


KeyError Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\formatters.py in call(self, obj, include, exclude)
968
969 if method is not None:
--> 970 return method(include=include, exclude=exclude)
971 return None
972 else:

~\AppData\Roaming\Python\Python37\site-packages\holoviews\core\dimension.py in repr_mimebundle(self, include, exclude)
1302 combined and returned.
1303 """
-> 1304 return Store.render(self)
1305
1306

~\AppData\Roaming\Python\Python37\site-packages\holoviews\core\options.py in render(cls, obj)
1393 data, metadata = {}, {}
1394 for hook in hooks:
-> 1395 ret = hook(obj)
1396 if ret is None:
1397 continue

~\AppData\Roaming\Python\Python37\site-packages\holoviews\ipython\display_hooks.py in pprint_display(obj)
280 if not ip.display_formatter.formatters['text/plain'].pprint:
281 return None
--> 282 return display(obj, raw_output=True)
283
284

~\AppData\Roaming\Python\Python37\site-packages\holoviews\ipython\display_hooks.py in display(obj, raw_output, **kwargs)
250 elif isinstance(obj, (CompositeOverlay, ViewableElement)):
251 with option_state(obj):
--> 252 output = element_display(obj)
253 elif isinstance(obj, (Layout, NdLayout, AdjointLayout)):
254 with option_state(obj):

~\AppData\Roaming\Python\Python37\site-packages\holoviews\ipython\display_hooks.py in wrapped(element)
144 try:
145 max_frames = OutputSettings.options['max_frames']
--> 146 mimebundle = fn(element, max_frames=max_frames)
147 if mimebundle is None:
148 return {}, {}

~\AppData\Roaming\Python\Python37\site-packages\holoviews\ipython\display_hooks.py in element_display(element, max_frames)
190 return None
191
--> 192 return render(element)
193
194

~\AppData\Roaming\Python\Python37\site-packages\holoviews\ipython\display_hooks.py in render(obj, **kwargs)
66 renderer = renderer.instance(fig='png')
67
---> 68 return renderer.components(obj, **kwargs)
69
70

~\AppData\Roaming\Python\Python37\site-packages\holoviews\plotting\renderer.py in components(self, obj, fmt, comm, **kwargs)
374 doc = Document()
375 with config.set(embed=embed):
--> 376 model = plot.layout._render_model(doc, comm)
377 if embed:
378 return render_model(model, comm)

~\AppData\Roaming\Python\Python37\site-packages\panel\viewable.py in _render_model(self, doc, comm)
415 if comm is None:
416 comm = state._comm_manager.get_server_comm()
--> 417 model = self.get_root(doc, comm)
418
419 if config.embed:

~\AppData\Roaming\Python\Python37\site-packages\panel\viewable.py in get_root(self, doc, comm)
640 """
641 doc = doc or _curdoc()
--> 642 root = self._get_model(doc, comm=comm)
643 self._preprocess(root)
644 ref = root.ref['id']

~\AppData\Roaming\Python\Python37\site-packages\panel\layout.py in _get_model(self, doc, root, parent, comm)
118 if root is None:
119 root = model
--> 120 objects = self._get_objects(model, [], doc, root, comm)
121 props = dict(self._init_properties(), objects=objects)
122 model.update(**self._process_param_change(props))

~\AppData\Roaming\Python\Python37\site-packages\panel\layout.py in _get_objects(self, model, old_objects, doc, root, comm)
108 else:
109 try:
--> 110 child = pane._get_model(doc, root, model, comm)
111 except RerenderError:
112 return self._get_objects(model, current_objects[:i], doc, root, comm)

~\AppData\Roaming\Python\Python37\site-packages\panel\pane\holoviews.py in _get_model(self, doc, root, parent, comm)
225 plot = self.object
226 else:
--> 227 plot = self._render(doc, comm, root)
228
229 plot.pane = self

~\AppData\Roaming\Python\Python37\site-packages\panel\pane\holoviews.py in _render(self, doc, comm, root)
284 kwargs = {}
285
--> 286 return renderer.get_plot(self.object, **kwargs)
287
288 def _cleanup(self, root):

~\AppData\Roaming\Python\Python37\site-packages\holoviews\plotting\bokeh\renderer.py in get_plot(self_or_cls, obj, doc, renderer, **kwargs)
71 combining the bokeh model with another plot.
72 """
---> 73 plot = super(BokehRenderer, self_or_cls).get_plot(obj, doc, renderer, **kwargs)
74 if plot.document is None:
75 plot.document = Document() if self_or_cls.notebook_context else curdoc()

~\AppData\Roaming\Python\Python37\site-packages\holoviews\plotting\renderer.py in get_plot(self_or_cls, obj, doc, renderer, comm, **kwargs)
226 obj = Layout(obj)
227 plot = self_or_cls.plotting_class(obj)(obj, renderer=renderer,
--> 228 **plot_opts)
229 defaults = [kd.default for kd in plot.dimensions]
230 init_key = tuple(v if d is None else d for v, d in

C:\ProgramData\Anaconda3\lib\site-packages\geoviews\plotting\bokeh\plot.py in init(self, element, **params)
179
180 def init(self, element, **params):
--> 181 super(GeoOverlayPlot, self).init(element, **params)
182 self.geographic = any(element.traverse(is_geographic, [_Element]))
183 if self.geographic:

C:\ProgramData\Anaconda3\lib\site-packages\geoviews\plotting\bokeh\plot.py in init(self, element, **params)
61
62 def init(self, element, **params):
---> 63 super(GeoPlot, self).init(element, **params)
64 self.geographic = is_geographic(self.hmap.last)
65 if self.geographic and not isinstance(self.projection, (PlateCarree, Mercator)):

~\AppData\Roaming\Python\Python37\site-packages\holoviews\plotting\plot.py in init(self, overlay, ranges, batched, keys, group_counter, **params)
1449 def init(self, overlay, ranges=None, batched=True, keys=None, group_counter=None, **params):
1450 if 'projection' not in params:
-> 1451 params['projection'] = self._get_projection(overlay)
1452
1453 super(GenericOverlayPlot, self).init(overlay, ranges=ranges, keys=keys,

C:\ProgramData\Anaconda3\lib\site-packages\geoviews\plotting\plot.py in _get_projection(self, obj)
34 [CompositeOverlay, Element],
35 keyfn=isoverlay, defaults=False)
---> 36 from_overlay = not all(p is None for p in opts[True]['projection'])
37 projections = opts[from_overlay]['projection']
38 infer = any(opts[from_overlay]['infer_projection']) or self.infer_projection

KeyError: 'projection'

:Overlay
.WMTS.I :WMTS [Longitude,Latitude]
.Points.I :Points [Longitude,Latitude] (date,tap,passengers,Suburb,Country)

@philippjfr
Copy link
Member

@akchaudhary57 Could you actually print the output of gv.__version__? Because I'm not sure you really do have the latest version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants