def main(): mean = [0, 0, 0] cov = [[1, 0, 0], [0, 100, 0], [0, 0, 8]] x1, x2, x3 = np.random.multivariate_normal(mean, cov, 50000).T s1 = np.c_[x1, x2, x3] mean = [0.2, 0.5, 6.] cov = [[0.7, 0.3, 0.1], [0.3, 10, 0.25], [0.1, 0.25, 7]] x1, x2, x3 = np.random.multivariate_normal(mean, cov, 50000).T s2 = np.c_[x1, x2, x3] names = ['x_1', 'x_2', 'x_3'] samples1 = MCSamples(samples=s1, labels=names, label='sample1') samples2 = MCSamples(samples=s2, labels=names, label='sample2') get_constraints(samples1) get_constraints(samples2) print("cov(x_1, x_3) = ", samples2.cov(pars=[0,2])) print("cov(x_1, x_2) = ", samples2.cov(pars=[0,1])) g = plots.getSubplotPlotter() g.triangle_plot([samples1, samples2], filled=True) g.export('triangle_plot.png') g.export('triangle_plot.pdf') return
def plot_dist_corner_getdist(samples, labels=None, names=None, filled=True, sample_labels=None): if isinstance(samples, (list, tuple)): if sample_labels is None: sample_labels = [ 'samples {0:d}'.format(i) for i in range(len(samples)) ] samps = [ MCSamples(samples=samples0, names=names, labels=labels, label=str(slabels0)) for samples0, slabels0 in zip(samples, sample_labels) ] g = plots.get_subplot_plotter() g.triangle_plot(samps, filled=filled) else: samps = MCSamples(samples=samples, names=names, labels=labels) g = plots.get_subplot_plotter() g.triangle_plot(samps, filled=filled) plt.show() return None
def main(): import getdist from getdist import plots, MCSamples, loadMCSamples import numpy as np import pandas as pd args = parse_args() out = os.path.expanduser(args.out) out = os.path.join(out,'plots') if not os.path.isdir(out): os.makedirs(out) allnames = np.array(['Om','h0','Ob','ns','a_s','Onuh2','b1','b2','b3','b4','b5','m1','m2','m3','m4','ia_a','ia_alpha', 'wpz_b1','wpz_b2','wpz_b3','wpz_b4','lpz_b1','lpz_bin2','lpz_bin3','lpz_bin4','lpz_bin5','s8','like','post','weight']) alllabels = np.array(['\Omega_m', 'h', '\Omega_b', 'n_s','a_s', r'\Omega_{\nu}','b1','b2','b3','b4','b5','m1','m2','m3','m4','ia_a','ia_alpha', 'wpz_b1','wpz_b2','wpz_b3','wpz_b4','lpz_b1','lpz_bin2','lpz_bin3','lpz_bin4','lpz_bin5',r'\sigma_{8}','like','post','weight']) #useindex = [0, 1, 2, 3, 4, 5,- 4] useindex = [0, 1, 2, 3, 4, 5,- 4] usednames = allnames[useindex] usedlabels = alllabels[useindex] nsample = get_nsample(args.samplesfile_forecast) allsamplestable = np.loadtxt(args.samplesfile_forecast) allsamplestable = allsamplestable[ -nsample:, : ] usedsamples = allsamplestable[:, useindex] usedweights = allsamplestable[: , -1] usedpost = allsamplestable[:, -2] samples = MCSamples(samples=usedsamples, names=usednames, labels=usedlabels, weights=usedweights , loglikes=usedpost, label='Forecast' ) samples.removeBurn(remove=0.1) nsample_cont = get_nsample(args.samplesfile_contaminated) allsamplestable_cont = np.loadtxt(args.samplesfile_contaminated) allsamplestable_cont = allsamplestable_cont[-nsample_cont:, : ] usedsamples_cont = allsamplestable_cont[:, useindex] usedweights_cont = allsamplestable_cont[: , -1] usedpost_cont = allsamplestable_cont[:, -2] samples_cont = MCSamples(samples=usedsamples_cont, names=usednames, labels=usedlabels, weights=usedweights_cont ,loglikes=usedpost_cont, label='PSF contamination' ) samples_cont.removeBurn(remove=0.1) g = plots.getSubplotPlotter() g.triangle_plot([samples, samples_cont], filled_compare=True, contour_colors=['green','darkblue']) #g.add_legend(legend_labels=[legend_name], fontsize=36, legend_loc=(-3.5,7)) g.export("getdistplot.png")
def __init__(self, file_name, nwalkers, nsamples, skip_steps=0): self.file_name = file_name self.samples = np.loadtxt(dir + 'chains/5/{}.txt'.format(self.file_name)) self.cosmo_name = 'FlatIVCDM_binned' self.nwalkers = nwalkers self.nsamples = nsamples self.skip_steps = skip_steps # bin specifications self.Nq = 20 self.zmax = 1.5 self.xi0_lims = (0.2, 2.0) self.Nscale = 4 self.amin = 1. / (1. + self.zmax) self.npars = self.Nq cos = cosmo(Nq=self.Nq) M = cos.model[self.cosmo_name] self.names_q = ['q{}'.format(i + 1) for i in range(self.Nq)] self.labels_q = [r'q_{{{}}}'.format(i + 1) for i in range(self.Nq)] samples_skipped = samples_skip(self.samples, self.nwalkers, self.nsamples, self.npars, self.skip_steps) self.MCsamps = MCSamples(samples=samples_skipped, names=self.names_q, labels=self.labels_q)
def newGraph_Confidence(result): H_0 = [ii[0] for ii in result] omega_m0 = [ii[1] for ii in result] omega_q0 = [ii[2] for ii in result] alpha = [ii[3] for ii in result] alpha_x = [ii[4] for ii in result] m = [ii[5] for ii in result] names = [ "H_0", "\Omega_{m_0}", "\Omega_{Q_0}", r"\tilde{\alpha}", r"\tilde{\alpha}_x", "m" ] #names = ["H_0"] labels = names newShape = [H_0, omega_m0, omega_q0, alpha, alpha_x, m] #newShape = [H_0] values = np.array(newShape).T #print(values.shape) s1 = MCSamples(samples=values, names=names, labels=labels) g = plots.get_subplot_plotter() s1.updateSettings({'contours': [0.68, 0.95, 0.99]}) g.settings.colormap = "binary" g.settings.num_plot_contours = 3 g.triangle_plot([s1], shaded=True, title_limit=1) plt.savefig("result.pdf")
def triangle_plot(self, samples=None, savefig=False, filename=None): # Set samples to the posterior samples by default if samples is None: samples = [self.posterior_samples] mc_samples = [ MCSamples(samples=s, names=self.names, labels=self.labels, ranges=self.ranges) for s in samples ] # Triangle plot with mpl.rc_context(): g = plots.getSubplotPlotter(width_inch=12) g.settings.figure_legend_frame = False g.settings.alpha_filled_add = 0.6 g.settings.axes_fontsize = 14 g.settings.legend_fontsize = 16 g.settings.lab_fontsize = 20 g.triangle_plot(mc_samples, filled_compare=True, normalized=True) for i in range(0, len(samples[0][0, :])): for j in range(0, i + 1): ax = g.subplots[i, j] xtl = ax.get_xticklabels() ax.set_xticklabels(xtl, rotation=45) plt.tight_layout() plt.subplots_adjust(hspace=0, wspace=0) if savefig: plt.savefig(filename) if self.show_plot: plt.show() else: plt.close()
def triangle_plot(self): if not HAS_GETDIST: raise RuntimeError( 'you need to install getdist to get the triangle plot.') if 0 < self.m_plot < self.dim: plot_data = self._data[:, :self.m_plot] else: plot_data = self._data samples = MCSamples(samples=plot_data) g = plots.getSubplotPlotter() g.triangle_plot([ samples, ], filled=True, contour_args={'alpha': 0.8}, diag1d_kwargs={'normalized': True}) if self.i_iter: plt.suptitle("triangle plot after iteration " + str(self.i_iter), fontsize=plot_data.shape[-1] * 4, ha='left') else: plt.suptitle('triangle plot for the initial data', fontsize=plot_data.shape[-1] * 4, ha='left') plt.show()
def plot2D(rdic, par=[1, 2], tex=1): snstyle(tex) rdic = np.asarray(rdic) root = list(rdic[:, 0]) lengend = list(rdic[:, 1]) rn = len(root) Samp = [] minkaf = np.zeros(rn) data_num = np.zeros(rn) for i in range(rn): savefile_name = './chains/' + root[i] + '.npy' samples, theta_name, theta_fit, theta_fact, minkaf[i], data_num[ i] = np.load(savefile_name) Samp.append( MCSamples(samples=samples, names=theta_name, labels=theta_name)) pnames = Samp[0].getParamNames().names rn = len(root) g = plots.getSinglePlotter(width_inch=7) #samples.updateSettings({'contours': [0.68, 0.95, 0.99]}) #g.settings.num_plot_contours = 3 g.settings.lab_fontsize = 18 g.settings.axes_fontsize = 14 g.plot_2d(Samp, pnames[par[0] - 1].name, pnames[par[1] - 1].name) for i in range(rn): sns.kdeplot(Samp[i].samples[:, par[0] - 1], Samp[i].samples[:, par[1] - 1], cmap="Blues", shade=True, shade_lowest=False) g.add_legend(lengend, colored_text=True, fontsize=18) mpl.pyplot.tight_layout()
def __init__(self, Chains, ignore_rows=0.1): self.root = list(np.asarray(Chains)[:, 0]) self.lengend = list(np.asarray(Chains)[:, 1]) self.aic_g = True self.Samp = [] self._n = len(Chains) self.minkaf = np.zeros(self._n) self.data_num = np.zeros(self._n) # self.theta_fit=np.zeros(self._n) # self.theta_fact=np.zeros(self._n) for i in range(self._n): savefile_name = './chains/' + self.root[i] + '.npy' self.samples, self.theta_name, self.theta_fit, self.theta_fact, self.minkaf[ i], self.data_num[i], ranges = np.load(savefile_name, allow_pickle=True) self.label_name = [ x.replace('H_0', 'H_0 ~[\mathrm{km~s^{-1}~Mpc^{-1}}]') for x in self.theta_name ] self.Samp.append( MCSamples(samples=self.samples, names=self.theta_name, labels=self.label_name, ranges=ranges, settings={'ignore_rows': ignore_rows})) self.param_names = [] for na in self.Samp[0].getParamNames().names: self.param_names.append(na.name)
def get_samples(outfile, par_names, w_rat, n_par, b_iter): marg_chains = np.loadtxt(outfile) # uncomment for when your chains have been complete #marg_chains = marg_chains[w_rat*n_par*b_iter:] marg_chains = marg_chains[3 * marg_chains.shape[0] // 4:] hsc = MCSamples(samples=marg_chains, names=par_names) return hsc
def _samples_to_mcsamples(self, samples): # 'samples' is whatever is returned by _sample, in this case it is # the entire EnsembleSampler return MCSamples( samples=samples.get_chain(flat=False), names=[a.name for a in self.likelihood.child_active_params], labels=[p.latex for p in self.likelihood.child_active_params], )
def OptimizeBandwidth_1D(diff_chain, param_names=None, num_bins=1000): """ Compute an estimate of an optimal bandwidth for covariance scaling as in GetDist. This is performed on whitened samples (with identity covariance), in 1D, and then scaled up with a dimensionality correction. :param diff_chain: :class:`~getdist.mcsamples.MCSamples` input parameter difference chain :param param_names: (optional) parameter names of the parameters to be used in the calculation. By default all running parameters. :param num_bins: number of bins used for the 1D estimate :return: scaling vector for the whitened parameters """ # initialize param names: if param_names is None: param_names = diff_chain.getParamNames().getRunningNames() else: chain_params = diff_chain.getParamNames().list() if not np.all([name in chain_params for name in param_names]): raise ValueError('Input parameter is not in the diff chain.\n', 'Input parameters ', param_names, '\n' 'Possible parameters', chain_params) # indexes: ind = [diff_chain.index[name] for name in param_names] # some initial calculations: _samples_cov = diff_chain.cov(pars=param_names) _num_params = len(ind) # whiten the samples: _temp = sqrtm(utils.QR_inverse(_samples_cov)) white_samples = diff_chain.samples[:, ind].dot(_temp) # make these samples so that we can use GetDist band optization: temp_samples = MCSamples(samples=white_samples, weights=diff_chain.weights, ignore_rows=0, sampler=diff_chain.sampler) # now get optimal band for each parameter: bands = [] for i in range(_num_params): # get the parameter: par = temp_samples._initParamRanges(i, paramConfid=None) # get the bins: temp_result = temp_samples._binSamples(temp_samples.samples[:, i], par, num_bins) bin_indices, bin_width, binmin, binmax = temp_result bins = np.bincount(bin_indices, weights=temp_samples.weights, minlength=num_bins) # get the optimal smoothing scale: N_eff = temp_samples._get1DNeff(par, i) band = temp_samples.getAutoBandwidth1D(bins, par, i, N_eff=N_eff, mult_bias_correction_order=0, kernel_order=0) \ * (binmax - binmin) # correction for dimensionality: dim_factor = Scotts_bandwidth(_num_params, N_eff)[0, 0]/Scotts_bandwidth(1., N_eff)[0, 0] # bands.append(band**2.*dim_factor) # return np.array(bands)
def triangulo(datos, labels = []): ''' DESCRIPTION: Esta funcion realiza una grafica triangular para visualizar los resultados IN: datos = lista con puntos de datos (cada uno es una lista con valores para cada parametro) labels = nombre de los parametros (default p_i) OUT: Grafica triangular con histogramas 1d y 2d de todas la combinaciones ''' g = plots.get_subplot_plotter(subplot_size=2) #Checamos si se asignó nombre a los parametros if labels!=[]: samples = MCSamples(samples=np.array(datos), labels = labels, names = labels) else: samples = MCSamples(samples=np.array(datos)) #graficamos g.triangle_plot(samples, filled=True, title_limit=1)
def cornerplot(sampledf, weights=None, labels=None, markers=None, ranges=None): names = sampledf.columns samples = MCSamples(samples=sampledf.to_numpy(), names=names, weights=weights, labels=labels, ranges=ranges) #samples.updateSettings({'contours': [0.68, 0.95, 0.99]}) g = plots.get_subplot_plotter() return g.triangle_plot(samples, filled=True, markers=markers)
def single_plot(filename, legends, limits, out): chain1 = np.genfromtxt("like/"+filename[0])[:,:7] chain2 = np.genfromtxt("like/"+filename[1])[:,:7] chain1[:,3] = chain1[:,3]+(1-1./(1+0.266))*chain1[:,4] chain2[:,3] = chain2[:,3]+(1-1./(1+zp))*chain2[:,4] labels[3] ="w_\mathrm{p}" names[3] = "wp" samples1 = MCSamples(samples=chain1,names = names, labels = labels) samples2 = MCSamples(samples=chain2,names = names, labels = labels) samples1.fine_bins_2D = 20 samples2.fine_bins_2D = 20 g = plots.getSinglePlotter() g.plot_2d([samples1, samples2],"wp","wa", filled=[False,True],lims=limits,colors=['red','blue']) g.settings.legend_fontsize = 12 g.add_legend(legends) g.export('plots/'+out)
def plot_lfs_kde(cmd_list): g = plots.get_single_plotter(width_inch=2 * 3.464, ratio=0.75) colors = ['k'] colors.extend(['r'] * (len(cmd_list) - 1)) ct = 0 for cmd in cmd_list: cmd_samples = MCSamples(samples=cmd, names=['color', 'mag']) if ct > 0: g.settings.linewidth = 0.5 g.plot_1d(cmd_samples, 'mag', colors=[colors[ct]]) ct += 1
def sampled_to_getdist_mcsamples(self, first=None, last=None): """ Basic interface with getdist -- internal use only! (For analysis and plotting use `getdist.mcsamples.loadCobayaSamples`.) """ names = list(self.sampled_params) samples = self.data[:self.n()].as_matrix(columns=names) return MCSamples(samples=samples[first:last], weights=self.data[:self.n()][_weight].values[first:last], loglikes=self.data[:self.n()][_minuslogpost].values[first:last], names=names)
def plot_sampling(mcmc_config, param_info_wod, burned_chain, theta_ml, include_outlier_dist=False, include_ml=True): chain_tag = mcmc_config.chain_tag param_names_wod, param_labels_wod, param_guess_wod, param_priors_wod = param_info_wod print('\nProcessing MCMC chain...') if include_outlier_dist: ndim = burned_chain.shape[1] elif not include_outlier_dist: ndim = burned_chain.shape[1] - 3 names = param_labels_wod[0:ndim].copy() ranges_gd = {} for i in range(ndim): ranges_gd[param_labels_wod[i]] = (param_priors_wod[i][1], param_priors_wod[i][1]) gd_samples = MCSamples(samples=burned_chain[:, 0:ndim], names=param_names_wod[0:ndim], labels=param_labels_wod[0:ndim]) #, #ranges=ranges_gd[0:ndim]) if ndim == 1: fig = plots.getSinglePlotter(width_inch=5) fig.plot_1d(gd_samples, names[0], normalized=True) elif ndim > 1: fig = plots.getSubplotPlotter() fig.triangle_plot([gd_samples], filled=True) if include_ml: for i in range(ndim): ax = fig.subplots[i, i] ax.axvline(theta_ml[i], color='r', ls='-', alpha=0.75) for i in range(ndim - 1): for j in range(i + 1): ax = fig.subplots[i + 1, j] ax.plot(theta_ml[j], theta_ml[i + 1], 'w*', zorder=3, markersize=5.) plt.show() fig_name = 'MCMC_sampling_{}'.format(chain_tag) save_figure(mcmc_config, fig, fig_name, gd_plot=True) # plot_file = '{}/MCMC_sampling_{}.png'.format(plots_dir, chain_tag) # mcmc_fig.export(plot_file) plt.close()
def triangle_plot(self): samples = MCSamples(samples=self._data) g = plots.getSubplotPlotter() g.triangle_plot([ samples, ], filled=True, contour_args={'alpha': 0.8}, diag1d_kwargs={'normalized': True}) plt.show() print("triangle plot at iteration " + str(iteration)) print("\n---------- ---------- ---------- ---------- ----------\n")
def plot_corner(results, outprefix=None, **kwargs): """ Store a simple corner plot in outprefix_corner.pdf, based on samples extracted from fit. Additional kwargs are passed to MCSamples. """ la = get_flat_posterior(results) samples = [] paramnames = [] badlist = ['lp__'] badlist += [ k for k in la.keys() if 'log' in k and k.replace('log', '') in la.keys() ] for k in sorted(la.keys()): print('%20s: %.4f +- %.4f' % (k, la[k].mean(), la[k].std())) if k not in badlist and la[k].ndim == 2: samples.append(la[k]) paramnames.append(k) if len(samples) == 0: arrays = [ k for k in la.keys() if la[k].ndim == 3 and la[k].shape[2] <= 20 and k not in badlist ] if len(arrays) != 1: warnings.warn("no scalar variables found") return k = arrays[0] # flatten across chains and column for each variable samples = la[k] paramnames = ['%s[%d]' % (k, i + 1) for i in range(la[k].shape[1])] samples = numpy.transpose(samples) import matplotlib.pyplot as plt from getdist import MCSamples, plots settings = kwargs.pop('settings', dict(smooth_scale_2D=3.0)) samples_g = MCSamples(samples=samples, names=paramnames, settings=settings, **kwargs) g = plots.get_subplot_plotter() g.settings.num_plot_contours = 3 g.triangle_plot([samples_g], filled=False, contour_colors=plt.cm.Set1.colors) if outprefix is not None: plt.savefig(outprefix + '_corner.pdf', bbox_inches='tight') plt.close()
def plot_chain(self, chain, save_figure=False, prefix=None, extension='pdf'): """ Produces a triangle plot from a chain, which can be saved to file automatically. Args: chain (array): 2D array with shape [n_samples,n_params], where `n_samples` is the number of samples in the chain and `n_params` is the number of free parameters for this likelihood run. save_figures (bool): if true, figures will be saved to file. File names will take the form: <`prefix`>triangle.<`extension`> prefix (str): output prefix. extension (str): plot extension (pdf, pdf etc.). Returns: figure object """ from getdist import MCSamples from getdist import plots as gplots nsamples = len(chain) # Generate samples ranges = {} for n, pr in zip(self.p_free_names, self.p_free_prior): if pr['type'] == 'TopHat': ranges[n] = pr['values'] samples = MCSamples(samples=chain[nsamples // 4:], names=self.p_free_names, labels=self.p_free_labels, ranges=ranges) samples.smooth_scale_2D = 0.2 # Triangle plot g = gplots.getSubplotPlotter() g.triangle_plot([samples], filled=True) if save_figure: if prefix is None: prefix = self.prefix_out fname = prefix + 'triangle.' + extension g.export(fname) return g
def _sampled_to_getdist_mcsamples(self, first=None, last=None): """ Basic interface with getdist -- internal use only! (For analysis and plotting use `getdist.mcsamples.MCSamplesFromCobaya <https://getdist.readthedocs.io/en/latest/mcsamples.html#getdist.mcsamples.loadMCSamples>`_.) """ names = list(self.sampled_params) # No logging of warnings temporarily, so getdist won't complain unnecessarily logging.disable(logging.WARNING) mcsamples = MCSamples( samples=self.data[:len(self)][names].values[first:last], weights=self.data[:len(self)][_weight].values[first:last], loglikes=self.data[:len(self)][_minuslogpost].values[first:last], names=names) logging.disable(logging.NOTSET) return mcsamples
def triangle_plot(self): if not HAS_GETDIST: raise RuntimeError( 'you need to install getdist to get the triangle plot.') samples = MCSamples(samples=self._data) g = plots.getSubplotPlotter() g.triangle_plot([ samples, ], filled=True, contour_args={'alpha': 0.8}, diag1d_kwargs={'normalized': True}) plt.show() print("triangle plot at iteration " + str(iteration)) print("\n---------- ---------- ---------- ---------- ----------\n")
def _sampled_to_getdist_mcsamples(self, first=None, last=None): """ Basic interface with getdist -- internal use only! (For analysis and plotting use `getdist.mcsamples.loadCobayaSamples`.) """ names = list(self.sampled_params) # No logging of warnings temporarily, so getdist won't complain unnecessarily logging.disable(logging.WARNING) mcsamples = MCSamples( samples=self.data[:self.n()][names].values[first:last], weights=self.data[:self.n()][_weight].values[first:last], loglikes=self.data[:self.n()][_minuslogpost].values[first:last], names=names) logging.disable(logging.NOTSET) return mcsamples
def sampled_to_getdist_mcsamples(self, first=None, last=None): """ Basic interface with getdist -- internal use only! (For analysis and plotting use `getdist.mcsamples.MCSamplesFromCobaya <https://getdist.readthedocs.io/en/latest/mcsamples.html#getdist.mcsamples.loadMCSamples>`_.) """ names = list(self.sampled_params) # No logging of warnings temporarily, so getdist won't complain unnecessarily with NoLogging(): mcsamples = MCSamples( samples=self.data[:len(self)][names].to_numpy(dtype=np.float64)[ first:last], weights=self.data[:len(self)][OutPar.weight].to_numpy(dtype=np.float64)[ first:last], loglikes=self.data[:len(self)][OutPar.minuslogpost].to_numpy( dtype=np.float64)[first:last], names=names) return mcsamples
def addChains(self, Chains, ignore_rows=0.3): root = list(np.asarray(Chains)[:, 0]) lengend = list(np.asarray(Chains)[:, 1]) n = len(Chains) for i in range(n): savefile_name = './chains/' + root[i] + '.npy' samples, theta_name, theta_fit, theta_fact, minkaf, data_num, ranges = np.load( savefile_name, allow_pickle=True) self.Samp.append( MCSamples(samples=samples, names=theta_name, labels=theta_name, ranges=ranges, settings={'ignore_rows': ignore_rows})) self.param_names = [] for na in self.Samp[-1].getParamNames().names: self.param_names.append(na.name) self.lengend += lengend self._n = len(self.Samp) self.root += root
def get_gdobj(self): datapts = [] weight = self.weight_col() for col in self.source.colnames: datapts.append(self.reduced_col(col)) datapts = np.array(datapts).T vlfile = self.source.extract_ini("VALUES")#test vlpars = Parameter.load_parameters(vlfile)#test rangedict = {} for vlpar in vlpars: rangedict[str(vlpar)] = np.array(vlpar.limits) try: loglikes = self.source.reduced_col("post") except: loglikes = self.source.reduced_col("like") if MCSamples: gdc = MCSamples(samples = datapts,weights=weight,loglikes=loglikes, names=self.source.colnames,name_tag = self.source.name,ranges=rangedict)# ranges from value file else: raise ImportError('GetDist is not installed') self.source.gdc = gdc return gdc
def _triangle_plot(self, these_samples, these_y, plotname): names = self._parameters_list labels = [] level_lines = [0.2, 0.4, 0.6, 0.8, 0.95, 0.98] num_level_lines = len(level_lines) g = plots.getSubplotPlotter(width_inch=9) g.settings.num_plot_contours = num_level_lines mcsamples = MCSamples(samples=these_samples, names=names, labels=names) mcsamples.updateSettings({'contours': level_lines}) g.triangle_plot( [mcsamples], names, # filled_compare=True, legend_labels=labels, legend_loc='upper right', # filled=False, contour_colors=['darkblue', 'green'], # filled=True, # contour_lws=[.2, .4, .68, .95, .98] ) n_params = len(names) for i in range(n_params): for j in range(n_params): if j > i: continue ax = g.subplots[i, j] ax.axvline(these_y[j], color='black', ls='--', alpha=0.4) if i != j: ax.axhline(these_y[i], color='black', ls='-.', alpha=0.4) g.export(plotname)
def get_separate_mcsamples(chain): """ Function that returns separate :class:`~getdist.mcsamples.MCSamples` for each sampler chain. :param chain: :class:`~getdist.mcsamples.MCSamples` the input chain. :return: list of :class:`~getdist.mcsamples.MCSamples` with the separate chains. """ # get separate chains: _chains = chain.getSeparateChains() # copy the param names and ranges: _mc_samples = [] for ch in _chains: temp = MCSamples() temp.paramNames = chain.getParamNames() temp.setSamples(ch.samples, weights=ch.weights, loglikes=ch.loglikes) temp.sampler = chain.sampler temp.ranges = chain.ranges temp.updateBaseStatistics() _mc_samples.append(temp.copy()) # return _mc_samples
def plot_chain(folder, name_tag): files = glob.glob(folder + "*__*.txt") params = glob.glob(folder + "*_.paramnames") datalist = [] for f in files: datalist.append(loadMCMC(f, params[0])) data = astropy.table.vstack(datalist) data_sim = data[:] weights_act = data['acceptance'][:] for col in [ 'likelihood', 'acceptance', 'omega_b', 'omega_cdm', '100theta_s', 'tau_reio' ]: data.remove_column(col) if 'A_planck' in data.colnames: data.remove_column('A_planck') nparr_act = np.array(data.as_array().tolist()[:]) return MCSamples(samples=nparr_act, names=data.colnames, labels=data.colnames, name_tag=name_tag)