Прежде всего, к вашему сведению, вы пошли по кроличьей норе к вещам, которые никогда не имеют отношения к типичному использованию боке (большинство пользователей никогда не услышат или не будут использовать HasProps
напрямую, например)
Для контекста
node_renderer = Instance(GlyphRenderer)
означает, что node_renderer
принимает значения, которые являются экземплярами типа GlyphRenderer
, а GlyphRenderer
- это вещь, которая знает, как рисовать глифы (т.е. штрихи, круги и т. Д.) На экране. Это примерно так же далеко внизу базы кода, как я ожидаю, что кому-то когда-либо понадобится, если только не будет разработка самого Bokeh или создание собственных расширений.
Графики Боке рисуют глифы, вытягивая данные из связанного ColumnDataSource
. CDS - это дешевая версия Pandas DataFrame. Это (более или менее) диктат, который отображает имена строковых столбцов в последовательности (списки, массивы, серии) данных. Обычно данные являются числами, а в случае категориальных координат или значений цвета - строками. Иногда для специальных символов, таких как multi_line
или patches
, столбцы больше похожи на «списки списков» чисел.
Когда вы добавляете данные атрибута в график NetworkX, Bokeh пытается поместить данные атрибута в один из этих столбцов CDS. Я почти уверен, что сложные значения атрибутов, такие как dicts и т. Д. Не будут работать. Такие вещи, как объекты или классы, безусловно, не будут работать, и причина в том, что все эти данные должны в конечном итоге быть сериализованы и отправлены в браузер для использования библиотекой JavaScript (BokehJS), и она не будет знать, что делать с чем-токак это.
TLDR;Я бы ожидал, что скалярные типы, такие как числа и строки будут работать, а также, возможно, списки из них.