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 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)
def test_marker(self): loc = [0, 1, 2] c = ChainConsumer() c.add_marker(loc) assert np.all(np.equal(loc, c.chains[0].chain[0, :]))
=============================== 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.
params_dict, display=False, figname=figname) # Add the chain or MAP to the Chainconsumer plots extra.pop("realisation", None) if realisation == "mean": fitname = data[0]["name"].replace(" ", "_") stats[fitname] = [] output[fitname] = [] c.add_chain(df, weights=weight, **extra, plot_contour=True, plot_point=False, show_as_1d_prior=False) else: c.add_marker(params, **extra) # Compute some summary statistics and add them to a dictionary mean, cov = weighted_avg_and_cov( df[[ "$\\alpha_\\parallel$", "$\\alpha_\\perp$", ]], weight, axis=0, ) corr = cov[1, 0] / np.sqrt(cov[0, 0] * cov[1, 1]) stats[fitname].append([ mean[0], mean[1], np.sqrt(cov[0, 0]),