Skip to content

Commit 22bd317

Browse files
committed
Added table & plot translation capabilities
1 parent 26dd9c6 commit 22bd317

File tree

4 files changed

+63
-4
lines changed

4 files changed

+63
-4
lines changed

src/chime_dash/app/services/callbacks.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,14 @@ def handle_model_change(i, sidebar_data):
3838
if sidebar_data:
3939
pars = parameters_deserializer(sidebar_data["parameters"])
4040
model = SimSirModel(pars)
41+
vis = i.components.get("visualizations", None) if i else None
42+
vis_content = vis.content if vis else None
43+
4144
viz_kwargs = dict(
4245
labels=pars.labels,
4346
table_mod=7,
4447
max_y_axis=pars.max_y_axis,
48+
content=vis_content
4549
)
4650
result.extend(i.components["intro"].build(model, pars))
4751
for df_key in ["admits_df", "census_df", "sim_sir_w_date_df"]:

src/chime_dash/app/services/plotting.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,17 @@
77
from pandas import DataFrame
88

99

10-
def plot_dataframe(dataframe: DataFrame, max_y_axis: int = None,) -> Dict[str, Any]:
11-
"""
10+
def plot_dataframe(
11+
dataframe: DataFrame,
12+
max_y_axis: int = None,
13+
) -> Dict[str, Any]:
14+
"""Returns dictionary used for plotly graphs
15+
16+
Arguments:
17+
dataframe: The dataframe to plot. Plots all columns as y, index is x.
18+
max_y_axis: Maximal value on y-axis.
1219
"""
20+
1321
if max_y_axis is None:
1422
yaxis = {}
1523
else:

src/chime_dash/app/templates/en/visualizations.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,20 @@ hosp: Hospitalized
1616
icu: ICU
1717
vent: Ventalized
1818

19+
# Admits df column translations
20+
admits_hospitalized: Hospitalized
21+
admits_icu: ICU
22+
admits_ventilated: Ventilated
23+
24+
# Admits df column translations
25+
census_hospitalized: Hospitalized
26+
census_icu: ICU
27+
census_ventilated: Ventilated
28+
29+
# SIR df column translations
30+
susceptible: Susceptible
31+
infected: Infected
32+
recovered: Recovered
33+
1934
# Date Localization
2035
date-format: "%m%d%Y"

src/chime_dash/app/utils/__init__.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,18 +116,49 @@ def get_n_switch_values(input_value, elements_to_update) -> List[bool]:
116116

117117
def prepare_visualization_group(df: DataFrame = None, **kwargs) -> List[Any]:
118118
"""Creates plot, table and download link for data frame.
119+
120+
Arguments:
121+
df: The Dataframe to plot
122+
content: Dict[str, str]
123+
Mapping for translating columns and index.
124+
max_y_axis: int
125+
Maximal value on y-axis
126+
labels: List[str]
127+
Columns to display
128+
table_mod: int
129+
Displays only each `table_mod` row in table
130+
119131
"""
120132
result = [{}, None, None]
121133
if df is not None and isinstance(df, DataFrame):
134+
135+
date_column = "date"
136+
day_column = "day"
137+
138+
# Translate column and index if specified
139+
content = kwargs.get("content", None)
140+
if content:
141+
columns = {col: content[col] for col in df.columns if col in content}
142+
index = (
143+
{df.index.name: content[df.index.name]}
144+
if df.index.name and df.index.name in content
145+
else None
146+
)
147+
df = df.rename(columns=columns, index=index)
148+
date_column = content.get(date_column, date_column)
149+
day_column = content.get(day_column, day_column)
150+
122151
plot_data = plot_dataframe(
123-
df.dropna().set_index("date").drop(columns=["day"]),
152+
df.dropna().set_index(date_column).drop(columns=[day_column]),
124153
max_y_axis=kwargs.get("max_y_axis", None),
125154
)
126155

127156
table = (
128157
df_to_html_table(
129158
build_table(
130-
df=df,
159+
df=df.rename( # translate back for backwards compability
160+
columns={day_column: "day", date_column: "date"}
161+
),
131162
labels=kwargs.get("labels", df.columns),
132163
modulo=kwargs.get("table_mod", 7),
133164
),
@@ -153,4 +184,5 @@ def get_instance(*args, **kwargs):
153184
if class_ not in instances:
154185
instances[class_] = class_(*args, **kwargs)
155186
return instances[class_]
187+
156188
return get_instance

0 commit comments

Comments
 (0)