Не понимаю, где column_id и 'direction' были объявлены в этой dashtable - PullRequest
0 голосов
/ 17 октября 2019

Я действительно запутался в том, как сортировать в черточной таблице.

Я слежу за документацией на сайте для печати и применяю ее самостоятельно df, но пока не до конца понимаю, как она работает,Я чувствую, что мне не хватает некоторых основ, например, что такое sort_by=[]? Как это тогда используется в:

dff = df.sort_values(
    sort_by[0]['column_id'],
    ascending=sort_by[0]['direction'] == 'asc',
    inplace=False)

Я не понимаю, откуда взято 'column_id' или 'direction'.

df в приведенном ниже примере - мой df. Пожалуйста, обратите внимание на мой комментарий ниже. Я действительно в замешательстве!

import dash
from dash.dependencies import Input, Output
import dash_table
import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv')

df[' index'] = range(1, len(df) + 1) # Why do we add this?

app = dash.Dash(__name__)

PAGE_SIZE = 5

app.layout = dash_table.DataTable(
    id='table-paging-and-sorting',
    columns=[
        {'name': i, 'id': i, 'deletable': True} for i in sorted(df.columns)
    ],
    page_current=0,
    page_size=PAGE_SIZE,
    page_action='custom',

    sort_action='custom',
    sort_mode='single',
    sort_by=[]
)


@app.callback(
    Output('table-paging-and-sorting', 'data'),
    [Input('table-paging-and-sorting', "page_current"), # How do i know what to put in input??
     Input('table-paging-and-sorting', "page_size"),
     Input('table-paging-and-sorting', 'sort_by')])
def update_table(page_current, page_size, sort_by):
    if len(sort_by):
        dff = df.sort_values(
            sort_by[0]['column_id'],
            ascending=sort_by[0]['direction'] == 'asc',
            inplace=False
        )
    else:
        # No sort is applied
        dff = df

    return dff.iloc[
        page_current*page_size:(page_current+ 1)*page_size
    ].to_dict('records')


if __name__ == '__main__':
    app.run_server(debug=True)

Я не уверен в том, что означает sort_by[0][‘column_id’], то есть, откуда взялось column_id?

Если вам нужен пример, посмотрите здесь: https://dash.plot.ly/datatable/callbacks

1 Ответ

0 голосов
/ 17 октября 2019

... что такое sort_by=[]?

Это относится к определению функции

def update_table(page_current, page_size, sort_by):
    ...

, которое затем относится к объявлению обратного вызова чуть выше, котороеis


@app.callback(
    Output('table-paging-and-sorting', 'data'),
    [Input('table-paging-and-sorting', "page_current"), # How do i know what to put in input??
     Input('table-paging-and-sorting', "page_size"),
     Input('table-paging-and-sorting', 'sort_by')])

Этот обратный вызов запускается каждый раз, когда ввод, скажем, ползунок, изменяется в зависимости от ввода пользователя.

Это позволяет вещам быть очень динамичными, и, как говорится в самой документации:

Это похоже на программирование в Microsoft Excel: при каждом изменении входной ячейки все ячейки, которые зависят от этой ячейки, обновляются автоматически. Это называется «Реактивное программирование».

Я не уверен, что означает sort_by [0] ['column_id'], т. Е. Откуда взялся column_id?

Это изпараметры определения функции в update_table(). И эти имена, опять же, взяты из декларации обратного вызова чуть выше.

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

Вот страница из официальной документации, которая имеет приятный аналогпример того, что вам нужно https://dash.plot.ly/datatable/interactivity.

Вот отличное руководство по использованию Dash и сюжета https://towardsdatascience.com/how-to-build-a-complex-reporting-dashboard-using-dash-and-plotl-4f4257c18a7f.

Удачи!

...