作者 | 俊欣

来源 | 关于数据分析与可视化

今天小编来为大家安利另外一个用于绘制可视化图表的Python框架,名叫Dash,建立在FlaskPlotly.js以及React.js的基础之上,在创建之出的目的是为了帮助前端知识匮乏的数据分析人员,以纯Python编程的方式快速制作出交互特性强的数据可视化大屏,在经过多年的迭代发展,如今不仅仅可以用来开发在线数据可视化作品,即便是轻量级的数据仪表盘、BI应用甚至是博客或者是常规的网站都随处可见Dash框架的影子,今天小编就先来介绍一下该框架的一些基础知识,并且来制作一个简单的数据可视化大屏。

Dash框架中的两个基本概念

我们先来了解一下Dash框架中的两个基本概念

  • Layout

  • Callbacks

Layout顾名思义就是用来设计可视化大屏的外观和布局,添加一些例如下拉框、单选框、复选框、输入框、文本框、滑动条等组件,其中Dash框架对HTML标签也进行了进一步的封装,使得我们直接可以通过Python代码来生成和设计每一个网页所需要的元素,例如

<div><h1>Hello World!!</h1><div><p>Dash converts Python classes into HTML</p></div>
</div>

我们转化成DashPython结构就是

html.Div([html.H1('Hello Dash'),html.Div([html.P('Dash converts Python classes into HTML'),])
])

Callbacks也就是回调函数,基本上是以装饰器的形式来体现的,实现前后端异步通信的交互,例如我们在点击按钮或者下拉框之后出现的功能就是通过回调函数来实现的。

安装和导入模块

在导入模块之前,我们先用pip命令来进行安装,

! pip install dash
! pip install dash-html-components
! pip install dash-core-components
! pip install plotly

然后我们导入这些刚刚安装完的模块,其中dash-html-components用来生成HTML标签,dash-core-components模块用来生成例如下拉框、输入框等组件,这里我们还需要用到plotly模块,因为我们需要用到的数据来自该模块,里面是一众互联网公司过去一段时间中股价的走势

import dash
import dash_html_components as html
import dash_core_components as dcc
import plotly.graph_objects as go
import plotly.express as px

读取数据并且绘制折线图

那么我们读取数据并且用plotly来绘制折线图,代码如下:

app = dash.Dash()   #实例化Dash
df = px.data.stocks() #读取股票数据 def stock_prices():# 绘制折线图fig = go.Figure([go.Scatter(x=df['date'], y=df['AAPL'],line=dict(color='firebrick', width=4), name='Apple')])fig.update_layout(title='股价随着时间的变幻',xaxis_title='日期',yaxis_title='价格')return figapp.layout = html.Div(id='parent', children=[html.H1(id='H1', children='Dash 案例一', style={'textAlign': 'center','marginTop': 40, 'marginBottom': 40}),dcc.Graph(id='line_plot', figure=stock_prices())
])if __name__ == '__main__':app.run_server()

我们点击运行之后会按照提示将url复制到浏览器当中便可以看到出来的结果了,如下所示

从代码的逻辑上来看,我们通过Dash框架中的Div方法来进行页面的布局,其中有参数id来指定网页中的元素,以及style参数来进行样式的设计,最后我们将会指出来的图表放在dcc.Graph()函数当中。

添置一个下拉框

然后我们再添置一个下拉框,当我们点击这个下拉框的时候,可是根据我们的选择展示不同公司的股价,代码如下:

dcc.Dropdown(id='dropdown',options=[{'label': '谷歌', 'value': 'GOOG'},{'label': '苹果', 'value': 'AAPL'},{'label': '亚马逊', 'value': 'AMZN'},],value='GOOG'),

output

options参数中的label对应的是下拉框中的各个标签,而value对应的是DataFrame当中的列名

df.head()

output

添加回调函数

最后我们将下拉框和绘制折线图的函数给连接起来,我们点击下拉框选中不同的选项的时候,折线图也会相应的产生变化,

@app.callback(Output(component_id='bar_plot', component_property='figure'),[Input(component_id='dropdown', component_property='value')])
def graph_update(dropdown_value):print(dropdown_value)# Function for creating line chart showing Google stock prices over timefig = go.Figure([go.Scatter(x=df['date'], y=df['{}'.format(dropdown_value)],line=dict(color='firebrick', width=4))])fig.update_layout(title='股价随着时间的变幻',xaxis_title='日期',yaxis_title='价格')return fig

我们看到callback()方法中指定输入和输出的媒介,其中Input参数,里面的component_id对应的是下拉框的id也就是dropdown,而Output参数,当中的component_id对应的是折线图的id也就是bar_plot,我们来看一下最后出来的结果如下

最后,全部的代码如下所示

import dash
import dash_html_components as html
import dash_core_components as dcc
import plotly.graph_objects as go
import plotly.express as px
from dash.dependencies import Input, Outputapp = dash.Dash()
df = px.data.stocks()  app.layout = html.Div(id='parent', children=[html.H1(id='H1', children='Dash 案例一', style={'textAlign': 'center','marginTop': 40, 'marginBottom': 40}),dcc.Dropdown(id='dropdown',options=[{'label': '谷歌', 'value': 'GOOG'},{'label': '苹果', 'value': 'AAPL'},{'label': '亚马逊', 'value': 'AMZN'},],value='GOOG'),dcc.Graph(id='bar_plot'),
])@app.callback(Output(component_id='bar_plot', component_property='figure'),[Input(component_id='dropdown', component_property='value')])
def graph_update(dropdown_value):print(dropdown_value)fig = go.Figure([go.Scatter(x=df['date'], y=df['{}'.format(dropdown_value)],line=dict(color='firebrick', width=4))])fig.update_layout(title='股价随着时间的变幻',xaxis_title='日期',yaxis_title='价格')return figif __name__ == '__main__':app.run_server()

往期回顾

上云避坑指南100篇|云淘金时代,安全为王!

Matplotlib可视化进阶之动画

Pandas实用技能,将列排序的几种方法

如何用一行Python代码制作一个GUI?

分享
点收藏
点点赞
点在看

50 行 Python 代码绘制数据大屏,这个可视化框架真的太神了相关推荐

  1. 50行Python代码绘制数据大屏,这个可视化框架真的太神了

    今天小编来为大家安利另外一个用于绘制可视化图表的Python框架,名叫Dash,建立在Flask.Plotly.js以及React.js的基础之上,在创建之出的目的是为了帮助前端知识匮乏的数据分析人员 ...

  2. 3000 字推荐一个可视化神器,50 行 Python 代码制作数据大屏

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. Py ...

  3. 愿你是那天上星,永远闪耀照亮夜空——50行Python代码绘制满天星

    今天用50行Python代码绘制了星空满天的动图.解释下为什么要做这样一件事,因为今天是空军成立72周年纪念日,希望通过这样的方式去表达出每个年轻人都向往像星空中的一颗星星,散发着自己的光芒照亮整个夜 ...

  4. python画50个图-有人说Python是青铜?我用50行Python代码绘制3D机场分布图

    绘制一款的3D图形,不仅可以直观的展示数据分析的结果,也更方便数据化运营,同时也让工作成果更容易被大众理解.本文就基于python绘制一款基础的3D地图,用于直观展示全国机场的分布情况,以及该机场出发 ...

  5. 有人说Python是青铜?我用50行Python代码绘制3D机场分布图

    绘制一款的3D图形,不仅可以直观的展示数据分析的结果,也更方便数据化运营,同时也让工作成果更容易被大众理解.本文就基于python绘制一款基础的3D地图,用于直观展示全国机场的分布情况,以及该机场出发 ...

  6. python满天星效果图_50行Python代码绘制满天星

    今天用50行Python代码绘制了星空满天的动图.解释下为什么要做这样一件事,因为昨天是青年节,希望通过这样的方式去表达出每个年轻人都像是星空中的一颗星星,散发这自己的光芒照亮整个夜空.效果如下: u ...

  7. python写一个游戏多少代码-使用50行Python代码从零开始实现一个AI平衡小游戏

    集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏.所用环境为标准的 OpenAI Gym, ...

  8. 50行python游戏代码_使用50行Python代码从零开始实现一个AI平衡小游戏

    使用50行Python代码从零开始实现一个AI平衡小游戏 发布时间:2020-10-23 09:26:14 来源:脚本之家 阅读:74 集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何 ...

  9. python50行小游戏_使用50行Python代码从零开始实现一个AI平衡小游戏

    集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏.所用环境为标准的 OpenAI Gym, ...

最新文章

  1. python怎么画条形图-如何按python中的值分组绘制条形图?
  2. 软件工程中的所有内聚类型【吐血整理,附带排名!】
  3. int类型和byte类型的强制类型转换
  4. Git笔记(17) 协议
  5. Promise源码实现
  6. 表单出现提交两次的问题的解决
  7. 【运维安全】-sqlmap使用
  8. oracle数据库状态是started,ORACLE数据库状态与v$instance视图
  9. 老生常谈exec函数族
  10. jeecgboot框架简介
  11. CSRF和SSRF漏洞
  12. 西电计算机好考吗,西电计算机考研难吗 西电计算机专业考研难度有多大?
  13. 苹果手机测试版软件app,APP苹果测试版UDID设置
  14. 计算机英语词汇汇总,计算机英语词汇汇总
  15. 爬虫之抽屉新热榜点赞基本示例
  16. 滑膜控制和粒子群优化算法
  17. python的third party llibs
  18. 用DOS命令关闭端口
  19. cocos creater 查线上bug之-解密反编译jsc
  20. OPPO K7X手机刷root 获取magisk 强解锁BL coloros11教程

热门文章

  1. markdown 标准格式
  2. 手机射频测试总结(五)——蓝牙部分
  3. 倍福--NCI基本配置
  4. 计算机助学教学软件cai是,CAI与课堂教学
  5. 微软杭州开年会摆千人宴 包下四家5星级酒店
  6. 多线程的Python 教程--“贪吃蛇”
  7. 苹果x与苹果xs的区别_苹果x突然黑屏但没有关机
  8. java Aspose.Words实现Word生成表格并下载至本地
  9. 班级纪念册php源码,我们的班级毕业纪念册个人主页怎么做好
  10. 计算机操作系统基础笔记