def plot_all_files(df_all): output_file = "all_biascor_results.png" logging.info(f"Plotting all fits to {output_file}") c = ChainConsumer() labels = [r"$\Omega_m$", "$w$", r"$\sigma_{int}$"] data = [] for name, df in df_all.groupby("name"): means = [df["omm"].mean(), df["w"].mean(), df["sigint"].mean()] if df.shape[0] < 2: name2 = name + " (showing mean error)" cov = np.diag( [df["omm_sig"].mean()**2, df["w_sig"].mean()**2, 0.01**2]) else: name2 = name + " (showing scatter error)" cov = np.diag( [df["omm"].std()**2, df["w"].std()**2, df["sigint"].std()**2]) c.add_covariance(means, cov, parameters=labels, name=name2.replace("_", "\\_")) data.append([name, df["w"].mean(), df["w"].std(), df["w_sig"].mean()]) wdf = pd.DataFrame( data, columns=["name", "mean_w", "scatter_mean_w", "mean_std_w"]) wdf.to_csv(output_file.replace(".png", ".csv"), index=False, float_format="%0.4f") c.configure(statistics="mean") c.plotter.plot_summary(errorbar=True, filename=output_file)
def contour_plot(fisher, fiducials, fname, name='', add_marker=False, latex=True): from chainconsumer import ChainConsumer mean = [fiducials[key] for key in fisher.params] cov = np.linalg.inv(fisher.values) parameters = [latex_mapping[x] for x in fisher.params] if latex else fisher.params c = ChainConsumer() c.add_covariance(mean, cov, parameters=parameters, name=name, shade=False) if add_marker: c.add_marker(mean, parameters=parameters, marker_style="*", marker_size=100, color="r", name='') c.configure(usetex=False, serif=False, sigma2d=True, sigmas=[1]) fig = c.plotter.plot() fig.set_size_inches(3 + fig.get_size_inches()) fig.savefig(fname)
def test_covariance(self): mean = [0, 1] cov = [[1, 1], [1, 2.5]] c = ChainConsumer() c.add_covariance(mean, cov) mean_obs = np.mean(c.chains[0].chain, axis=0) cov_obs = np.cov(c.chains[0].chain.T) assert np.all(np.isclose(mean, mean_obs, atol=1e-2)) assert np.all(np.isclose(cov, cov_obs, atol=1e-2))
def plot_single_file(source_file, df): logging.info(f"Plotting single file {source_file}") name = os.path.basename(os.path.dirname(os.path.dirname(source_file))) output_file = name + ".png" logging.info(f"Creating wfit plot output to {output_file}") c = ChainConsumer() labels = [r"$\Omega_m$", "$w$", r"$\sigma_{int}$"] for index, row in df.iterrows(): means = [row["OM"], row["w"], row["sigint"]] cov = np.diag([row["OM_sig"] ** 2, row["wsig_marg"] ** 2, 0.01 ** 2]) c.add_covariance(means, cov, parameters=labels, name=f"Realisation {index}") c.plotter.plot_summary(errorbar=True, filename=output_file) del c
def contour_plot_multiple(fisher_list,fiducials,fname,name_list,add_marker=False,latex=True): from chainconsumer import ChainConsumer c = ChainConsumer() means_list=[] covs_list=[] parameters_list=[] for i in range(len(fisher_list)): means_list.append([fiducials[key] for key in fisher_list[i].params]) covs_list.append(np.linalg.inv(fisher_list[i].values)) parameters_list.append([latex_mapping[x] for x in fisher_list[i].params] if latex else fisher_list[i].params) c.add_covariance(means_list[i], covs_list[i], parameters=parameters_list[i], name=name_list[i], shade=True) if add_marker: c.add_marker(mean1, parameters=parameters1, marker_style="*", marker_size=100, color="r",name='') c.configure(usetex=False, serif=False,sigma2d=True,sigmas=[0,1,2]) fig = c.plotter.plot() fig.set_size_inches(3 + fig.get_size_inches()) fig.savefig(fname)
=============================== Sometimes you want to compare your data to a Fisher matrix projection, or you just have some Gaussian you want also drawn. Or maybe its just a random point you want to put on the plot. It's all easy to do. """ # -*- coding: utf-8 -*- from chainconsumer import ChainConsumer mean = [1, 5] cov = [[1, 1], [1, 3]] parameters = ["a", "b"] c = ChainConsumer() c.add_covariance(mean, cov, parameters=parameters, name="Cov") c.add_marker(mean, parameters=parameters, name="Marker!", marker_style="*", marker_size=100, color="r") c.configure(usetex=False, serif=False) fig = c.plotter.plot() fig.set_size_inches( 3 + fig.get_size_inches()) # Resize fig for doco. You don't need this.