Beispiel #1
0
                    m = chain.shape[0]
                    weight = weight / weight.max()
                    samples = None
                    while samples is None or samples.shape[0] < n:
                        if samples is None:
                            samples = chain[np.random.rand(m) < weight, :]
                        else:
                            samples = np.concatenate((samples, chain[np.random.rand(m) < weight, :]))
                    samples = samples[:n, :]
                    if stds_dict is not None:
                        samples = np.hstack((samples, stds_dict[extra["name"]]))

                    # c.add_chain(chain, weights=weight, parameters=model.get_labels(), **extra)
                    c.add_chain(samples, parameters=model.get_labels() + [r"$\sigma_\alpha$"], **extra)
                c.configure(shade=True, bins=30, legend_artists=True)
                c.configure_truth(zorder=-10)
                c.analysis.get_latex_table(filename=pfn + "_params.txt", parameters=[r"$\alpha$"])
                c.plotter.plot_summary(
                    filename=pfn + "_summary.png", extra_parameter_spacing=1.5, errorbar=True, truth={"$\\Omega_m$": 0.31, "$\\alpha$": 0.9982}
                )
                extents = {r"$\alpha$": [0.975, 1.032], r"$\sigma_\alpha$": [0.01, 0.029]}
                fig = c.plotter.plot_summary(
                    filename=[pfn + "_summary2.png", pfn + "_summary2.pdf"],
                    extra_parameter_spacing=1.5,
                    parameters=[r"$\alpha$", r"$\sigma_\alpha$"],
                    errorbar=True,
                    truth={"$\\Omega_m$": 0.31, "$\\alpha$": 0.9982},
                    extents=extents,
                )
            # c.plotter.plot(filename=pfn + "_contour.png", truth={"$\\Omega_m$": 0.31, '$\\alpha$': 1.0})
            # c.plotter.plot_walks(filename=pfn + "_walks.png", truth={"$\\Omega_m$": 0.3121, '$\\alpha$': 1.0})
Beispiel #2
0
"""

###############################################################################
# You can specify truth values using a list (in the same order as the
# declared parameters).

import numpy as np
from numpy.random import normal, multivariate_normal
from chainconsumer import ChainConsumer

np.random.seed(2)
cov = 0.2 * normal(size=(3, 3)) + np.identity(3)
truth = normal(size=3)
data = multivariate_normal(truth, 0.5 * (cov + cov.T), size=100000)

c = ChainConsumer().add_chain(data, parameters=["$x$", "$y$", r"$\beta$"])
fig = c.plotter.plot(truth=truth)
fig.set_size_inches(
    4.5 + fig.get_size_inches())  # Resize fig for doco. You don't need this.

###############################################################################
# Or you can specify truth values using a dictionary. This allows you to specify
# truth values for only some parameters. You can also customise the look
# of your truth lines.

c.configure_truth(color='w', ls=":", alpha=0.8)
fig2 = c.plotter.plot(truth={"$x$": truth[0], "$y$": truth[1]})
fig2.set_size_inches(
    4.5 + fig2.get_size_inches())  # Resize fig for doco. You don't need this.
Beispiel #3
0
    # c.add_chain(samples_chain35,parameters=[r"$\mathbf{log_{10}\ M_{1}}$", 
    #     r"$\mathbf{log_{10}\ M_{*}}$", r"$\boldsymbol{\beta}$",
    #     r"$\boldsymbol{\delta}$", r"$\boldsymbol{\xi}$", 
    #     r"$\mathbf{log_{10}\ M^{qc}_{h}}$", r"$\mathbf{log_{10}\ M^{qs}_{h}}$", 
    #     r"$\boldsymbol{{\mu}_c}$", r"$\boldsymbol{{\mu}_s}$"],
    #     name=r"ECO halo: $\mathbf{\Phi}$  + $\mathbf{f_{blue, cen}}$ + $\mathbf{f_{blue, sat}}$", color='#E766EA', 
    #     zorder=10)

# c.configure(shade_gradient=[0.1, 3.0], colors=['r', 'b'], \
#      sigmas=[1,2], shade_alpha=0.4)

# sigma levels for 1D gaussian showing 68%,95% conf intervals
c.configure(kde=2.0, shade_gradient = 2.0, shade_alpha=0.8, label_font_size=15, 
    tick_font_size=10, summary=False, sigma2d=False, diagonal_tick_labels=False, 
    max_ticks=4, linewidths=2, legend_kwargs={"fontsize": 15})
c.configure_truth(color='goldenrod', lw=1.7)
fig1 = c.plotter.plot(display=True)
# c.configure(label_font_size=15, tick_font_size=10, summary=True, 
#     sigma2d=False, legend_kwargs={"fontsize": 15}) 
if quenching == 'hybrid':
    fig1 = c.plotter.plot(display=True, truth=best_fit_hybrid)
elif quenching == 'halo':
    fig1 = c.plotter.plot(display=True, truth=best_fit_halo)

if quenching == 'hybrid':
    fig1 = c.plotter.plot(filename='/Users/asadm2/Documents/Grad_School/Research/Papers/RESOLVE_Statistics_paper/Figures/contours_{0}.pdf'.format(quenching), 
    truth=best_fit_hybrid)
elif quenching == 'halo':
    fig1 = c.plotter.plot(filename='/Users/asadm2/Documents/Grad_School/Research/Papers/RESOLVE_Statistics_paper/Figures/contours_{0}.pdf'.format(quenching), 
        truth=best_fit_halo)
Plot truth values on top of your contours.

"""

###############################################################################
# You can specify truth values using a list (in the same order as the
# declared parameters).

import numpy as np
from numpy.random import normal, multivariate_normal
from chainconsumer import ChainConsumer

np.random.seed(2)
cov = 0.2 * normal(size=(3, 3)) + np.identity(3)
truth = normal(size=3)
data = multivariate_normal(truth, np.dot(cov, cov.T), size=100000)

c = ChainConsumer().add_chain(data, parameters=["$x$", "$y$", r"$\beta$"])
fig = c.plotter.plot(truth=truth)
fig.set_size_inches(4.5 + fig.get_size_inches())  # Resize fig for doco. You don't need this.

###############################################################################
# Or you can specify truth values using a dictionary. This allows you to specify
# truth values for only some parameters. You can also customise the look
# of your truth lines.


c.configure_truth(color='w', ls=":", alpha=0.8)
fig2 = c.plotter.plot(truth={"$x$": truth[0], "$y$": truth[1]})
fig2.set_size_inches(4.5 + fig2.get_size_inches())  # Resize fig for doco. You don't need this.
Beispiel #5
0
def plotmaker(params, parameters, inj):
    '''
    Make posterior plots from the samples generated by tge mcmc/nested sampling algorithm.

    Parameters
    -----------

    params : dictionary
        Dictionary of config params

    parameters: string
        Array or list of strings with names of the parameters

    npar : int
        Dimensionality of the parameter space
    '''

    post = np.loadtxt(params['out_dir'] + "/post_samples.txt")

    ## if modeltype is sph, first call the mapmaker.
    if params['modeltype'] == 'sph_sgwb':
        mapmaker(params, post)

    ## setup the truevals dict
    truevals = []

    if params['modeltype'] == 'isgwb':

        truevals.append(inj['log_Np'])
        truevals.append(inj['log_Na'])
        truevals.append(inj['alpha'])
        truevals.append(inj['ln_omega0'])

    elif params['modeltype'] == 'noise_only':

        truevals.append(inj['log_Np'])
        truevals.append(inj['log_Na'])

    elif params['modeltype'] == 'isgwb_only':

        truevals.append(inj['alpha'])
        truevals.append(inj['ln_omega0'])

    elif params['modeltype'] == 'sph_sgwb':

        truevals.append(inj['log_Np'])
        truevals.append(inj['log_Na'])
        truevals.append(inj['alpha'])
        truevals.append(inj['ln_omega0'])

        ## get blms
        for lval in range(1, params['lmax'] + 1):
            for mval in range(lval + 1):

                idx = Alm.getidx(params['lmax'], lval, mval)

                if mval == 0:
                    truevals.append(np.real(inj['blms'][idx]))
                else:
                    truevals.append(np.abs(inj['blms'][idx]))
                    truevals.append(np.angle(inj['blms'][idx]))

    if len(truevals) > 0:
        knowTrue = 1  ## Bit for whether we know the true vals or not
    else:
        knowTrue = 0

    npar = len(parameters)

    plotrange = [0.999] * npar

    if params['out_dir'][-1] != '/':
        params['out_dir'] = params['out_dir'] + '/'

    ## Make chainconsumer corner plots
    cc = ChainConsumer()
    cc.add_chain(post, parameters=parameters)
    cc.configure(smooth=False, kde=False, max_ticks=2, sigmas=np.array([1, 2]), label_font_size=18, tick_font_size=18, \
            summary=False, statistics="max_central", spacing=2, summary_area=0.95, cloud=False, bins=1.2)
    cc.configure_truth(color='g', ls='--', alpha=0.7)

    if knowTrue:
        fig = cc.plotter.plot(figsize=(16, 16), truth=truevals)
    else:
        fig = cc.plotter.plot(figsize=(16, 16))

    ## make axis labels to be parameter summaries
    sum_data = cc.analysis.get_summary()
    axes = np.array(fig.axes).reshape((npar, npar))

    # Adjust axis labels
    for ii in range(npar):
        ax = axes[ii, ii]

        # get the right summary for the parameter ii
        sum_ax = sum_data[parameters[ii]]
        err = [sum_ax[2] - sum_ax[1], sum_ax[1] - sum_ax[0]]

        if np.abs(sum_ax[1]) <= 1e-3:
            mean_def = '{0:.3e}'.format(sum_ax[1])
            eidx = mean_def.find('e')
            base = float(mean_def[0:eidx])
            exponent = int(mean_def[eidx + 1:])
            mean_form = str(base) + ' \\times ' + '10^{' + str(exponent) + '} '
        else:
            mean_form = '{0:.3f}'.format(sum_ax[1])

        if np.abs(err[0]) <= 1e-2:
            err[0] = '{0:.4f}'.format(err[0])
        else:
            err[0] = '{0:.2f}'.format(err[0])

        if np.abs(err[1]) <= 1e-2:
            err[1] = '{0:.4f}'.format(err[1])
        else:
            err[1] = '{0:.2f}'.format(err[1])

        label = parameters[ii][:-1] + ' = ' + mean_form + '^{+' + err[
            0] + '}_{-' + err[1] + '}$'

        ax.set_title(label, {'fontsize': 18}, loc='left')

    ## Save posterior
    plt.savefig(params['out_dir'] + 'corners.png', dpi=150)
    print("Posteriors plots printed in " + params['out_dir'] + "corners.png")
    plt.close()