How could I create tables dynamically by plotly/ dash-table ?
I know I can create dynamic tables by using plotly graph objects as shown below, but I’d love to use plotly/dash-table since it has better UI.
import dash
import dash_table
import dash_html_components as html
import dash_core_components as dcc
import pandas as pd
import json
from dash.dependencies import Input, Output, State
from plotly import graph_objs as go
df = pd.read_csv(
"https://raw.githubusercontent.com/plotly/datasets/master/solar.csv"
)
app = dash.Dash(__name__)
app.layout = html.Div(
[
dcc.Dropdown(
id="dropdown",
options=[
{"label": "California", "value": "California"},
{"label": "Arizona", "value": "Arizona"},
{"label": "Nevada", "value": "Nevada"},
],
value="MTL",
),
dcc.Store(id="selected-rows", storage_type="memory"),
dcc.Graph(id="content"),
]
)
@app.callback(
Output("selected-rows", "data"),
[Input("dropdown", "value")],
[State("selected-rows", "data")],
)
def display_output(value, storage):
if value is not None:
return {"selected_rows": df[df["State"].str.contains(value)].to_json()}
@app.callback(Output("content", "figure"), [Input("selected-rows", "data")])
def update_output(rows):
if rows is not None:
# Here, I could get DataFrames
_df = pd.read_json(rows["selected_rows"])
# But, have no ideas how to return dash_table.Databales instead ob go.Table
return {
"data": [
go.Table(
header=dict(values=_df.columns.values),
cells=dict(values=[_df[col] for col in _df.columns.values]),
)
],
"layout": {"title": "picked row", "hovermode": "closest"},
}
if __name__ == "__main__":
app.run_server(debug=True)