2023年7月15日 星期六

用Python Dash來設計展示用的儀錶板(ChatGPT版本)

 Python Dash 是一個用於建立交互式網頁應用程式的 Python 函式庫,它基於 Flask、React 和 Plotly 等技術,提供了一個簡單且高效的方式來創建數據驅動的儀表板和可視化應用。以下是 Python Dash 的一些特點和功能:

  1. 快速構建:Python Dash 具有簡單的語法和豐富的組件庫,可以快速構建具有交互性的網頁應用程式。你可以使用 Python 語言來定義應用程式的外觀和行為,並使用 Dash 的組件庫來創建互動元素。
  2. 數據驅動:Python Dash 支持數據驅動的編程模型,你可以將數據和圖表直接與應用程式的組件綁定。當數據更新時,應用程式的視覺化元素會自動更新,從而實現動態和即時的數據展示。
  3. 可視化:Python Dash 集成了 Plotly 函式庫,可以輕鬆地創建各種互動式圖表和可視化效果。你可以使用 Plotly 的功能來創建折線圖、柱狀圖、散點圖、熱圖等各種類型的圖表。靈活的配置:
  4. Python Dash 具有靈活的配置和佈局選項,你可以自由設計應用程式的外觀和佈局。你可以使用 CSS 樣式表進行自定義,並使用組件庫中的佈局元素來創建多欄、多行的應用程式佈局。
  5. 服務器端渲染:Python Dash 使用 Flask 作為後端框架,並使用 React 作為前端框架。這種結合使得應用程式在服務器端進行渲染,提供了更好的性能和較快的響應時間。

Python Dash 是一個強大的工具,可用於快速開發數據驅動的儀表板和可視化應用。它提供了豐富的組件庫和可視化功能,並與 Python 生態系統緊密集成。你可以使用 Python Dash 在簡單的 Python 語法下構建強大的互動性網頁應用程式。

範例一:折線圖

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import dash
from dash import dcc
from dash import html

# 創建 Dash 應用程式
app = dash.Dash(__name__)

# 模擬數據
x_data = [1, 2, 3, 4, 5]
y_data = [10, 15, 7, 12, 8]

# 創建佈局
app.layout = html.Div(
    children=[
        html.H1('折線圖範例'),
        dcc.Graph(
            figure={
                'data': [
                    {'x': x_data, 'y': y_data, 'type': 'line', 'name': '折線圖'}
                ],
                'layout': {
                    'title': '數據趨勢',
                    'xaxis': {'title': 'X 軸'},
                    'yaxis': {'title': 'Y 軸'}
                }
            }
        )
    ]
)

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

請將上面程式碼存成XXX.py,然後再用命令列,執行Python XXX.py。

執行結果:

範例二:柱狀圖

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import dash
from dash import dcc
from dash import html

# 創建 Dash 應用程式
app = dash.Dash(__name__)

# 模擬數據
x_data = ['A', 'B', 'C', 'D']
y_data = [10, 15, 7, 12]

# 創建佈局
app.layout = html.Div(
    children=[
        html.H1('柱狀圖範例'),
        dcc.Graph(
            figure={
                'data': [
                    {'x': x_data, 'y': y_data, 'type': 'bar', 'name': '柱狀圖'}
                ],
                'layout': {
                    'title': '數據分布',
                    'xaxis': {'title': '類別'},
                    'yaxis': {'title': '數量'}
                }
            }
        )
    ]
)

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

執行結果:

範例三:散點圖

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import dash
from dash import dcc
from dash import html

# 創建 Dash 應用程式
app = dash.Dash(__name__)

# 模擬數據
x_data = [1, 2, 3, 4, 5]
y_data = [10, 15, 7, 12, 8]

# 創建佈局
app.layout = html.Div(
    children=[
        html.H1('散點圖範例'),
        dcc.Graph(
            figure={
                'data': [
                    {'x': x_data, 'y': y_data, 'mode': 'markers', 'name': '散點圖'}
                ],
                'layout': {
                    'title': '數據分布',
                    'xaxis': {'title': 'X 軸'},
                    'yaxis': {'title': 'Y 軸'}
                }
            }
        )
    ]
)

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

執行結果:

範例四:熱圖

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import dash
from dash import dcc
from dash import html

# 創建 Dash 應用程式
app = dash.Dash(__name__)

# 模擬數據
x_data = [1, 2, 3, 4, 5]
y_data = [12, 19, 3, 24, 8]
z_data = [25, 3, 18, 13, 8]
 

# 創建佈局
app.layout = html.Div(
    children=[
        html.H1('熱圖範例'),
        dcc.Graph(
            figure={
                'data': [
                    {
                        'x': x_data,
                        'y': y_data,
                        'z': z_data,
                        'type': 'heatmap',
                        'colorscale': 'Viridis'
                    }
                ],
                'layout': {
                    'title': '數據熱度',
                    'xaxis': {'title': 'X 軸'},
                    'yaxis': {'title': 'Y 軸'}
                }
            }
        )
    ]
)

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

執行結果:

範例五:數據驅動

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import dash
from dash import dcc
from dash import html
from dash.dependencies import Input, Output

# 創建 Dash 應用程式
app = dash.Dash(__name__)

# 模擬數據
x_data = [1, 2, 3, 4, 5]
y_data = [10, 15, 7, 12, 8]

# 創建佈局
app.layout = html.Div(
    children=[
        html.H1('數據驅動的範例'),
        dcc.Dropdown(
            id='dropdown',
            options=[
                {'label': '選項 A', 'value': 'A'},
                {'label': '選項 B', 'value': 'B'},
                {'label': '選項 C', 'value': 'C'}
            ],
            value='A'
        ),
        dcc.Graph(id='graph')
    ]
)

@app.callback(
    Output('graph', 'figure'),
    Input('dropdown', 'value')
)
def update_graph(selected_option):
    if selected_option == 'A':
        data = [
            {'x': x_data, 'y': y_data, 'type': 'line', 'name': '數據 A'}
        ]
    elif selected_option == 'B':
        data = [
            {'x': x_data, 'y': [y*2 for y in y_data], 'type': 'line', 'name': '數據 B'}
        ]
    else:
        data = [
            {'x': x_data, 'y': [y**2 for y in y_data], 'type': 'line', 'name': '數據 C'}
        ]
    
    return {
        'data': data,
        'layout': {
            'title': '動態更新圖表',
            'xaxis': {'title': 'X 軸'},
            'yaxis': {'title': 'Y 軸'}
        }
    }

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

執行結果:
選項A:

選項B:

選項C:

範例六:使用CSS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import dash
from dash import dcc
from dash import html

app = dash.Dash(__name__)

app.layout = html.Div(
    children=[
        html.H1('使用 CSS 的範例', style={'color': 'blue', 'text-align': 'center'}),
        dcc.Graph(
            figure={
                'data': [
                    {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': '數據'}
                ],
                'layout': {
                    'title': '圖表標題',
                    'xaxis': {'title': 'X 軸'},
                    'yaxis': {'title': 'Y 軸'}
                }
            },
            style={'width': '50%', 'margin': '0 auto'}
        )
    ],
    style={'background-color': '#f2f2f2', 'padding': '20px'}
)

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

執行結果:


沒有留言:

張貼留言