Dash: динамическое обновление диаграммы
В современных приложениях для визуализации данных динамическое обновление графиков является очень важной функцией, позволяющей пользователям просматривать изменения данных в режиме реального времени без обновления всей страницы.
В Dash основным механизмом динамического обновления графиков являетсяфункция обратного вызова, функции обратного вызова позволяют динамически обновлять содержимое графика, когда пользователи взаимодействуют со страницей (например, нажимают кнопки, выбирают пункты в раскрывающихся меню и т. д.).
Базовая структура функции обратного вызова
Типичная функция обратного вызова состоит из следующих частей:
- Input: Определяет компонент и его свойства, которые запускают обратный вызов.
- Output: Определяет компоненты и их свойства, которые необходимо обновить.
- Тело функции обратного вызова: Вычисляет и возвращает выходные значения на основе входных значений.
Подробное объяснение функций обратного вызова Dash см. по ссылке:https://www.example.com/dash/dash-callback.html。
Простое динамическое обновление графика
С помощью функций обратного вызова можно динамически обновлять данные и макет графика.
Ниже приведён полный пример приложения Dash, в котором пользователи могут выбрать набор данных через раскрывающееся меню, чтобы динамически отобразить соответствующий линейный график:
Пример
import plotly.express as px
import pandas as pd
# Создать приложение Dash
app = Dash(__name__)
# Определить пример набора данных
datasets = {
'Dataset 1': pd.DataFrame({
'x': [1, 2, 3, 4, 5],
'y': [10, 15, 13, 17, 21]
}),
'Dataset 2': pd.DataFrame({
'x': [1, 2, 3, 4, 5],
'y': [5, 10, 8, 12, 15]
}),
'Dataset 3': pd.DataFrame({
'x': [1, 2, 3, 4, 5],
'y': [20, 18, 22, 19, 25]
})
}
# Определить макет
app.layout = html.Div([
html.H1("Пример динамического линейного графика"), # Заголовок
dcc.Dropdown(
id='dataset-dropdown', # ID выпадающего списка
options=[{'label': name, 'value': name} for name in datasets.keys()], # Опции выпадающего меню
value='Dataset 1' # Набор данных, выбранный по умолчанию
),
dcc.Graph(id='line-chart') # Компонент Graph для отображения линейных графиков
])
# Определить функцию обратного вызова
@app.callback(
Output('line-chart', 'figure'), # Вывод в атрибут figure компонента Graph с id 'line-chart'
Input('dataset-dropdown', 'value') # Ввод поступает от id 'dataset-dropdown' выпадающего меню свойства value
)
def update_line_chart(selected_dataset):
# Получить выбранный набор данных
df = datasets[selected_dataset]
# Создание линейного графика с помощью Plotly Express
fig = px.line(df, x='x', y='y', title=f'{selected_dataset} Линейный график')
return fig
# Запустить приложение
if __name__ == '__main__':
app.run_server(debug=True) # Запускает приложение, debug=True включает режим отладки
Отображается, как показано ниже:

Пояснение кода
1. Раздел макета:
-
Использование
html.H1Создайте заголовок "Вычислить квадрат". -
Использование
dcc.InputСоздайте поле ввода числа,idявляетсяnumber-input, тип —number。 -
Использование
html.DivСоздайте область для отображения результатов,idявляетсяoutput。
2. Функция обратного вызова:
-
Использование
@app.callbackДекоратор определяет функцию обратного вызова. -
входные данные —
number-inputполя вводаvalueСвойство. -
выходные данные —
outputDivchildrenСвойство. -
В функции обратного вызова:
-
Проверьте, пусты ли входные данные.
-
Преобразуйте входное значение в число с плавающей запятой и вычислите его квадрат.
-
Верните отформатированный результат.
-
4. Запустите приложение:
-
Использование
app.run_server(debug=True)Запустите приложение,debug=TrueУказывает, что режим отладки включён.