【小沐学Python】Python实现Web图表功能(Dash之更多示例)
  I6bYKJOwynuQ 2023年11月19日 25 0

1、简介

https://dash.plotly.com/ https://dash.gallery/Portal/

Dash 是一个用于构建Web应用程序的 Python 库,无需 JavaScript 。

Dash是下载量最大,最值得信赖的Python框架,用于构建ML和数据科学Web应用程序。

2、更多示例

2.1 Basic Dashboard

import dash 
import dash_core_components as dcc     
import dash_html_components as html 

app = dash.Dash() 
  
app.layout = html.Div(children =[ 
    html.H1("Dash Tutorial"), 
    dcc.Graph( 
        id ="example", 
        figure ={ 
            'data':[ 
                       {'x':[1, 2, 3, 4, 5], 
                        'y':[5, 4, 7, 4, 8], 
                        'type':'line',  
                        'name':'Trucks'}, 
                       {'x':[1, 2, 3, 4, 5],  
                        'y':[6, 3, 5, 3, 7],  
                        'type':'bar', 
                        'name':'Ships'} 
                   ], 
            'layout':{ 
                'title':'Basic Dashboard'
            } 
        } 
    ) 
]) 

if __name__ == '__main__': 
    app.run_server() 

在这里插入图片描述

2.2 Using Callbacks

import dash 
import dash_core_components as dcc     
import dash_html_components as html 
from dash.dependencies import Input, Output  

app = dash.Dash() 
  
app.layout = html.Div(children =[ 
    dcc.Input(id ='input',  
              value ='Enter a number',  
              type ='text'), 
      
    html.Div(id ='output') 
]) 

@app.callback( 
    Output(component_id ='output', component_property ='children'), 
    [Input(component_id ='input', component_property ='value')] 
) 
  
def update_value(input_data): 
    try: 
        return str(float(input_data)**2) 
    except: 
        return "Error, the input is not a number"
    
if __name__ == '__main__': 
    app.run_server() 

在这里插入图片描述

2.3 使用Dash生成HTML

# -*- 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='你好,Dash'),

    html.Div(children='''
        Dash: Python测试示例'''),

    dcc.Graph(
        id='example-graph',
        figure={
            'data': [
                {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': '北京'},
                {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': '天津'},
            ],
            'layout': {
                'title': 'Dash数据可视化'
            }
        }
    )
])

if __name__ == '__main__':
    app.run_server(debug=True)

在这里插入图片描述

2.4 可复用组件

# -*- coding: utf-8 -*-
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')


def generate_talbe(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.css.append_css(
    {"external_url": "https://codepen.io/chriddyp/pen/bWLwgP.css"})

app.layout = html.Div(children=[
    html.H4(children='2011年美国农业出口数据表'),
    generate_talbe(df)
])
if __name__ == '__main__':
    app.run_server(debug=True)

在这里插入图片描述

2.5 可视化示例

# -*- coding: utf-8 -*-
import dash
import pandas as pd
import plotly.graph_objs as go
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()

df = pd.read_csv(
    'https://gist.githubusercontent.com/chriddyp/' +
    '5d1ea79569ed194d432e56108a04d188/raw/' +
    'a9f9e8076b837d541398e999dcbac2b2826a81f8/' +
    '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'},
                yaxis={'title': '平均寿命'},
                margin={'l': 40, 'b': 40, 't': 10, 'r': 10},
                legend={'x': 0, 'y': 1},
                hovermode='closest'
            )
        }
    )
])

if __name__ == '__main__':
    app.run_server()

在这里插入图片描述

2.6 Dash与Markdown

# -*- coding: utf-8 -*-
import dash_core_components as dcc
import dash_html_components as html
import dash

app = dash.Dash()

Markdown_text = '''
#### 标题
# 1级标题 \#
## 2级标题 \##

#### 分割线
***

### 粗体斜体
*斜体*,文字两边各写一个\*星号

**粗体**,文字两边各写两个\*星号

1. [有提示的链接](http://url.com/ "有提示的链接")
2. [没有提示的链接](http://url.com/)

#### 表格 不支持
姓名|语文|数学|总成绩
---|:---|:---:|---:
张三|100|90|190

#### 引用文字
使用\>是一级引用,使用两个>,即>>,是引用里面的引用
>引用文字
>>引用里面的引用
'''

app.css.append_css(
    {"external_url": "https://codepen.io/chriddyp/pen/bWLwgP.css"})

app.layout = html.Div([
    dcc.Markdown(children=Markdown_text)
])

if __name__ == '__main__':
    app.run_server()

在这里插入图片描述

2.7 核心组件

from dash import dcc, html, Dash
from dash.dependencies import Input, Output
 
app = Dash(__name__)
 
# 定义下拉选项
dropdown_options = [{'label': 'Blue', 'value': 'blue'},
                    {'label': 'Red', 'value': 'red'},
                    {'label': 'Yellow', 'value': 'yellow'},
                    {'label': 'Green', 'value': 'green'}]
 
# 定义app布局
app.layout = html.Div([
    dcc.Dropdown(options=dropdown_options,  
                 value='blue', 
                 id='color-dropdown'),
 
    html.Div('Hello, world!', id='output-div', style={'padding': '20px'}) 
], style={'backgroundColor': 'blue'})  # Set the initial background color
 
# Define the app callback
@app.callback(Output('output-div', 'style'), [Input('color-dropdown', 'value')])
def update_output_background_color(selected_color):
    if selected_color:
        # 更新div的背景色
        return {'backgroundColor': selected_color} 
 
if __name__ == '__main__':
    app.run_server(debug=True)

在这里插入图片描述

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭ 如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O??? 如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡) 感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
I6bYKJOwynuQ