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
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