python数据可视化:使用Dash进行交互式可视化

版权声明:本文为博主原创文章,如若转载请注明出处 https://blog.csdn.net/tonydz0523/article/details/85779090

Dash

上一篇介绍的是Bokeh,是一个交互式的可视化工具,Dash同样也是一个优秀的交互式可视化工具,基于plotly,个人感觉Dash比Bokeh更好用,下面是我用Dash写的一个分析报告:
链接在这,感兴趣可以看一下,就是加载需要点时间:https://dash-da-hr.herokuapp.com/

整体:

在这里插入图片描述

细节:

图一:
在这里插入图片描述

图二:
在这里插入图片描述

小例子:

代码如下:

import pandas as pd
import numpy as np
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go

app = dash.Dash()
server = app.server
# 数据载入
df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/insurance.csv')
# app的layout 
app.layout = html.Div([
    html.Div([
        html.Label('Gender'),
        html.Div([
            dcc.Dropdown(   # 功能性组件, 设定id值作为标签关联callback函数中的标签
                id='gender',
                options=[{'label': i, 'value': i} for i in ['female', 'male']],
                value='female'),
        ]),
        html.Label('Color'),
        html.Div([
            dcc.Dropdown(
                id='color',
                options=[{'label': i, 'value': i} for i in ['region', 'smoker', 'children']],
                value='region'),
        ]),
    ], className="three columns"),  # 直接加入css的功能
    html.Div([
        dcc.Graph(id='scatter')    # 关联graph
    ], className="eight columns")
], className="page")

# 对callback函数进行设置, 与上面的对应, 将数据return回对应id的Graph
@app.callback(
    dash.dependencies.Output('scatter', 'figure'),
    [dash.dependencies.Input('gender','value'),
     dash.dependencies.Input('color','value')]
)
def update_scatter(value_gender, value_color):
    grouped = df.groupby('sex')  # 以性别分组
    data = grouped.get_group(value_gender)  # 获取选取的性别为变量
    # color_col = value_color   # 获取颜色分类的属性
    color_class = pd.Categorical(data[value_color])   # 将颜色分类数据明确化
#     c = [Spectral8[i] for i in color_class.codes]   # 获取颜色列表
    s = [(np.sqrt(i)+2) for i in data['age']]   # 将年龄数据开方用大小表示用以区别年龄大小
    trace = go.Scatter(
                x=data["bmi"],
                y=data["charges"],
                mode='markers',
                marker=dict(
                    size=s,
                    sizemode='diameter',
                    sizeref=0,
                    color=color_class.codes,
                    colorscale='Earth'
                ))

    layout = go.Layout(margin=dict(l=20, r=20, t=0, b=30))
    fig = go.Figure(data=[trace], layout=layout)
    return fig

# css的设置
external_css = ["https://cdnjs.cloudflare.com/ajax/libs/normalize/7.0.0/normalize.min.css",
                "https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css",
                "https://codepen.io/ffzs/pen/mjjXGM.css",
                "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"]

for css in external_css:
    app.css.append_css({"external_url": css})


if __name__ == '__main__':
    app.run_server(host='0.0.0.0', debug=True)  # 运行app 设置host 默认是localhost

运行以后访问对应网址:http://0.0.0.0:8050/

结果图示如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tonydz0523/article/details/85779090
今日推荐