web-dev-qa-db-fra.com

Dash Data_Table Couleur d'arrière-plan pour une cellule individuelle

J'affiche dans un dash_table.DataTable A Dataframe où il y a une colonne avec des noms de couleur au format Hex, avec ce code:

import dash
import dash_table
import pandas as pd

df = pd.DataFrame(data = dict(COLOR = ['#1f77b4', '#d62728', '#e377c2', '#17becf', '#bcbd22'],
                              VALUE = [1, 2, 3, 4, 5]))

app = dash.Dash(__name__)

app.layout = html.Div([dash_table.DataTable(id = 'table',
                                            columns = [{"name": i, "id": i} for i in df.columns],
                                            data = df.to_dict('records'))],
                      style = dict(width = '200px'))

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

C'est ce que je reçois:

enter image description here

Je voudrais définir la couleur de fond (et peut-être la couleur de police) de chaque cellule avec son contenu, mais uniquement pour cette colonne (qui est toujours la première colonne de la table) afin d'obtenir ceci:

enter image description here

Pour moi, c'est d'accord pour remplacer le dash_table.DataTable avec plotly.graph_objects.Table ( documentation ), ce qui est peut-être plus personnalisable; à condition que je puisse mettre en œuvre le plotly.graph_objects.Table Dans un dash tableau de bord.

Version info:

Python               3.7.0
dash                 1.12.0
dash-table           4.7.0
plotly               4.7.0
2
Andrea Blengino

Vous pouvez définir la couleur d'arrière-plan et la couleur de la police (ainsi que plusieurs autres propriétés) de chaque cellule individuelle à l'aide de style_data_conditional, voir https://dash.plotly.com/datatable/style .

import dash
import dash_table
import dash_html_components as html
import pandas as pd

df = pd.DataFrame(data=dict(COLOR=['#1f77b4', '#d62728', '#e377c2', '#17becf', '#bcbd22'],
                            VALUE=[1, 2, 3, 4, 5]))

app = dash.Dash(__name__)

app.layout = html.Div([

    dash_table.DataTable(
        id='table',
        columns=[{'name': i, 'id': i} for i in df.columns],
        data=df.to_dict('records'),
        style_data_conditional=[{'if': {'row_index': i, 'column_id': 'COLOR'}, 'background-color': df['COLOR'][i], 'color': df['COLOR'][i]} for i in range(df.shape[0])]
    ),

], style=dict(width='100px'))

if __name__ == '__main__':
    app.run_server()
1
gflavia