目次

基本構造

全体構造

import dash
import dash_core_components as dcc
import dash_html_components as html
 
# 外部スタイルシート
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
 
# Dashアプリケーション生成
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
 
# HTMLレイアウト設定
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': [
                {'x': [1, 2, 3, 4, 5], 'y': [2, 1, 3, 6, 8], 'type': 'bar', 'name': 'XXXX'},
                {'x': [1, 2, 3, 4, 5], 'y': [4, 9, 5, 6, 1], 'type': 'bar', 'name': 'YYYY'},
            ],
            'layout': {
                'title': 'Sample Graph Data'
            }
        }
    )
])
 
# アプリケーションサーバ起動
if __name__ == '__main__':
    app.run_server(debug=True)

レイアウト

ブロック

# div要素
html.Div(children='出力文字列')

見出し

# h1要素
html.H1(children='見出し1')
 
# h2要素
html.H2(children='見出し2')
 
# h3要素
html.H3(children='見出し3')
 
# h4要素
html.H4(children='見出し4')
 
# h5要素
html.H5(children='見出し5')

フォーム

# ドロップダウン(単一選択)
dcc.Dropdown(
    options=[
        {'label': '佐藤', 'value': 'sato'},
        {'label': '鈴木', 'value': 'suzuki'},
        {'label': '田中', 'value': 'tanaka'},
    ],
    value='suzuki'
),
html.Br(),
 
# ドロップダウン(複数選択)
dcc.Dropdown(
    options=[
        {'label': '佐藤', 'value': 'sato'},
        {'label': '鈴木', 'value': 'suzuki'},
        {'label': '田中', 'value': 'tanaka'},
    ],
    value=['sato', 'suzuki'],
    multi=True
),
html.Br(),
 
# ラジオボタン
dcc.RadioItems(
    options=[
        {'label': '佐藤', 'value': 'sato'},
        {'label': '鈴木', 'value': 'suzuki'},
        {'label': '田中', 'value': 'tanaka'},
    ],
    value='suzuki'
),
html.Br(),
 
# チェックボックス
dcc.Checklist(
    options=[
        {'label': '佐藤', 'value': 'sato'},
        {'label': '鈴木', 'value': 'suzuki'},
        {'label': '田中', 'value': 'tanaka'},
    ],
    value=['suzuki', 'tanaka']
),
html.Br(),
 
# テキストボックス
dcc.Input(value='佐藤', type='text'),
html.Br(),
 
# スライダー
dcc.Slider(
    min=0,
    max=5,
    marks={i:str(i) for i in range(1,6)},
    value=3
)

グラフ

棒グラフ

dcc.Graph(
    id='example-graph',
    figure={
        'data': [
            {'x': [1, 2, 3, 4, 5], 'y': [2, 1, 3, 6, 8], 'type': 'bar', 'name': 'XXXX'},
            {'x': [1, 2, 3, 4, 5], 'y': [4, 9, 5, 6, 1], 'type': 'bar', 'name': 'YYYY'},
        ],
        'layout': {
            'title': 'Dash Data Visualization',
        }
    }
)

折れ線グラフ

import plotly.graph_objs as go
 
# ~~~ 省略 ~~~
 
dcc.Graph(
    id='sample-line',
    figure={
        'data':[
            go.Scatter(
                x=[1, 2, 3, 4, 5, 6],
                y=[2, 4, 6, 8, 10, 12],
                mode='lines',
                opacity=0.7,
                marker={
                    'size':15
                },
                name='XXXX'
            ),
            go.Scatter(
                x=[1, 2, 3, 4, 5, 6],
                y=[5, 10, 8, 16, 11, 20],
                mode='lines',
                opacity=0.7,
                marker={
                    'size':15
                },
                name='YYYY'
            )
        ],
        'layout': go.Layout(
            xaxis={'title':'x軸'},
            yaxis={'title':'y軸'},
            width=1000,
            height=500
        )
    }
)

円グラフ

 

帯グラフ

 

ヒスとグラム

 

レーダーチャート

 

散布図

import plotly.graph_objs as go
 
# ~~~ 省略 ~~~
 
dcc.Graph(
    id='sample-scatter',
    figure={
        'data':[
            go.Scatter(
                x=[1, 4, 6, 9],
                y=[10, 30, 20, 25],
                mode='markers',
                opacity=0.7,
                marker={
                    'size':15
                },
                name='グループ1'
            ),
                go.Scatter(
                x=[2, 8, 5, 1],
                y=[5, 19, 12, 20],
                mode='markers',
                opacity=0.7,
                marker={
                    'size':15
                },
                name='グループ2'
            )
        ],
        'layout':go.Layout(
            xaxis={'title':'x軸'},
            yaxis={'title':'y軸'},
        )
    }
)

箱ひげ図

 

三角グラフ

 

Markdown記法

dcc.Markdown('''
# 見出し1
## 見出し2
 
- 箇条書き1
- 箇条書き2
- 箇条書き3
- 箇条書き4
''')

Callback関数

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
 
# ~~~ 省略 ~~~
 
app.layout = html.Div([
    dcc.Input(id='input-div', value='initial value', type='text'),
    html.Div(id='output-div')
 
])
 
@app.callback(
    Output(component_id='output-div', component_property='children'),
    [Input(component_id='input-div', component_property='value')]
)
 
def update(input_value):
    return 'You entered {}'.format(input_value)