def get_plot(plot_obj: plt, data: List[IContainer]) -> (Figure, Subplot):
    """Returns plt object"""
    # Data
    labeled_dict = {}
    for collection in data:
        if collection.label not in labeled_dict:
            labeled_dict[collection.label] = list()
        labeled_dict[collection.label].append(collection)
    fig, ax = plot_obj.subplots()
    # Set plot layout
    ax.title.set_text(
        "Expectation value for different noise models and molecule parameters"
    )  # Title "Eigen Energy depending on Noise Channel"
    ax.set_xlabel("Interatomic Distance [$\AA$]")  # X axis label
    ax.set_ylabel("Energy (Hartree) [$a.u.$]")  # Y axis label

    # Set plot points
    reference_key = None
    for key in labeled_dict.keys():
        reference_key = key
        x = [collection.molecule_param for collection in labeled_dict[key]]
        y = [collection.measured_value for collection in labeled_dict[key]]
        e = [collection.measured_std for collection in labeled_dict[key]]
        ax.errorbar(x, y, yerr=e, linestyle='None', marker='^',
                    label=key)  # "STO-3G"

    x = [
        collection.molecule_param for collection in labeled_dict[reference_key]
    ]
    f = [collection.fci_value for collection in labeled_dict[reference_key]]
    h = [collection.hf_value for collection in labeled_dict[reference_key]]
    ax.plot(x, f, 'o', label="fci energy")
    ax.plot(x, h, 'o', label="HF energy")
    ax.legend(loc=0)
    return fig, ax
Ejemplo n.º 2
0
    def generate(self, plot: pyplot, data: Any) -> None:
        stages = {row[0]: True for row in data}.keys()
        compilers = {row[1]: True for row in data}.keys()
        parameters = {row[2]: True for row in data}.keys()
        matplotlib.rcParams.update({'figure.autolayout': True})
        number_of_stages = len(stages)
        figure, axes_list = plot.subplots(1, number_of_stages)
        # Change the height to be three fourths that of the original height as
        # it becomes very narrow otherwise
        figure_width, figure_height = figure.get_size_inches()
        figure.set_size_inches(figure_width, figure_height * 0.75)
        colors = [
            "#e6194B", "#3cb44b", "#4363d8", "#f58231", "#469990", "#800000",
            "#9A6324", "#000075"
        ]

        for i, stage in enumerate(stages):
            axes = axes_list[i]
            for j, parameter in enumerate(parameters):
                for k, compiler in enumerate(compilers):
                    specific_data = [
                        [row[0], row[3], row[4]] for row in data
                        if (row[1] == compiler and row[2] == parameter
                            and row[0] == stage)
                    ]
                    yy = [row[2] for row in specific_data]
                    axes.plot(range(1,
                                    len(yy) + 1),
                              yy,
                              marker='.',
                              color=colors[j * 2 + k])

            labels = [pow(2, i) for i in range(0, len(yy))]
            axes.xaxis.set_major_locator(
                ticker.FixedLocator(range(1,
                                          len(labels) + 1)))
            axes.set_xticklabels(labels=labels, fontsize=7)
            for tick in axes.yaxis.get_major_ticks():
                tick.label.set_fontsize(7)
            axes.set_title(stage, fontsize=7)

        axes_list[0].set_ylabel("Throughput")
        figure.text(0.5, 0, "Number of Threads", ha="center")
        legend = []
        for parameter in parameters:
            for compiler in compilers:
                if parameter == "":
                    legend.append(compiler)
                else:
                    legend.append(compiler + "-" + parameter)

        figure.suptitle("", fontsize=10)
        figure.legend(legend,
                      bbox_to_anchor=(.5, 1),
                      loc="upper center",
                      fontsize=7,
                      ncol=len(legend))

        return figure