Source code for covid19_data_analyzer.dashboard.components.data_plots

from dash.dependencies import Input, Output
import dash_core_components as dcc
import dash_html_components as html


from covid19_data_analyzer.dashboard.app import app
from covid19_data_analyzer.dashboard.utils.plot import generate_figure
from covid19_data_analyzer.dashboard.utils.data_loader import DASHBOARD_FIT_PARAM_DATA

from covid19_data_analyzer.data_functions.data_utils import (
    get_daily_growth,
    get_growth_rate,
)

DATA_PLOTS = html.Div(
    [
        html.Div(
            [
                dcc.Checklist(
                    id="plot_settings",
                    options=[
                        {"label": "Log Plot", "value": "log_plot"},
                        {"label": "Hide Raw Data", "value": "hide_raw_data"},
                        {"label": "Show fitted parameters", "value": "show_params"},
                    ],
                    value=[],
                    labelStyle={"display": "inline-block"},
                ),
            ],
            className="plot_settings_div",
        ),
        dcc.Markdown(id="fit_params"),
        dcc.Markdown("### Plots"),
        dcc.Graph(id="data_plot"),
        dcc.Graph(id="growth_plot"),
        dcc.Graph(id="growth_rate_plot"),
    ]
)


PLOT_INPUTS = [
    Input("source_select", "value"),
    Input("parent_regions", "value"),
    Input("regions", "value"),
    Input("subsets", "value"),
    Input("plot_settings", "value"),
    Input("fit_model", "value"),
]


[docs]@app.callback( Output("fit_params", "children"), PLOT_INPUTS, ) def update_fit_param_table( data_source, parent_regions, regions, subsets, plot_settings, fit_model ): if "show_params" in plot_settings and fit_model is not None: fit_param_df = DASHBOARD_FIT_PARAM_DATA[data_source][fit_model] fit_param_df = fit_param_df[ fit_param_df.parent_region.isin(parent_regions) & fit_param_df.region.isin(regions) & fit_param_df.subset.isin(subsets) ] fit_param_df_md = fit_param_df.set_index("parent_region").to_markdown() return f"### Fitted Parameters\n\n{fit_param_df_md}" elif "show_params" in plot_settings: return "#### In order to see the fitparameters you need to first select a 'Fitmodel'" else: return ""
[docs]@app.callback( Output("data_plot", "figure"), PLOT_INPUTS, ) def update_data_plot( data_source, parent_regions, regions, subsets, plot_settings, fit_model ): return generate_figure( data_source=data_source, parent_regions=parent_regions, regions=regions, title="data", subsets=subsets, y_title="count (people)", plot_settings=plot_settings, fit_model=fit_model, )
[docs]@app.callback( Output("growth_plot", "figure"), PLOT_INPUTS, ) def update_growth_plot( data_source, parent_regions, regions, subsets, plot_settings, fit_model ): return generate_figure( data_source=data_source, parent_regions=parent_regions, regions=regions, data_transform_fuction=get_daily_growth, title="daily growth", subsets=subsets, y_title="growth (people/day)", plot_settings=plot_settings, fit_model=fit_model, )
[docs]@app.callback( Output("growth_rate_plot", "figure"), PLOT_INPUTS, ) def update_growth_rate_plot( data_source, parent_regions, regions, subsets, plot_settings, fit_model ): return generate_figure( data_source=data_source, parent_regions=parent_regions, regions=regions, data_transform_fuction=get_growth_rate, title="growth rate", subsets=subsets, y_title="growth rate", plot_settings=plot_settings, fit_model=fit_model, )