Как заменить данные в графе шейдера данных Dash holoviews во время выполнения в рамках обратного вызова?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как заменить данные в графе шейдера данных Dash holoviews во время выполнения в рамках обратного вызова?

Сообщение Anonymous »

Я пытаюсь создать в своем веб-приложении диаграмму, отображающую десятки миллионов точек. Для этой цели я начал с Dash, а для эффективного изображения больших наборов данных я использовал Holoviews в сочетании с datashader.
Дело в том, что если я буду следовать всем руководствам из Dash, я смогу получить график, который является интерактивным и обновляет растр при масштабировании. Разумеется, предполагается, что вы предоставите фрейм данных перед запуском приложения Dash. Однако в моем случае мне нужно было бы указать отображаемые данные на лету, так как я бы отправил запрос на отображение содержимого файла на одной вкладке, а на другой вкладке я мог бы затем загрузить новый файл и отобразить его. Однако, когда вы обновляете макет своего приложения Dash с помощью обратного вызова, вызывая to_dash() и возвращая полученный график, он действительно обновляется с новым графиком, но я теряю все взаимодействия, которые обрабатывались раньше, то есть при масштабировании я только увеличить растровое изображение. Я также проверил оба подхода, и как только я сгенерирую данные в обратном вызове и перезапишу исходные, я больше ничего не вижу на вкладке «Сеть» в своем браузере.
Я пытался поиграться с идентификатор графа и идентификатор магазина, которые Dash прикрепляет к создаваемым компонентам, но без особого успеха. Я думаю, что нарушаю какие-то привязанные обратные вызовы к изначально созданным компонентам, которые приложение обрабатывает самостоятельно. В приведенный ниже код я включаю пример того, как воспроизвести проблему: при загрузке все работает нормально, когда вы нажимаете кнопку «Создать новые данные», взаимодействия больше нет.

Код: Выделить всё

import numpy as np
from holoviews import opts
from holoviews.streams import Stream
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from holoviews.plotting import dash

app = dash.Dash(__name__)

# Generate sample data
def generate_data():
x = np.linspace(0, 10, 1000)
y = np.sin(x) * np.cos(x)
return hv.Curve((x, y))

# Create a DynamicMap that updates based on a stream (e.g., zoom or a button)
dynamic_map = hv.DynamicMap(generate_data)

# Define layout
app.layout = html.Div([
dcc.Graph(id='graph'),
html.Button('Update Data', id='update-button')
])

@app.callback(
Output('graph', 'figure'),
Input('update-button', 'n_clicks')
)
def update_plot(n_clicks):
if n_clicks is None:
return dynamic_map.opts(opts.Curve(width=800, height=400)).to_dash()

# Example of updating the data with new values
dynamic_map = hv.DynamicMap(lambda: generate_data(), streams=[Stream])
return dynamic_map.opts(opts.Curve(width=800, height=400)).to_dash()

if __name__ == '__main__':
app.run_server(debug=True)
Я видел пару человек, которые искали на форумах точно такое же решение, но обычно их игнорируют.
Я также открыт для любых других альтернатив. Я попробовал сохранить макет для каждого сеанса самостоятельно. Это отчасти сработало, это большая работа, но возможная. Головная боль связана с тем, что Dash не имеет состояния, а я все еще пытаюсь работать с сессиями. Таким образом, я могу вставить свой график с помощью , хотя я не могу встроить его в реальное приложение из-за того, что настройки cookie работают через соединение, отличное от https (это еще одна проблема).

Подробнее здесь: https://stackoverflow.com/questions/793 ... within-a-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»