Jupyterノートブックで Bokeh 0.12.2を使用していますが、「モデルは1つのドキュメントのみが所有する必要があります」という例外が頻繁にスローされます。
_---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-23-f50ac7abda5e> in <module>()
2 ea.legend.label_text_font_size = '10pt'
3
----> 4 show(column([co2, co, nox, o3]))
C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\io.py in show(obj, browser, new, notebook_handle)
308 '''
309 if obj not in _state.document.roots:
--> 310 _state.document.add_root(obj)
311 return _show_with_state(obj, _state, browser, new, notebook_handle=notebook_handle)
312
C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\document.py in add_root(self, model)
443 self._roots.append(model)
444 finally:
--> 445 self._pop_all_models_freeze()
446 self._trigger_on_change(RootAddedEvent(self, model))
447
C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\document.py in _pop_all_models_freeze(self)
343 self._all_models_freeze_count -= 1
344 if self._all_models_freeze_count == 0:
--> 345 self._recompute_all_models()
346
347 def _invalidate_all_models(self):
C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\document.py in _recompute_all_models(self)
367 d._detach_document()
368 for a in to_attach:
--> 369 a._attach_document(self)
370 self._all_models = recomputed
371 self._all_models_by_name = recomputed_by_name
C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\model.py in _attach_document(self, doc)
89 '''This should only be called by the Document implementation to set the document field'''
90 if self._document is not None and self._document is not doc:
---> 91 raise RuntimeError("Models must be owned by only a single document, %r is already in a doc" % (self))
92 doc.theme.apply_to_model(self)
93 self._document = doc
RuntimeError: Models must be owned by only a single document, <bokeh.models.tickers.DaysTicker object at 0x00000000042540B8> is already in a doc
_
トリガーは常にshow(...)
を呼び出します(ただし、カーネルの起動後初めてではなく、後続の呼び出しのみ)。
ドキュメントに基づいて、reset_output()
はノートブックを操作可能な状態に戻すと思いましたが、例外は解決しません。試行錯誤の結果、show()
に渡されるすべてのものを再定義する必要があると判断しました。そのため、インタラクティブな作業が面倒でエラーが発生しやすくなります。
[ 参照 ]:
reset_output(state = None)
すべての出力モードのデフォルト状態をクリアします。
戻り値:なし
私はreset_output()
について正しいですか-この例外の原因となっている状況を解決することになっていますか?
それ以外の場合、この種の例外を回避するにはどうすればよいですか?
Bokehバージョン1.01にアップグレードした後、bokeh.embedからfile_htmlを使用すると、このエラーメッセージが表示されました。ボケバージョン0.12.16に再度ダウングレードすると、問題が解決しました。 (pip install bokeh == 0.12.16)理由を確認してください。
同じ名前のオブジェクトが競合していることが原因である可能性があります。毎回完全に新しいオブジェクトを作成する必要があります。
次のように、ソース名を区別することで修正できるようです。
source1 = df
p1.circle('A', 'B', source=source1)
source2 = df
p2 = figure()
p2.circle('C', 'D', source=source2)
sourceN = df
p2 = figure()
p2.circle('X', 'Y', source=sourceN)