Exemplo n.º 1
0
def Histogram(dfs,
              measurement,
              configs,
              analysisType,
              bins=50,
              iqr=None,
              **addConfigs):
    """Generates a Points Plot with a corresponding Histogram"""
    newConfigs = addConfigs
    log.info("Generating histograms for measurement {}...".format(measurement))
    finalplots = None
    try:
        for key in dfs["keys"]:
            log.info("Generating histograms for measurement {} for file {}...".
                     format(measurement, key))
            # Sanatize data
            data = dfs[key]["data"][measurement].dropna()  # Drop all nan
            if iqr:
                log.info("Outliers correction with iqr: {}".format(iqr))
                data = reject_outliers(data, iqr)
            mean = np.round(np.mean(data), 2)
            rms = np.round(np.sqrt(np.mean(data**2)), 2)
            std = np.round(np.std(data), 2)
            median = np.round(np.median(data), 2)
            data = np.histogram(data, bins=bins)
            plt = hv.Histogram(data,
                               label="Histogram: {}".format(measurement),
                               group="Histogram: {}: {}".format(
                                   measurement, key))

            try:
                xlabel = "{} [{}]".format(
                    measurement, dfs[dfs["keys"][0]]["units"][dfs[
                        dfs["keys"][0]]["measurements"].index(measurement)])
            except Exception as err:
                log.error(
                    "Label could not be generated for Histogram {}. Error: {}".
                    format(measurement, err))
                xlabel = "X-Axis"

            plt.opts(xlabel=xlabel)
            # Update the plot specific options if need be
            generalOptions = configs[analysisType].get("General", {})
            newConfigs.update(generalOptions.copy())
            data_options = configs[analysisType].get(measurement, {}).get(
                "Single Histogram", {}).get("PlotOptions", {})
            newConfigs.update(configs[analysisType].get(
                "{}Options".format("Histogram"), {}))
            newConfigs.update(data_options)
            plots = customize_plot(plt, "", configs[analysisType],
                                   **newConfigs)

            # Add text
            text = '\nMean: {mean} \n' \
                   'Median: {median} \n' \
                   'RMS: {rms}\n' \
                   'std: {std}'.format(mean=mean,
                                       median=median,
                                       rms=rms,
                                       std=std)
            log.info(text)
            y = data[0].max()
            x = data[1][int(len(data[1]) * 0.9)]
            text = hv.Text(x, y, text).opts(fontsize=30)
            #text = text_box(text, x, y, boxsize= (100, 150))
            plots = plots * text

            if finalplots:
                finalplots += plots
            else:
                finalplots = plots
    except Exception as err:
        log.error(
            "Unexpected error happened during Hist plot generation {}. Error: {}"
            .format(measurement, err))
        return None

    return finalplots
Exemplo n.º 2
0
def concatHistogram(dfs,
                    measurement,
                    configs,
                    analysisType,
                    bins=50,
                    iqr=None,
                    **addConfigs):
    """Concatenates dataframes and generates a Histogram for all passed columns"""
    newConfigs = addConfigs
    log.info("Generating concat histograms for measurements {}...".format(
        measurement))
    try:
        df = dfs["All"]
        # Sanatize data
        data = df[measurement].dropna()  # Drop all nan
        if iqr:
            log.info("Outliers correction with iqr: {}".format(iqr))
            data = reject_outliers(data, iqr)
        mean = np.round(np.mean(data), 2)
        rms = np.round(np.sqrt(np.mean(data**2)), 2)
        std = np.round(np.std(data), 2)
        median = np.round(np.median(data), 2)
        data = np.histogram(data, bins=bins)

        plt = hv.Histogram(
            data,
            label="Concatenated Histogram: {}".format(measurement),
            group="Concatenated Histogram: {}".format(measurement))
        #plt = hv.Histogram(data, vdims=to_plot, group="Concatenated Histogram: {}".format(to_plot))

        try:
            xlabel = "{} [{}]".format(
                measurement, dfs[dfs["keys"][0]]["units"][dfs[
                    dfs["keys"][0]]["measurements"].index(measurement)])
        except Exception as err:
            log.error(
                "Label could not be genereated for concatonated Histogram {}. Error: {}"
                .format(measurement, err))
            xlabel = "X-Axis"

        plt.opts(xlabel=xlabel)
        # Update the plot specific options if need be
        generalOptions = configs[analysisType].get("General", {})
        newConfigs.update(generalOptions.copy())
        data_options = configs[analysisType].get(measurement, {}).get(
            "Concatenated Histogram", {}).get("PlotOptions", {})
        newConfigs.update(configs[analysisType].get(
            "{}Options".format("Histogram"), {}))
        newConfigs.update(data_options)
        #addConfigs.update({"xlabel": measurement})
        plots = customize_plot(plt, "", configs[analysisType], **newConfigs)

        # Add text
        text = '\nMean: {mean} \n' \
               'Median: {median} \n' \
               'RMS: {rms}\n' \
               'std: {std}'.format(mean=mean,
                                median=median,
                                rms=rms,
                                std=std)
        log.info(text)
        y = data[0].max()
        x = data[1][int(len(data[1]) * 0.9)]
        text = hv.Text(x, y, text).opts(fontsize=30)
        plots = plots * text

    except Exception as err:
        log.error(
            "Unexpected error happened during concatHist plot generation {}. Error: {}"
            .format(measurement, err))
        return None

    return plots