Plot boxplots

    Plot the boxplots of a dataframe in time

    Parameters
    ----------
    df: Pandas Dataframe
        Every collumn is a timeseries
    plot_mean: bool
        Wether or not to plot the means
    plot_ids: [str]
        List of id's to plot

    Returns
    -------
    matplotlib figure

def boxplot(df, plot_mean=False, plot_ids=None, title=None, xlabel=None, ylabel=None):
    """
    Plot boxplots

    Plot the boxplots of a dataframe in time

    Parameters
    ----------
    df: Pandas Dataframe
        Every collumn is a timeseries
    plot_mean: bool
        Wether or not to plot the means
    plot_ids: [str]
        List of id's to plot

    Returns
    -------
    matplotlib figure
    """

    df = df.applymap(float)
    description = df.apply(pd.DataFrame.describe, axis=1)

    # plot
    plt = plot_style()

    plt.boxplot(df)
    #plt.setp(bp['boxes'], color='black')
    #plt.setp(bp['whiskers'], color='black')
    if plot_ids is not None:
        for id in plot_ids:
            if id in df.columns:
                plt.scatter(x=range(1, len(df) + 1), y=df[id], label=str(id))

    if plot_mean:
        plt.scatter(x=range(1, len(df) + 1), y=description['mean'], label="Mean", color='k', s=30, marker='+')

    ax = plt.gca()
    ax.set_xticklabels(df.index)
    #plt.xticks(rotation=45)

    plt.legend()
    if title is not None:
        plt.title(title)
    if xlabel is not None:
        plt.xlabel(xlabel)
    if ylabel is not None:
        plt.ylabel(ylabel)

    return plt.gcf()