Ошибка при вводе списка диктов в Bokeh ColumnDataSource - PullRequest
0 голосов
/ 21 июня 2019

Я использую Bokeh для отображения некоторых данных, которые происходят из BLOB-объекта JSON (который получен с помощью Python). Я хочу передать исходные данные JSON в ColumnDataSource, чтобы при щелчке пользователя по точке отображались все данные в исходном двоичном объекте JSON (с помощью всплывающей подсказки CustomJS). Однако, когда я делаю следующее, я получаю 'Uncaught TypeError: Невозможно прочитать свойство' 0 'из неопределенного' .

Настройка графика:

source = ColumnDataSource(data=dict(
    x = xvals, # list of datetimes
    y = yvals, # list of strings (categorical variable),
    info = info, # list of dicts (each dict has the same 7 keys)
))

JS часть дисплея:

code = """
    selection = require("core/util/selection")
    indices = selection.get_indices(source)
    for (i = 0; i < indices.length; i++) {
        ind = indices[i]
        document.getElementById('info').style.display = 'block'
        document.getElementById('info').innerHTML= source.data['info']
    }
    """

Все три списка имеют одинаковую длину. Я пытался, и это прекрасно работает со списком списков, но не список диктов. Кто-нибудь смог заставить это работать / какие-либо предложения о том, как это исправить? В настоящее время я конвертирую свой список диктовок в 7 отдельных списков, но я бы настоятельно не хотел этого делать, потому что мне нужен этот код для масштабирования для гораздо большего набора данных JSON.

В качестве альтернативы, есть ли другой способ (помимо передачи данных через ColumnDataSource), позволяющий коду CustomJS считывать данные JSON из Python? Спасибо!

1 Ответ

0 голосов
/ 21 июня 2019

Мое предложение будет вызывать json.dumps для каждого большого двоичного объекта JSON, чтобы вы создавали столбец строк, а не столбец слов.Если вы просто отображаете информацию, то это уже строка.Если вам действительно нужна структура в обратном вызове и т. Д., Вы можете вызвать JSON.parse для нее.

...