☰Read-only archive⌕
Looking for help with Bokeh?

This is a read-only archive. Ask questions and join the conversation on GitHub.

Visit Community Support on GitHub →
Archived discussions · Captured October 28, 2026

Got keyerror 'legend'

Community Support
Icoti
Icoti

First of all, please include a minimal reproducible example to your posts, see MRE.

exoctk is a package which is not very regularly maintained (last release Sept 2023, the one before Feb 2021).
exoctk is not on conda-forge, which is suboptimal.
Installing it with pip on a fresh environment installs a lot of (really necessary?) other packages.
Trying to run the example from ExoPlanet Characterization Tool Kit leads already at the imports to a ModuleNotFoundError error.

Because of this and because the LightCurve method actually comes from exoctk and not from Bokeh, you will have to ask the maintainers of exoctk for support.

⌁   Link to post
Icoti
Icoti

ok got it.
As assumed, there is an error in the exoctk package.

I had to create a new Python 3.10 environment, install all packages except exoctk with conda, and exoctk with pip (since not in conda-forge).

Here are the code cells to be executed for instance in Jupyterlab:

# Imports
import numpy as np
import astropy.units as q
from exoctk.lightcurve_fitting.lightcurve import LightCurve
from exoctk.lightcurve_fitting.parameters import Parameters
from exoctk.lightcurve_fitting.models import PolynomialModel, TransitModel
from bokeh.io import output_notebook
output_notebook()
# Toy data
time = np.linspace(0, 1, 100)
raw_flux = [0.95 if 35<i<60 else 1 for i in range(100)]
unc = np.random.uniform(low=1E-4, high=0.01, size=100)
flux = np.random.normal(raw_flux, scale=unc)
flux[55:60] *= np.linspace(1, 1.05, 5)
flux[36:41] *= np.linspace(1.05, 1., 5)
# Instantiate a lightcurve
lc = LightCurve(time, flux, unc, name='Data')
lc.plot()

For the last cell, I get following error message:

KeyError                                  Traceback (most recent call last)
Cell In[4], line 2
      1 lc = LightCurve(time, flux, unc, name='Data')
----> 2 lc.plot()

File ~\miniconda3\envs\exoctk310\lib\site-packages\exoctk\lightcurve_fitting\lightcurve.py:113, in LightCurve.plot(self, fits, draw)
    110 fig = figure(width=800, height=400)
    112 # Draw the data
--> 113 fig.circle(self.time, self.flux, legend=self.name)
    115 # Plot fit models
    116 if fits and len(self.results) > 0:

File ~\miniconda3\envs\exoctk310\lib\site-packages\bokeh\plotting\_decorators.py:87, in glyph_method.<locals>.decorator.<locals>.wrapped(self, *args, **kwargs)
     85 if self.coordinates is not None:
     86     kwargs.setdefault("coordinates", self.coordinates)
---> 87 return create_renderer(glyphclass, self.plot, **kwargs)

File ~\miniconda3\envs\exoctk310\lib\site-packages\bokeh\plotting\_renderer.py:133, in create_renderer(glyphclass, plot, **kwargs)
    127 plot.renderers.append(glyph_renderer)
    129 if legend_kwarg:
    130     # It must be after the renderer is added because
    131     # if it creates a new `LegendItem`, the referenced
    132     # renderer must already be present.
--> 133     update_legend(plot, legend_kwarg, glyph_renderer)
    135 return glyph_renderer

File ~\miniconda3\envs\exoctk310\lib\site-packages\bokeh\plotting\_legends.py:57, in update_legend(plot, legend_kwarg, glyph_renderer)
     54 legend = _get_or_create_legend(plot)
     55 kwarg, value = next(iter(legend_kwarg.items()))
---> 57 _LEGEND_KWARG_HANDLERS[kwarg](value, legend, glyph_renderer)

KeyError: 'legend'

Which leads me to the cause of the error: exoctk uses for the circle glyph the argument legend which is not used anymore, use legend_label instead.

Concrete help: In your python environment, find the file lightcurve.py.
In my conda installation, it is here:
...\env_dir\Lib\site-packages\exoctk\lightcurve_fitting\lightcurve.py.
On line 113, replace legend=self.name by legend_label=self.name.
Then, the plot should display as expected.

⌁   Link to post

End of archived discussion · Replies are disabled