读取文件画柱状图

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', #可以分为 ‘stack’(叠加)、‘group’(分组)、‘overlay’(重叠)、‘relative’(相关), 默认是‘group’
        barnorm = '', #设置柱形图纵轴或横轴数据的表示形式,可以是fraction(分数),percent(百分数)
        yaxis = {
            # 'hoverformat': '.2%',
            # 'showline': True,
            # 'showgrid': True,
            # 'side': 'right',
        }
    )
    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)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值