forked from saret/DHGeography
dropdown selection, filters the places
This commit is contained in:
56
ratios.py
56
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")]
|
||||
)
|
||||
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'
|
||||
[Input("place-selector", "value")]
|
||||
)
|
||||
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__":
|
||||
|
Reference in New Issue
Block a user