Hello,
I’m working on the dashboard for my assignment. After endless googling and researching, after four days, I still can’t find the solution to why this code can’t show the charts.
I put the link to the GitHub so you can take a look.
Thanks!
Hello,
I’m working on the dashboard for my assignment. After endless googling and researching, after four days, I still can’t find the solution to why this code can’t show the charts.
I put the link to the GitHub so you can take a look.
Thanks!
Hi @realvuk welcome to the community.
Swap the function parameters in this line:
Doing so, some graphs are shown, I did not check if the rest works as expected
Does’t work as should but thanks!
At least you can continue debugging. Just let us know if you need further assistance.
It looks quite same with this post https://community.plotly.com/t/help-with-displaying-graphs-with-dash-plotly/78306/4
I think have some problem in your code as below:
selected_statistics =='Yearly Statistics'
disabled option should be False@app.callback(
Output(component_id='select-year', component_property='disabled'),
Input(component_id='dropdown-statistics',component_property='value'))
def update_input_container(selected_statistics):
if selected_statistics =='Yearly Statistics':
return False
else:
return True
selected_statistics=='Yearly'
to selected_statistics=='Yearly Statistics'
# TASK 2.6: Create and display graphs for Yearly Report Statistics
# Yearly Statistic Report Plots
elif (input_year and selected_statistics=='Yearly Statistics') :
yearly_data = data[data['Year'] == input_year]
Full code:
import dash
from dash import dcc
from dash import html
from dash.dependencies import Input, Output
import pandas as pd
import plotly.graph_objs as go
import plotly.express as px
# Load the data using pandas
data = pd.read_csv('https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DV0101EN-SkillsNetwork/Data%20Files/historical_automobile_sales.csv')
# Initialize the Dash app
app = dash.Dash(__name__)
# Set the title of the dashboard
app.title = "Automobile Statistics Dashboard"
#---------------------------------------------------------------------------------
# Create the dropdown menu options
dropdown_options = [
{'label': 'Yearly Statistics', 'value': 'Yearly Statistics'},
{'label': 'Recession Period Statistics', 'value': 'Recession'}
]
# List of years
year_list = [i for i in range(1980, 2024, 1)]
#---------------------------------------------------------------------------------------
# Create the layout of the app
app.layout = html.Div([
#TASK 2.1 Add title to the dashboard
html.H1("Yearly Statistics"),#May include style for title
html.Div([#TASK 2.2: Add two dropdown menus
html.Label("Select Statistics:"),
dcc.Dropdown(
id='dropdown-statistics',
options=dropdown_options,
value='Yearly',
placeholder='Select a report type'
)
]),
html.Div(dcc.Dropdown(
id='select-year',
options=[{'label': i, 'value': i} for i in year_list],
value=1980
)),
html.Div([#TASK 2.3: Add a division for output display
html.Div(id='output-container', className='division', style={'display': 'flex'}),])
])
#TASK 2.4: Creating Callbacks
# Define the callback function to update the input container based on the selected statistics
@app.callback(
Output(component_id='select-year', component_property='disabled'),
Input(component_id='dropdown-statistics',component_property='value'))
def update_input_container(selected_statistics):
if selected_statistics =='Yearly Statistics':
return False
else:
return True
#Callback for plotting
# Define the callback function to update the input container based on the selected statistics
@app.callback(
Output(component_id='output-container', component_property='children'),
Input(component_id='dropdown-statistics', component_property='value'),
Input(component_id='select-year', component_property='value'),
)
def update_output_container(selected_statistics, input_year):
if selected_statistics == 'Recession':
# Filter the data for recession periods
recession_data = data[data['Recession'] == 1]
#TASK 2.5: Create and display graphs for Recession Report Statistics
#Plot 1 Automobile sales fluctuate over Recession Period (year wise)
# use groupby to create relevant data for plotting
yearly_rec=recession_data.groupby('Year')['Automobile_Sales'].mean().reset_index()
R_chart1 = dcc.Graph(
figure=px.line(yearly_rec,
x='Year',
y='Automobile_Sales',
title="Average Automobile Sales fluctuation over Recession Period"))
#Plot 2 Calculate the average number of vehicles sold by vehicle type
# use groupby to create relevant data for plotting
average_sales = recession_data.groupby('Vehicle_Type')['Automobile_Sales'].mean().reset_index()
R_chart2 = dcc.Graph(figure=px.line(average_sales, x='Automobile_Sales', y='Vehicle_Type', title='Average number of vehicles sold by vehicle type'))
# Plot 3 Pie chart for total expenditure share by vehicle type during recessions
# use groupby to create relevant data for plotting
exp_rec = recession_data.groupby('Vehicle_Type')['Advertising_Expenditure'].mean().reset_index()
R_chart3 = dcc.Graph(figure=px.pie(exp_rec, values='Advertising_Expenditure', names='Vehicle_Type', title='Total expenditure share by vehicle type during recessions',
)
)
# Plot 4 bar chart for the effect of unemployment rate on vehicle type and sales
unemployment_sales= recession_data.groupby(['Vehicle_Type', 'unemployment_rate'])['Automobile_Sales'].mean().reset_index()
R_chart4 = dcc.Graph(
figure=px.bar(unemployment_sales, x='unemployment_rate', y='Automobile_Sales', color='Vehicle_Type', title='The effect of unemployment rate on vehicle type and sales')
)
return [
html.Div(className='chart-item', children=[html.Div(children=R_chart1),html.Div(children=R_chart1)],style={'display': 'flex'}),
html.Div(className='chart-item', children=[html.Div(children=R_chart2),html.Div(children=R_chart2)],style={'display': 'flex'}),
html.Div(className='chart-item', children=[html.Div(children=R_chart3),html.Div(children=R_chart3)],style={'display': 'flex'}),
html.Div(className='chart-item', children=[html.Div(children=R_chart4),html.Div(children=R_chart4)],style={'display': 'flex'})
]
# TASK 2.6: Create and display graphs for Yearly Report Statistics
# Yearly Statistic Report Plots
elif (input_year and selected_statistics=='Yearly Statistics') :
yearly_data = data[data['Year'] == input_year]
#TASK 2.5: Creating Graphs Yearly data
#plot 1 Yearly Automobile sales using line chart for the whole period.
yas= data.groupby('Year')['Automobile_Sales'].mean().reset_index()
Y_chart1 = dcc.Graph(figure=px.line(yas, x='Year', y='Automobile_Sales', title ='Yearly Automobile sales'))
# Plot 2 Total Monthly Automobile sales using line chart.
mas= data.groupby('Month')['Automobile_Sales'].mean().reset_index()
Y_chart2 = dcc.Graph(figure=px.line(mas, x='Month', y='Automobile_Sales', title ='Yearly Automobile sales'))
# Plot bar chart for average number of vehicles sold during the given year
avr_data=yearly_data.groupby('Year')['Automobile_Sales'].mean().reset_index()
Y_chart3 = dcc.Graph(figure=px.bar(avr_data, x='Year', y='Automobile_Sales',title='Average number of vehicles sold during the given year {}'.format(input_year)))
# Total Advertisement Expenditure for each vehicle using pie chart
exp_data=yearly_data.groupby('Vehicle_Type')['Advertising_Expenditure'].mean().reset_index()
Y_chart4 = dcc.Graph(figure=px.pie(exp_data,
values='Advertising_Expenditure',
names='Vehicle_Type',
title='Total Advertisement Expenditure for each vehicle'))
#TASK 2.6: Returning the graphs for displaying Yearly data
return [
html.Div(className='chart-item', children=[html.Div(children=Y_chart1),html.Div(children=Y_chart1)],style={'display': 'flex'}),
html.Div(className='chart-item', children=[html.Div(children=Y_chart2),html.Div(children=Y_chart2)],style={'display': 'flex'}),
html.Div(className='chart-item', children=[html.Div(children=Y_chart3),html.Div(children=Y_chart3)],style={'display': 'flex'}),
html.Div(className='chart-item', children=[html.Div(children=Y_chart4),html.Div(children=Y_chart4)],style={'display': 'flex'})
]
else:
return None
# Run the Dash app
if __name__ == '__main__':
app.run_server(debug=False)