From 97f7c410d39c41a63baa8ae4be15805a62283edf Mon Sep 17 00:00:00 2001 From: 1kamma Date: Wed, 18 Oct 2023 01:23:52 +0300 Subject: [PATCH] dropdown selection, filters the places --- ratios.py | 56 ++++++++++++++++++++++--------------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/ratios.py b/ratios.py index 9f11540..bd4033a 100644 --- a/ratios.py +++ b/ratios.py @@ -1,7 +1,6 @@ import pandas as pd import dash -import dash_core_components as dcc -import dash_html_components as html +from dash import dcc, html from dash.dependencies import Input, Output import plotly.graph_objects as go @@ -15,49 +14,38 @@ app = dash.Dash(__name__) # Define the columns to summarize columns_to_summarize = ["ancient", "old", "middle", "new", "late"] -# Create the figure -fig = go.Figure() - -# Add an initial trace for demonstration -fig.add_trace(go.Bar(x=["Place 1", "Place 2", "Place 3"], - y=[5, 7, 4], name="ancient")) +# Create the figure for the initial graph (placeholder data) +initial_data = df.groupby("place")[columns_to_summarize].sum().reset_index() +initial_fig = go.Figure(data=[ + go.Bar(name=col, x=initial_data["place"], y=initial_data[col]) for col in columns_to_summarize +]) # Define the app layout app.layout = html.Div([ - html.H1("Interactive Bar Graph with Filtering"), - dcc.Checklist( + html.H1("Dynamic Stacked Bar Graph"), + dcc.Dropdown( id="place-selector", options=[{"label": place, "value": place} for place in df["place"].unique()], - value=df["place"].unique().tolist(), - labelStyle={'display': 'block'} + multi=True, + placeholder="Select Places", ), - dcc.Checklist( - id="column-selector", - options=[{"label": col, "value": col} for col in columns_to_summarize], - value=columns_to_summarize, - labelStyle={'display': 'block'} - ), - dcc.Graph(id="bar-graph", figure=fig) + dcc.Graph(id="bar-graph", figure=initial_fig), ]) -# Define callback functions to update the graph +# Define a callback to update the graph based on selected places @app.callback( Output("bar-graph", "figure"), - [Input("place-selector", "value"), Input("column-selector", "value")] + [Input("place-selector", "value")] ) -def update_graph(selected_places, selected_columns): - filtered_df = df[(df["place"].isin(selected_places)) & (df[selected_columns].sum(axis=1) > 0)] - grouped = filtered_df.groupby("place")[selected_columns].sum().reset_index() - fig = go.Figure() - for col in selected_columns: - fig.add_trace(go.Bar(x=grouped["place"], y=grouped[col], name=col, text=grouped[col], textposition='auto')) - fig.update_layout( - title="Summary of Categories by Place with Selection", - xaxis_title="Place", - yaxis_title="Total Count", - xaxis=dict(categoryorder='total descending'), - barmode='stack' - ) +def update_graph(selected_places): + filtered_df = df[df["place"].isin(selected_places)] + grouped = filtered_df.groupby("place")[columns_to_summarize].sum().reset_index() + + fig = go.Figure(data=[ + go.Bar(name=col, x=grouped["place"], y=grouped[col]) for col in columns_to_summarize + ]) + fig.update_layout(barmode="stack") # Set the bars to be stacked + return fig if __name__ == "__main__":