学习dash篇-layout页面布局
Dash介绍
Dash官网教程地址:https://dash.plotly.com/introduction
数据分析工作的结果,通常是数据表格、图表,分析报告。这些东西office的三件套基本都能满足。
但是要将图表,报告,分析结果组合到一块就比较麻烦,而且自动化的成本较高,当数据更新时,操作更麻烦。
可以用Power BI、Tebleau、FineReport等,这些都是多数公司常用的工具。
我之所以选择Dash,主要是因为Dash是基于Flask开发的一套组件,对于python爱好者很友好,不需要太多的代码就能实现数据、图表的展示。也可以很方便的共享数据。
官网优秀案例地址:https://dash-gallery.plotly.host/Portal/
1、Dash安装
pip install dash==1.17.0
本篇介绍的是Dash官网关于布局的案例,案例地址:https://dash.plotly.com/layout
2、导包
import dash
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
# 导入自定义的css样式
external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"]
dash包:用来实例化app的包
pandas:用来读取数据
dash_core_components:Dash自定义了一些前端框架,比如:下拉框,滑动条等一些交互组件
dash_html_components:dash用来构建前端基础代码标签,比如:Div,H1,Tr等前端标签
plotly:用来画图
3、实例化app
1、自定义的css样式在实例化的时候,传给external_stylesheets参数
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
4、获取数据
1、Dash用的数据为DataFrame类型数据
2、用pandas作为读取数据工具,所以pandas支持的数据存储格式,都可以用来当做数据源
3、**当数据改变,网页对应的数据也会自动改变。**不需要重启应用
df = pd.DataFrame(data={
"Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
"Amount": [4, 1, 2, 3, 4, 5],
"City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"]
})
5、画图
官网画图地址:https://plotly.com/python/
需要画什么图,就去官网的案例上找就行
fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")
6、DataFrame转网页表格
def generate_table(dataframe, max_rows=10):
table_layout = html.Table(children=[
# 表格头部信息
html.Thead(children=html.Tr(children=[html.Th(col) for col in dataframe.columns])),
# 表格数据信息
html.Tbody(children=[
html.Tr(children=[
html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
]) for i in range(min(len(dataframe), max_rows))
])
])
return table_layout
这个函数,可以将DataFrame类型数据转换为前端表格的形式,比如将上面的df数据装为网页表格的样子如下:
7、布局
简单的页面布局
1、布局与前端HTML代码类似的树形结构
2、HTML标签的首字母大写
3、每一个标签都有id,children,style属性
4、将被嵌套的标签放到children中,如果有多个,就用放到list中
app.layout = html.Div(
children=[
# H1标签
html.H1(children="Hello Dash", style={'textAlign': 'center'}),
# Div标签
html.Div(children="Dash: A web application framework for Python", style={'textAlign': 'center'}),
# 数据表格
html.H4(children="原始数据"),
html.Div(children=generate_table(df), style={'textAlign': 'center'}),
]
)
交互框布局
1、交互框位于dash_core_components包中
2、支持MarkDown语法,调用dcc.Markdown方法
3、有下拉框、单选框、复选框、输入框、文本框、滑动条等组件
markdown_text = "### Dash支持Markdown语法。[MarkDown教程地址](http://commonmark.org/)"
app.layout = html.Div(
children=[
dcc.Markdown(children=markdown_text),
html.Br(),
html.H1(children="Dash内置的组件:"),
html.Label("下拉框(单选):"),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'},
],
value='MTL',
),
html.Label("下拉框(多选):"),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'},
],
value=['MTL', 'SF'],
multi=True,
),
html.Label('单选框:'),
dcc.RadioItems(options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'},
],
value='MTL',
),
html.Label("复选框:"),
dcc.Checklist(options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'},
],
value=['MTL',"SF"]
),
html.Label("输入框:"),
dcc.Input(value='MTL', type='text'),
html.Label("文本框:"),
dcc.Textarea(),
html.Label('滑动线:'),
dcc.Slider(
min=0,max=9,
marks={i:'Label {}'.format(i) if i == 1 else str(i) for i in range(1,6)},
value=5,
)
]
)
图表布局
1、图表标签位于dash_core_components包中
2、将plotly绘制的图像对象传给figure参数
app.layout = html.Div(
children=[
dcc.Graph(id='example-graph',figure=fig),
]
)
完整代码
#!/usr/bin/env python
# coding: utf-8
import dash
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
# 官方案例地址:https://dash.plotly.com/layout
# 导入css样式
external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"]
# 实例化一个应用对象,类似于flask的操作
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
# 构造数据
df = pd.DataFrame(data={
"Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
"Amount": [4, 1, 2, 3, 4, 5],
"City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"]
})
# 画图,官网画图地址:https://plotly.com/python/
fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")
def generate_table(dataframe, max_rows=10):
table_layout = html.Table(children=[
# 表格头部信息
html.Thead(children=html.Tr(children=[html.Th(col) for col in dataframe.columns])),
# 表格数据信息
html.Tbody(children=[
html.Tr(children=[
html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
]) for i in range(min(len(dataframe), max_rows))
])
])
return table_layout
markdown_text = "### Dash支持Markdown语法。[MarkDown教程地址](http://commonmark.org/)"
# 布局,用dash设计网页
# 每个标签都有id、children、style属性
# id为了定位到标签,children为了添加元素,style为了美化页面
app.layout = html.Div(
children=[
# H1标签
html.H1(children="Hello Dash", style={'textAlign': 'center'}),
# Div标签
html.Div(children="Dash: A web application framework for Python", style={'textAlign': 'center'}),
# 数据表格
html.H4(children="原始数据"),
html.Div(children=generate_table(df), style={'textAlign': 'center'}),
# 绘图需要用到dash_core_components中的Graph组件,将图片对象传给figure参数
dcc.Graph(id="example-graph", figure=fig),
# 支持MarkDown语法
dcc.Markdown(children=markdown_text),
html.Br(),
html.H1(children="Dash内置的组件:"),
html.Label("下拉框(单选):"),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'},
],
value='MTL',
),
html.Label("下拉框(多选):"),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'},
],
value=['MTL', 'SF'],
multi=True,
),
html.Label('单选框:'),
dcc.RadioItems(options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'},
],
value='MTL',
),
html.Label("复选框:"),
dcc.Checklist(options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'},
],
value=['MTL',"SF"]
),
html.Label("输入框:"),
dcc.Input(value='MTL', type='text'),
html.Label("文本框:"),
dcc.Textarea(),
html.Label('滑动线:'),
dcc.Slider(
min=0,max=9,
marks={i:'Label {}'.format(i) if i == 1 else str(i) for i in range(1,6)},
value=5,
)
]
)
if __name__ == '__main__':
app.run_server(debug=True)
更多好玩的内容,欢迎关注微信公众号“帅帅的Python”
学习dash篇-layout页面布局的更多相关文章
- Androd Studio layout页面布局无法预览
Could not initialize class android.support.v7.internal.widget.ActionBarOverlayLayout 导致无法看到布局页面,解决方法 ...
- Flutter2.X学习之路--调试页面布局好用的办法
Flutter里有个很好用的东西,可以方便我们来进行页面组件的布局调试,话不多说,上代码 1.找到main.dart引入rendering.dart import 'package:flutter/r ...
- (数据科学学习手札103)Python+Dash快速web应用开发——页面布局篇
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- HTML5+CSS3学习笔记(二) 页面布局:HTML5新元素及其特性
HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. 本次学习HTML5的新标签元素有: <head ...
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- CSS3与页面布局学习总结(四)——页面布局大全
一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...
- CSS3与页面布局学习笔记(四)——页面布局大全(负边距、双飞翼、多栏、弹性、流式、瀑布流、响应式布局)
一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...
- CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- CSS3与页面布局学习总结(四)——页面布局大全BFC、定位、浮动、7种垂直居中方法
目录 一.BFC与IFC 1.1.BFC与IFC概要 1.2.如何产生BFC 1.3.BFC的作用与特点 二.定位 2.2.relative 2.3.absolute 2.4.fixed 2.5.z- ...
- Asp.net MVC4高级编程学习笔记-视图学习第三课Razor页面布局20171010
Razor页面布局 1) 在布局模板页中使用@RenderBody标记来渲染主要内容.比如很多web页面说头部和尾部相同,中间内容部分使用@RenderBody来显示不同的页面内容. 2) 在布局 ...
随机推荐
- CompletableFuture事务问题
前段时间写了关于CompletableFuture的使用博客,CompletableFuture使用方法详细说明 和 CompletableFuture的thenCompose使用具体说明. 但在实际 ...
- WebSocket 基本使用
1. 引入 WebSocket 包 2. 2.最后测试 WebSocket 谷歌浏览器 F12 ,在 Console 控制台 输入以下测试链接,然后回车测试. ws = new WebSocket() ...
- notepad++解决粘贴复制代码行数问题
一.打开 Notepad++,按住 Alt,鼠标点击拖出选择框,这个是列选方法.如图: 然后删除即可 二. 1.将带行数的代码粘贴复制到notepad++中: 2.按ctrl+f,选中替换,选中正则表 ...
- C语言源文件如何编译为exe
先观看https://blog.csdn.net/u014772182/article/details/43348465来配置gcc环境随后在cmd中cd到目标文件夹gcc main.c -o ste ...
- Linux 第五节(特殊权限,隐藏权限,SU,SUDO,FHS文件系统层次化标准)
特殊权限 SUID 执行者临时获取命令的所有权限(对程序进行设置) SGID 目录内新文件所有组,继承原有目录所有组的名称 SBID 粘滞位,保护位 chmod +权限 文件 chmod ...
- C#开发上位机常用
从深圳回内地几年了,突然想把之前项目中用到的东西做信合集,别忘记了!!!
- 普罗米修斯-docker安装
1.只有一台服务器,所以使用docker来进行试验 #安装dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyu ...
- vm-linux-格式化磁盘以及挂载
数据盘大小20g 文件系统xfs 分区工具fdisk 1,虚拟机关机状态,打开设置新添加一个20g硬盘 2,重新启动虚拟机,并登陆linux,打开命令窗口 3,对磁盘进行分区 输入 fdisk -l ...
- 戴尔n4110在win7下无法使用virtualbox的解决方法(应该对win7都有用)
正文 因为已经学了一段时间的汇编了嘛,想着就拿单独一台机器出来学汇编好了,刚好趁着天气降温回学校拿被子的机会把笔记本也拿出来了,然后我装上了virtual box,把编译好的文件写到虚拟盘中,打开就直 ...
- fpga always赋值