✊🏿 Black Lives Matter. Please consider donating to Black Girls Code today.
⚡️ Concerned about the grid? Kyle Baranko teaches how to predicting peak loads using XGBoost. Register for the August webinar!

Python Dash data not loading completely on Heroku

Python Dash data not loading completely on Heroku Pipelines:

Dash data loads correctly on localhost (code attached) with a value in 2017 up to 50 on the y-axis, but those values are not being displayed when deployed to Heroku.

sewerpollutants

app.py

import dash
from dash.dependencies import Input, Output
import dash_core_components as dcc
import dash_html_components as html 
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import dash_bootstrap_components as dbc
import re

# Load data
url1 = 'https://sewerpollutants.s3.us-west-2.amazonaws.com/LIMS.xls'
df = pd.read_excel(url1,index_col=0, parse_dates=True)
df["pollutant_abb"] = df.PARAMLISTDESC.apply(lambda x: re.sub(" *\-.+", "", x)) # remove -Total Recoverable
df.sort_values("pollutant_abb", inplace = True)

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

app.layout = html.Div([
    html.Center(html.H2("Sewer Pollutants")),
    html.Center(html.H6("Interactive Dashboard using Laboratory Information Management System(LIMS) data")),
    html.Div(dcc.Tabs([
        dcc.Tab([
            html.Div([
                dcc.Dropdown(id='pollutant-dropdown', 
                    options = [{'label': str(pltn), 'value': str(pltn)} for pltn in df.pollutant_abb.unique()], 
                    multi = True, className = "ml-3 mr-3"),
                html.Div(dcc.Loading(id = 'barchart'))  # or dbc.Spinner
            ]) # html.div
        ], label = "EPA metal Pollutants of Concern (POC)") # dbc.Col dcc.Tab
    ]))
])

# Callbacks
@app.callback(
    Output("barchart", "children"),
    [Input("pollutant-dropdown", "value")]
)
def filterPollutants(selected_pollutants):
    if selected_pollutants:
        dff = df.loc[df.pollutant_abb.isin(selected_pollutants)]
    else:
        dff = df
    
    bar_fig = {'data':[
            go.Bar(
            x = dff['U_SAMPLE_DTTM'],
            y = dff['DISPLAYVALUE'],
            )], 
    'layout':go.Layout(title='Sampling for Local Limits', 
            # yaxis_range=[0,2],
            yaxis_title_text='Metals mg/L'
            )}      

    # line_fig = px.line(dff, x= "U_SAMPLE_DTTM", y = "DISPLAYVALUE", color = "pollutant_abb",#  template = "simple_white",
    #   title = "Sampling for Local Limits")

    # line_fig.update_layout({"yaxis": {"title": {"text": "Metals mg/L"}}})

    return dcc.Graph(figure = bar_fig)

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

Any help would be appreciated.

Hi @Hamza21 and welcome to the Dash Community!

I think your issue is similar to this thread.

I checked the datatypes of your columns and values of y axis are of type object instead of the numeric(float) type.
Try the solution I have discussed in the same thread.