Neszed-Mobile-header-logo
Wednesday, October 29, 2025
Newszed-Header-Logo
HomeAIHow to Design an Interactive Dash and Plotly Dashboard with Callback Mechanisms...

How to Design an Interactive Dash and Plotly Dashboard with Callback Mechanisms for Local and Online Deployment?

app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])


app.layout = dbc.Container([
   dbc.Row([
       dbc.Col([
           html.H1(" Advanced Financial Dashboard", className="text-center mb-4"),
           html.P(f"Interactive dashboard with {len(df)} data points across {len(stock_names)} stocks",
                  className="text-center text-muted"),
           html.Hr()
       ])
   ]),
  
   dbc.Row([
       dbc.Col([
           dbc.Card([
               dbc.CardBody([
                   html.H5(" Dashboard Controls", className="card-title"),
                  
                   html.Label("Select Stocks:", className="fw-bold mt-3"),
                   dcc.Dropdown(
                       id='stock-dropdown',
                       options=[{'label': f'{stock} ({base_prices[stock]})', 'value': stock}
                               for stock in stock_names],
                       value=['AAPL', 'GOOGL'], 
                       multi=True,
                       placeholder="Choose stocks to analyze..."
                   ),
                  
                   html.Label("Date Range:", className="fw-bold mt-3"),
                   dcc.DatePickerRange(
                       id='date-picker-range',
                       start_date="2023-06-01",
                       end_date="2024-06-01",
                       display_format="YYYY-MM-DD",
                       style={'width': '100%'}
                   ),
                  
                   html.Label("Chart Style:", className="fw-bold mt-3"),
                   dcc.RadioItems(
                       id='chart-type',
                       options=[
                           {'label': ' Line Chart', 'value': 'line'},
                           {'label': ' Area Chart', 'value': 'area'},
                           {'label': ' Scatter Plot', 'value': 'scatter'}
                       ],
                       value="line",
                       labelStyle={'display': 'block', 'margin': '5px'}
                   ),
                  
                   dbc.Checklist(
                       id='show-ma',
                       options=[{'label': ' Show Moving Average', 'value': 'show'}],
                       value=[],
                       style={'margin': '10px 0'}
                   ),
               ])
           ], className="h-100")
       ], width=3),
      
       dbc.Col([
           dbc.Card([
               dbc.CardHeader(" Stock Price Analysis"),
               dbc.CardBody([
                   dcc.Graph(id='main-chart', style={'height': '450px'})
               ])
           ])
       ], width=9)
   ], className="mb-4"),
  
   dbc.Row([
       dbc.Col([
           dbc.Card([
               dbc.CardBody([
                   html.H4(id="avg-price", className="text-primary mb-0"),
                   html.Small("Average Price", className="text-muted")
               ])
           ])
       ], width=3),
       dbc.Col([
           dbc.Card([
               dbc.CardBody([
                   html.H4(id="total-volume", className="text-success mb-0"),
                   html.Small("Total Volume", className="text-muted")
               ])
           ])
       ], width=3),
       dbc.Col([
           dbc.Card([
               dbc.CardBody([
                   html.H4(id="price-range", className="text-info mb-0"),
                   html.Small("Price Range", className="text-muted")
               ])
           ])
       ], width=3),
       dbc.Col([
           dbc.Card([
               dbc.CardBody([
                   html.H4(id="data-points", className="text-warning mb-0"),
                   html.Small("Data Points", className="text-muted")
               ])
           ])
       ], width=3)
   ], className="mb-4"),
  
   dbc.Row([
       dbc.Col([
           dbc.Card([
               dbc.CardHeader(" Trading Volume"),
               dbc.CardBody([
                   dcc.Graph(id='volume-chart', style={'height': '300px'})
               ])
           ])
       ], width=6),
       dbc.Col([
           dbc.Card([
               dbc.CardHeader(" Returns Distribution"),
               dbc.CardBody([
                   dcc.Graph(id='returns-chart', style={'height': '300px'})
               ])
           ])
       ], width=6)
   ], className="mb-4"),
  
   dbc.Row([
       dbc.Col([
           dbc.Card([
               dbc.CardHeader(" Latest Stock Data"),
               dbc.CardBody([
                   dash_table.DataTable(
                       id='data-table',
                       columns=[
                           {'name': 'Stock', 'id': 'Stock'},
                           {'name': 'Date', 'id': 'Date'},
                           {'name': 'Price ($)', 'id': 'Price', 'type': 'numeric',
                            'format': {'specifier': '.2f'}},
                           {'name': 'Volume', 'id': 'Volume', 'type': 'numeric',
                            'format': {'specifier': ',.0f'}},
                           {'name': 'Daily Return (%)', 'id': 'Returns', 'type': 'numeric',
                            'format': {'specifier': '.2%'}}
                       ],
                       style_cell={'textAlign': 'center', 'fontSize': '14px', 'padding': '10px'},
                       style_header={'backgroundColor': 'rgb(230, 230, 230)', 'fontWeight': 'bold'},
                       style_data_conditional=[
                           {
                               'if': {'filter_query': '{Returns} > 0'},
                               'backgroundColor': '#d4edda'
                           },
                           {
                               'if': {'filter_query': '{Returns} < 0'},
                               'backgroundColor': '#f8d7da'
                           }
                       ],
                       page_size=15,
                       sort_action="native",
                       filter_action="native"
                   )
               ])
           ])
       ])
   ])
], fluid=True)

Source link

RELATED ARTICLES

Most Popular

Recent Comments