import os
import json
from flask import Flask
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
from dash.dependencies import Output, Input
app = dash.Dash()
server = app.server
def get_show_bar(file):
"""从文件读取数据进行展示"""
data = ''
(filepath, file_name) = os.path.split(file)
with open(file, 'r') as fr:
line = json.load(fr)
record_data = line.values()[0]
record_data.sort()
record_max = record_data[-1]
record_min = record_data[0]
print record_max, record_min
bucket_num = 1000
bucket_distance = (record_max + 0.01 - record_min)/bucket_num
bucket_start = record_min
bucket_x = []
bucket_y = []
for i in range(1, bucket_num):
bucket_end = bucket_start + bucket_distance
bucket_x.append(bucket_start)
tmp_y = 0
for record_item in record_data:
if record_item == 0:
continue
if record_item >= bucket_start and record_item < bucket_end:
tmp_y += 1
bucket_y.append(tmp_y)
bucket_start = bucket_end
print bucket_y
trace1 = go.Bar(
x = bucket_x,
y = bucket_y,
name = '分布图'
)
layout = go.Layout(
title = '{}字段值分布'.format(file_name),
barmode = 'group',
barnorm = '',
yaxis = {
}
)
return go.Figure(
data = [trace1],
layout = layout
)
file = "tes.data"
app.layout = html.Div([
dcc.Graph(
id='show_graph',
figure=get_show_bar(file)
),
html.Div(
id = 'show_click_content',
style={
'margin-top': 20,
'text-align': 'center',
'font-size': 30
}
)
], style={'margin': 100})
@app.callback(
Output('show_click_content', 'children'),
[
Input('show_graph', 'clickData'),
]
)
def show_click_content(clickdata):
if clickdata == None:
return ''
return str(clickdata)
if __name__ == '__main__':
app.run_server(host='0.0.0.0', port=8501, debug=True)
