Подсветить много диапазонов на оси графика Боке? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть точечный график данных, и я хотел бы выделить определенные диапазоны оси X.Когда диапазоны чисел, которые нужно выделить, относительно малы, использование BoxAnnotation работает хорошо.Тем не менее, я пытаюсь сделать много смежных выделений (с различной непрозрачностью).Со многими смежными BoxAnnotations, уменьшенными, рамки слегка перекрываются, создавая линии.Кроме того, тысячи BoxAnnotations требуют много времени для генерации и не работают гладко при взаимодействии с графиком.

Если говорить более конкретно о моем случае, у меня есть некоторые временные данные и прогнозная модель, определяющая вероятностькакого-то события, происходящего в данных.Я хочу, чтобы каждый сегмент был выделен с непрозрачностью, определяемой вероятностью того, что событие происходит в этот момент времени.Тем не менее, мой текущий подход BoxAnnotation приводит к искусственным линиям от перекрытия прямоугольников при уменьшении масштаба (они исчезают при увеличении масштаба области) и медленной реакции интерактивного графика.

Есть ли способ выполнитьчто-то похожее на это без артефактов и с более плавным опытом?

Текущий метод:

source = ColumnDataSource(data=data_frame)
figure_ = figure(x_axis_label='Time', y_axis_label='Intensity')
for index in range(data_frame.shape[0] - 1):
    figure_.add_layout(
        BoxAnnotation(left=data_frame['time'].values[index], right=data_frame['time'].values[index + 1],
                      fill_alpha=data_frame['prediction'].values[index], fill_color='red', line_alpha=0)
    )
figure_.circle(x='time', y='intensity', source=source)
show(figure_)

Пример искусственных линий, когда слишком много мелкихBoxAnnotations: enter image description here

При увеличении по оси X линии исчезают: enter image description here

1 Ответ

1 голос
/ 29 сентября 2019

Вероятно, нет никакого способа спасти этот точный подход.Артефакты связаны с функционированием базового растрового холста HTML, и здесь нет ничего, что могло бы быть одним из них.И любая медлительность связана с тем, что такого рода использование BoxAnnotation (с таким очень большим количеством отдельных экземпляров) совсем не то, что предполагалось, и оно просто не оптимизировано, чтобы показывать сотни примеров, как, например, глифы рассеяния.,Вы пытаетесь использовать рамочные аннотации для создания своего рода полупрозрачной тепловой карты, и это не очень подходит для этого по причинам, указанным выше.

Потенциально можно преодолеть медлительность, используя один глиф rect или vbar, который рисует все поля одновременно в векторизованном виде.Но это не облегчит проблем с композитингом.

Лучше всего создать полупрозрачное изображение «тепловой карты», наложив на себя инструмент или код, который позволит лучше контролировать детали растеризации и компоновки.Я не могу посоветовать вам, как это сделать, в деталях.Библиотека Datashader может быть полезна для этого.

...