Generate histograms for one or more keys in the given container.

    Parameters
    ----------
    ertobj : container instance or :class:`pandas.DataFrame`
        data object which contains the data.
    keys : str or list of strings
        which keys (column names) to plot
    merge : bool, optional
        if True, then generate only one figure with all key-plots as columns
        (default True)
    log10plot : bool, optional
        default: True
    extra_dims : list, optional

    Examples
    --------
    >>> from reda.plotters import plot_histograms
    >>> from reda.testing import ERTContainer
    >>> figs_dict = plot_histograms(ERTContainer, "r", merge=False)
    Generating histogram plot for key: r

    Returns
    -------
    figures : dict
        dictionary with the generated histogram figures

def plot_histograms(ertobj, keys, **kwargs):
    """Generate histograms for one or more keys in the given container.

    Parameters
    ----------
    ertobj : container instance or :class:`pandas.DataFrame`
        data object which contains the data.
    keys : str or list of strings
        which keys (column names) to plot
    merge : bool, optional
        if True, then generate only one figure with all key-plots as columns
        (default True)
    log10plot : bool, optional
        default: True
    extra_dims : list, optional

    Examples
    --------
    >>> from reda.plotters import plot_histograms
    >>> from reda.testing import ERTContainer
    >>> figs_dict = plot_histograms(ERTContainer, "r", merge=False)
    Generating histogram plot for key: r

    Returns
    -------
    figures : dict
        dictionary with the generated histogram figures
    """
    # you can either provide a DataFrame or an ERT object
    if isinstance(ertobj, pd.DataFrame):
        df = ertobj
    else:
        df = ertobj.data

    if df.shape[0] == 0:
        raise Exception('No data present, cannot plot')

    if isinstance(keys, str):
        keys = [keys, ]

    figures = {}
    merge_figs = kwargs.get('merge', True)
    if merge_figs:
        nr_x = 2
        nr_y = len(keys)
        size_x = 15 / 2.54
        size_y = 5 * nr_y / 2.54
        fig, axes_all = plt.subplots(nr_y, nr_x, figsize=(size_x, size_y))
        axes_all = np.atleast_2d(axes_all)

    for row_nr, key in enumerate(keys):
        print('Generating histogram plot for key: {0}'.format(key))
        subdata_raw = df[key].values
        subdata = subdata_raw[~np.isnan(subdata_raw)]
        subdata = subdata[np.isfinite(subdata)]

        subdata_log10_with_nan = np.log10(subdata[subdata > 0])
        subdata_log10 = subdata_log10_with_nan[~np.isnan(
            subdata_log10_with_nan)
        ]

        subdata_log10 = subdata_log10[np.isfinite(subdata_log10)]

        if merge_figs:
            axes = axes_all[row_nr].squeeze()
        else:
            fig, axes = plt.subplots(1, 2, figsize=(10 / 2.54, 5 / 2.54))

        ax = axes[0]
        ax.hist(
            subdata,
            _get_nr_bins(subdata.size),
        )
        ax.set_xlabel(
            units.get_label(key)
        )
        ax.set_ylabel('count')
        ax.xaxis.set_major_locator(mpl.ticker.MaxNLocator(5))
        ax.tick_params(axis='both', which='major', labelsize=6)
        ax.tick_params(axis='both', which='minor', labelsize=6)

        if subdata_log10.size > 0:
            ax = axes[1]
            ax.hist(
                subdata_log10,
                _get_nr_bins(subdata.size),
            )
            ax.set_xlabel(r'$log_{10}($' + units.get_label(key) + ')')
            ax.set_ylabel('count')
            ax.xaxis.set_major_locator(mpl.ticker.MaxNLocator(5))
        else:
            pass
            # del(axes[1])

        fig.tight_layout()

        if not merge_figs:
            figures[key] = fig

    if merge_figs:
        figures['all'] = fig
    return figures