Beispiel #1
0
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)
Beispiel #2
0
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))
Beispiel #4
0
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
Beispiel #5
0
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.