Обновление типа оси в Bokeh - PullRequest
       6

Обновление типа оси в Bokeh

0 голосов
/ 29 ноября 2018

В настоящее время я использую Bokeh для создания интерактивного инструмента визуализации данных в блокноте Jupyter.Моя цель состоит в том, чтобы пользователь мог изменить данные, отображаемые на диаграмме рассеяния, что означает, что обновление графика должно обрабатывать как категориальные, так и числовые данные.Вот где я сталкиваюсь с проблемами.

Когда я изменяю тип данных для построения графика, точки на диаграмме рассеяния обновляются нормально, но тики оси и диапазон не обновляются (поэтому представление не обновляется правильно),Я попытался указать x_range и y_range, но это, похоже, не сработало.

Минимальный пример моей функции обновления:

def update(attr, old, new):
    # this seems to work fine.
    new_data = ColumnDataSource(dict=(x=x, y=y, c=c))
    src.data.update(new_data.data)

    # change type of y and x axes
    # e.g. x_range goes from Range1d to FactorRange
    p.x_range = FactorRange()
    p.x_range.factors = sorted(set(source.data['x']))

    # or y_range goes from FactorRange to Range1d
    p.y_range = Range1d()
    p.y_range.start = min(source.data['y'])
    p.y_range.end = max(source.data['y'])

    ...
    push_notebook(handle=p)

Может кто-нибудь помочь?Я довольно много гуглил, но пока не нашел решения.

Редактировать: Изменение x и y происходит от двух виджетов, кстати.

Редактировать 2: воспроизводимый примерhttps://gist.github.com/hmmartiny/d8b0596b4028de66bdc72e8848f10a7e

1 Ответ

0 голосов
/ 15 мая 2019

Я понял это, посмотрев код для построения здесь и здесь .

from bokeh.plotting import figure
from bokeh.models import LogScale

p = figure()  # makes a plot with y_axis_type linear
p.circle(x=[1, 2, 3], y=[2, 20, 200])
p.y_scale = LogScale()
...