Fit table width to contents

master
Dan Howe 5 years ago
parent 502769b76a
commit 3571d56c96

@ -189,11 +189,7 @@ def read_json_data(json_data):
row_deletable=False, row_deletable=False,
selected_rows=np.arange(stats.shape[0]), selected_rows=np.arange(stats.shape[0]),
style_as_list_view=True, style_as_list_view=True,
# style_cell={ fill_width=False,
# 'minWidth': '100px',
# 'width': '100px',
# 'maxWidth': '100px',
# },
) )
elements = html.Div([ elements = html.Div([

@ -1,164 +0,0 @@
import json
import numpy as np
import dash
import dash_table
import pandas as pd
import plotly.graph_objs as go
import dash_table
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
app = dash.Dash(__name__)
app.layout = html.Div([
html.Div(dcc.Graph(id='timeseries')),
html.Div(id='div-table'),
html.Div(id='datatable-row-ids-container'),
html.Div(id='storage', style={'display': 'none'}),
html.Div([
html.Button('Load', id='button'),
])
])
# app.css.append_css('style.css')
@app.callback(
Output('storage', 'children'),
[Input('button', 'n_clicks')],
)
def load_data(n_clicks):
csv_name = 'test_20_WP.csv'
# Check instrument type
inst_type = 'WP'
if inst_type == 'WP':
df = pd.read_csv(csv_name, index_col=0, header=5, skiprows=[6])
# Rename columns based on probe locations
suffixes = ['P1', 'P2', 'P3', 'incident', 'reflected']
col_names = list(df.columns)
for i, col in enumerate(col_names[:-4]):
if ('.' not in col) and (col_names[i + 4] == col + '.4'):
for j, suffix in enumerate(suffixes):
col_names[i + j] = '{}-{}'.format(col, suffix)
df.columns = col_names
else:
df = pd.read_csv(csv_name, index_col=0, header=3, skiprows=[4])
# Zero time series based on first 5s
df -= df[:5].mean()
df = df[:100]
# Round floats
df = df.round(2)
return df.to_json(orient='table')
@app.callback(
Output('timeseries', 'figure'),
[Input('storage', 'children')],
)
def update_graph(json_data):
if json_data is None:
return {'data': []}
df = pd.read_json(json_data, orient='table')
ts = []
for col in df.columns:
trace = go.Scatter(x=df.index, y=df[col], name=col, opacity=0.8)
ts.append(trace)
layout = {'title': 'basename', 'xaxis': {'rangeslider': {}}}
timeseries = {'data': ts, 'layout': layout}
return timeseries
@app.callback(
Output('div-table', 'children'),
[Input('storage', 'children')],
)
def update_table(json_data):
if json_data is None:
return {'data': []}
df = pd.read_json(json_data, orient='table')
stats = df.describe().T
stats = stats.round(2)
s1 = stats.index.to_series()
s1.name = 'Name'
stats = pd.concat([s1, stats], axis=1)
datatable = dash_table.DataTable(
id='datatable-row-ids',
# columns=[{
# 'name': [val, key],
# 'id': key
# } for key, val in variables.items()],
columns=[{
'name': x,
'id': x
} for x in stats.columns],
data=stats.to_dict('records'),
editable=False,
sort_action='native',
sort_mode='multi',
row_selectable='multi',
row_deletable=False,
selected_rows=np.arange(stats.shape[0]),
style_as_list_view=True,
style_cell={
'minWidth': '100px',
'width': '100px',
'maxWidth': '100px',
},
)
return [datatable]
# @app.callback(Output('datatable-row-ids-container', 'children'), [
# Input('datatable-row-ids', 'derived_virtual_row_ids'),
# Input('datatable-row-ids', 'selected_row_ids'),
# Input('datatable-row-ids', 'active_cell')
# ])
# def update_graphs(row_ids, selected_row_ids, active_cell):
# # When the table is first rendered, `derived_virtual_data` and
# # `derived_virtual_selected_rows` will be `None`. This is due to an
# # idiosyncracy in Dash (unsupplied properties are always None and Dash
# # calls the dependent callbacks when the component is first rendered).
# # So, if `rows` is `None`, then the component was just rendered
# # and its value will be the same as the component's dataframe.
# # Instead of setting `None` in here, you could also set
# # `derived_virtual_data=df.to_rows('dict')` when you initialize
# # the component.
# selected_id_set = set(selected_row_ids or [])
#
# if selected_id_set:
# dff = df.loc[selected_id_set]
# else:
# dff = df
#
# spec = []
# for i, row in dff.iterrows():
# x = np.arange(10)
# y = x * row['H_sig']
#
# trace = go.Scatter(x=x, y=y, name=i)
# spec.append(trace)
#
# energy = dict(data=spec)
#
# graph = dcc.Graph(id='time-series', figure=energy)
#
# return graph
if __name__ == '__main__':
app.run_server(debug=True)

@ -1,101 +0,0 @@
import os
import dash
from dash.dependencies import Input, Output
import dash_table
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd
import numpy as np
# __file__ = '.'
csv_name = os.path.dirname(__file__) + '../statistics.csv'
df = pd.read_csv(csv_name)
df_spec = df.copy()
df_spec.T
# Round floats
df = df.round(2)
variables = {
'location': '',
'H_sig': 'o',
'H_1%': 'x',
'H_max': '',
'Hm0': '',
'Tp': '',
'Tp1': '',
}
df = df[variables.keys()]
df['id'] = df['location']
df = df.set_index('id', drop=False)
app = dash.Dash(__name__)
app.layout = html.Div([
dash_table.DataTable(
id='datatable-row-ids',
columns=[{
'name': [val, key],
'id': key
} for key, val in variables.items()],
data=df.to_dict('records'),
editable=False,
sort_action='native',
sort_mode='multi',
row_selectable='multi',
row_deletable=False,
selected_rows=np.arange(df.shape[0]),
style_as_list_view=True,
style_cell={
'minWidth': '100px',
'width': '100px',
'maxWidth': '100px',
},
),
html.Div(id='datatable-row-ids-container')
])
@app.callback(Output('datatable-row-ids-container', 'children'), [
Input('datatable-row-ids', 'derived_virtual_row_ids'),
Input('datatable-row-ids', 'selected_row_ids'),
Input('datatable-row-ids', 'active_cell')
])
def update_graphs(row_ids, selected_row_ids, active_cell):
# When the table is first rendered, `derived_virtual_data` and
# `derived_virtual_selected_rows` will be `None`. This is due to an
# idiosyncracy in Dash (unsupplied properties are always None and Dash
# calls the dependent callbacks when the component is first rendered).
# So, if `rows` is `None`, then the component was just rendered
# and its value will be the same as the component's dataframe.
# Instead of setting `None` in here, you could also set
# `derived_virtual_data=df.to_rows('dict')` when you initialize
# the component.
selected_id_set = set(selected_row_ids or [])
if selected_id_set:
dff = df.loc[selected_id_set]
else:
dff = df
spec = []
for i, row in dff.iterrows():
x = np.arange(10)
y = x * row['H_sig']
trace = go.Scatter(x=x, y=y, name=i)
spec.append(trace)
energy = dict(data=spec)
graph = dcc.Graph(id='time-series', figure=energy)
return graph
if __name__ == '__main__':
app.run_server(debug=False)
Loading…
Cancel
Save