再发Dash是一个纯Python写成的交互式的web应用程序
1 说明:
======
1.1 今天白天发过有关Dash的文章,发现有问题,先撤回,再删除。虽然会严重影响推荐,但是为了读者负责任,我愿意承担这样,不在乎推荐。所以喜欢的,请点赞、关注、转发、评论和收藏。
1.2 Dash是一个纯Python写成的框架,无需JavaScript即可构建交互式的分析类web应用程序。
1.3 Dash是一个优秀的交互式可视化工具,基于plotly。
1.4 python可视化库plotly生态简介(plotly, plotly_express, dash)。
2 安装:
=====pip install dash==1.12.0 #本机安装 pip3.8 install dash #我任性一点,不指定版本安装
3 官网:
=====https://github.com/plotly/dash https://plotly.com/dash #本机太卡,基本没进去过 https://dash-gallery.plotly.host/Portal/
4 基本作图:
=========
4.1 柱状图bar:
===========
4.1.1 代码:# -*- coding: utf-8 -*- import dash import dash_core_components as dcc import dash_html_components as html #external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"] #方法三 #app = dash.Dash(__name__, external_stylesheets=external_stylesheets) #方法三 #app = dash.Dash(__name__) #方法二 app = dash.Dash() #注意等同于上面,方法一 #html的p容器布局 app.layout = html.Div( children=[ #h1文字,这个与Html的h1~4的字体一样 #html.H1(children="Hello Dash"), html.H1("Hello Dash"), #同上面 #html.Label("Hello Dash"), #注意label与p的文本一样,字体大小等 #文字 html.Div(children="""Dash: A web application framework for Python."""), #可视化作图 dcc.Graph( #id="example-graph", #如果布局较多的内容,id就很重要 figure={ "data": [ #type为bar---柱状图 {"x": [1, 2, 3], "y": [4, 1, 2], "type": "bar", "name": "汽车"}, {"x": [1, 2, 3], "y": [2, 4, 5], "type": "bar", "name": "火车"}, ], #title就是图表的标题 "layout": {"title": "Dash Data Visualization"} } ) ]) if __name__ == "__main__": app.run_server(debug=True) #其实是结合flask的在线可视化作图
4.1.2 操作和效果图:
4.2 折线图line:
===========
4.2.1 代码:# -*- coding: utf-8 -*- import dash import dash_core_components as dcc import dash_html_components as html app = dash.Dash() app.layout = html.Div(children=[ html.H1(children="Hello Dash"), html.Div(children=""" Dash: A web application framework for Python. """), dcc.Graph( id="example-graph", figure={ "data": [ #由bar柱状图改为line折线图,仅仅改type为line---折线图 {"x": [1, 2, 3], "y": [4, 1, 2], "type": "line", "name": "汽车"}, {"x": [1, 2, 3], "y": [2, 4, 5], "type": "line", "name": "火车"}, ], "layout": { "title": "Dash Data Visualization" } } ) ]) if __name__ == "__main__": app.run_server(debug=True)
4.2.2 操作和效果图:
4.3 散点图Scatter:
==============
4.3.1 代码:import dash import dash_core_components as dcc import dash_html_components as html app = dash.Dash() app.layout = html.Div([ dcc.Graph( figure={ "data": [ #A组数据 { "x": [1, 2, 3, 4], "y": [4, 1, 3, 5], "text": ["鸡", "鸭", "鹅", "鸟"], "name": "A组", "mode": "markers", #散点图大小设置 "marker": {"size": 20} }, #B组数据 { "x": [1, 2, 3, 4], "y": [9, 4, 1, 4], "text": ["猪", "狗", "牛", "羊"], "name": "B组", "mode": "markers", #散点图大小设置 "marker": {"size": 20} } ], "layout": #图表标题 {"title": "Dash Data Visualization"} } ), ]) if __name__ == "__main__": app.run_server(debug=True)
4.3.2 操作和效果图:注意因为我的谷歌浏览器并没有关闭,所以启动后自动刷新。
4.4 高级散点图Scatter:
==================
4.4.1 代码:import dash import dash_core_components as dcc import dash_html_components as html import pandas as pd import plotly.graph_objs as go app = dash.Dash() #在线csv地址和引用 """ df = pd.read_csv( "https://gist.githubusercontent.com/chriddyp/" + "5d1ea79569ed194d432e56108a04d188/raw/" + "a9f9e8076b837d541398e999dcbac2b2826a81f8/"+ "gdp-life-exp-2007.csv") """ #将数据csv下载到本地的引用 df = pd.read_csv("/home/xgj/Desktop/dash/gdp-life-exp-2007.csv") app.layout = html.Div([ dcc.Graph( id="life-exp-vs-gdp", figure={ "data": [ go.Scatter( x=df[df["continent"] == i]["gdp per capita"], y=df[df["continent"] == i]["life expectancy"], text=df[df["continent"] == i]["country"], mode="markers", opacity=0.7, marker={ "size": 15, "line": {"width": 0.5, "color": "white"} }, name=i)for i in df.continent.unique() ], "layout": go.Layout( xaxis={"type": "log", "title": "GDP Per Capita"}, yaxis={"title": "Life Expectancy"}, margin={"l": 40, "b": 40, "t": 10, "r": 10}, legend={"x": 0, "y": 1}, hovermode="closest") } ) ]) if __name__ == "__main__": app.run_server(debug=True)
4.4.2 操作和效果图:
5 控件:
=====
5.1 代码:# -*- coding: utf-8 -*- import dash import dash_core_components as dcc import dash_html_components as html app = dash.Dash() app.layout = html.Div([ #展示1: html.Label("Dropdown=下拉菜单"), dcc.Dropdown( options=[ {"label": "太阳", "value": "SUN"}, {"label": "地球", "value": "EARTH"}, {"label": "月亮", "value": "MOON"} ], value="SUN" #初始值 ), #展示2: html.Label("Multi-Select Dropdown=多选菜单"), dcc.Dropdown( options=[ {"label": "太阳", "value": "SUN"}, {"label": "地球", "value": "EARTH"}, {"label": "月亮", "value": "MOON"} ], #初始值显示对应的label value=["SUN", "MOON"], multi=True ), #展示3: html.Label("Radio Items=单选菜单"), dcc.RadioItems( options=[ {"label": "太阳", "value": "SUN"}, {"label": "地球", "value": "EARTH"}, {"label": "月亮", "value": "MOON"} ], value="MTL" ), #展示4: html.Label("Checkboxes=复选菜单"), dcc.Checklist( options=[ {"label": "太阳", "value": "SUN"}, {"label": "地球", "value": "EARTH"}, {"label": "月亮", "value": "MOON"} ], value=["MTL", "SF"] ), #展示5: html.Label("Slider=滑动条"), dcc.Slider( min=0, max=9, marks={i: "Label {}".format(i) if i == 0 else str(i) for i in range(0, 10)}, #初始值 value=5, ), ], #代表1列;2代表2列;3代表3列=column style={"columnCount": 1}) if __name__ == "__main__": app.run_server(debug=True)
5.2 操作和效果图:
6 表格table:
=========
6.1 代码:import dash import dash_core_components as dcc import dash_html_components as html import pandas as pd """ #在线引用 df = pd.read_csv( "https://gist.githubusercontent.com/chriddyp/" "c78bf172206ce24f77d6363a2d754b59/raw/" "c353e8ef842413cae56ae3920b8fd78468aa4cb2/" "usa-agricultural-exports-2011.csv") """ #下载到本地,引用 df = pd.read_csv("/home/xgj/Desktop/dash/usa-agricultural-exports-2011.csv") #定义产生表格函数 def generate_table(dataframe, max_rows=10): #返回值是一个表格 return html.Table( # Header=表头 [html.Tr([html.Th(col) for col in dataframe.columns])] + # Body=表体 [html.Tr([ html.Td(dataframe.iloc[i][col]) for col in dataframe.columns ]) for i in range(min(len(dataframe), max_rows))] ) app = dash.Dash() app.layout = html.Div(children=[ html.H4(children="US Agriculture Exports (2011年)"), #故意中英文混合,提示支持中文 generate_table(df) #引用自定义函数 ]) if __name__ == "__main__": app.run_server(debug=True)
6.2 操作和效果图:
7 回调callback:
============
7.1 代码:import dash import dash_core_components as dcc import dash_html_components as html app = dash.Dash() app.layout = html.Div([ dcc.RadioItems( id="dropdown-a", options=[{"label": i, "value": i} for i in ["马", "牛", "羊"]], value="马" ), html.Div(id="output-a"), dcc.RadioItems( id="dropdown-b", options=[{"label": i, "value": i} for i in ["鸡", "鸭", "鹅"]], value="鸭" ), html.Div(id="output-b") ]) @app.callback( dash.dependencies.Output("output-a", "children"), [dash.dependencies.Input("dropdown-a", "value")]) #定义函数回调a def callback_a(dropdown_value): #注意python的转义字符",就是显示" return "You"ve selected "{}"".format(dropdown_value) @app.callback( dash.dependencies.Output("output-b", "children"), [dash.dependencies.Input("dropdown-b", "value")]) def callback_b(dropdown_value): return "You"ve selected "{}"".format(dropdown_value) if __name__ == "__main__": app.run_server()
7.2 操作和效果图:
===自己整理并分享出来===
喜欢的就点赞、关注、转发、评论和收藏。
估计推荐量不高,没关系,我自己觉得修改后的更好。
幼儿园放学,两个小朋友没有被认领,亲妈瞅20分钟没被认出来许多父母觉得将小孩送入幼稚园,小孩渐渐地就会学着听话,已不像过去一样瞎折腾了,但是父母又哪儿回想到,小屁孩居然刚开始拉帮结派一起瞎折腾。近期有一所幼稚园下学,可是有2个小孩一直没有
经常被催促的孩子,未来充满隐患文良子父母课堂原创01hr周末小宝妈去美术班接孩子。眼看教室里的孩子陆陆续续的把作品交给老师,小宝的妈妈就开始催孩子了。你快点呀!没看你的同学都画好了吗?你怎么这么慢呀!小宝孩委屈
怎么给孩子选幼儿园?别纠结公立私立,这5个细节很重要最近在奶油妈妈的36岁的妈妈交流群中,有为妈妈提问如何给孩子选幼儿园这个问题。怎么给孩子挑选合适的幼儿园?经过考察和分析,奶油妈妈认为,这5点决定幼儿园的好坏,家长要提前了解一下。
婴儿这几个部位弱不禁风,父母一定要当心护理有许多新生儿的父母,他们不敢碰到年轻的娃娃。因为身体真的很柔软,恐怕一些运动会对他们带来伤害。特别是,需要保护这些敏感部位。这些幼儿弱,父母应该被对待首先,囟囟这是一个在娃娃的头骨
给宝宝戒掉夜奶,不能只看月龄,宝宝的这些表现,妈妈也要留心甜椒儿妈妈,一个时间相对自由的全职妈妈,喜欢分享,喜欢倾听,希望把经历过的看到过的听到过的,用文字的方式表达出来,对观者在育儿上情感上有所启发文家有小甜椒儿(原创不易,请勿抄袭,欢
个头矮小的父母如何能让宝宝长大个?根据婴幼儿的体格发育调查报告,2009年6月2日由国家卫生部正式公布了由相关专业人士研究制订的中国7岁以下儿童生长发育参照标准,此项标准成为了评估婴幼儿身体发育是否标准与否的重要参
喂养宝宝突然不爱吃奶了怎么办?早产早产儿育儿公益宝宝拒绝吃奶的信号打哈欠连续打嗝转头避开手指呈扇形张开,挡在身前反呕咬住奶嘴窒息烦躁地哭闹上述这些表现出现的时候,需要停止继续喂奶。通常会同时出现几种,家长只要注
六一片单三孩生育都放开了,你还在为一孩头大昨天,中共中央政治局出台重大政策举措一对夫妻可以生育三个子女。不少网友吐槽,连一孩都没养明白呢,还想什么三孩???确实,如今生育抚养一个孩子的成本太大,很多家长光照顾一个孩子就倍感
为何说孩子尽量不跟老人在一起睡?并非迷信,而是过来人的经验本文是由集团母亲创建的,欢迎个人意见,分享现代年轻人的生命压力越来越大,工作非常好,甚至女性都有自己的职业。但是赚钱和陪伴的孩子,但老人仍然是一个趋势。从帮助的开始,我会参加一所学
孩子被骂后,如果有这2种反应,家长要警惕他形成讨好型人格因为已知的原因,现在孩子们还没有开始上学,在家里一个安静的网上课,说这是安静的,但实际上,更难以知道有一个网络类,鸡肉飞行更难是很多父母。他们都有头疼。许多父母不知道,净类是小的,
家长这样做,孩子会越来越优秀不打不成器棍棒底下出孝子严师出高徒在传统教育理念中,好孩子的养成与棍棒教育有着必然联系。明明是自己捧在手心里的宝,为什么家长们却总能下得了手呢?打是亲,骂是爱。很多家长发现,打就像