def shorten_dfs(dfs, plot_start=None, plot_end=None):
    """Shorten all incidence DataFrames.

    All DataFrames are shortened to the shortest. In addition, if plot_start is given
    all DataFrames start at or after plot_start.

    Args:
        dfs (dict): keys are the names of the scenarios, values are the incidence
            DataFrames.
        plot_start (pd.Timestamp or None): earliest allowed start date for the plot
        plot_start (pd.Timestamp or None): latest allowed end date for the plot

    Returns:
        shortened (dict): keys are the names of the scenarios, values are the shortened
            DataFrames.

    """
    shortened = {}

    start_date = max(df.index.min() for df in dfs.values())
    end_date = min(df.index.max() for df in dfs.values())
    if plot_start is not None and plot_start < end_date:
        start_date = max(plot_start, start_date)
    if plot_end is not None and plot_end > start_date:
        end_date = min(plot_end, end_date)

    for name, df in dfs.items():
        shortened[name] = df.loc[start_date:end_date].copy(deep=True)
    return shortened