def xval_variable_parameters()

in vihds/plotting.py [0:0]


def xval_variable_parameters(res, ncols=2):
    ndata = len(res.ids)
    qs = dict(zip(res.q_names, res.q_values))

    devices = np.unique(res.devices)
    indexes = np.unique([n.split(".")[0] for n in res.q_names], return_index=True)[1]
    all_ps = [[n.split(".")[0] for n in res.q_names][index] for index in sorted(indexes)]

    ps = []
    for i, p in enumerate(all_ps):
        if p + ".mu" in qs:
            if np.shape(qs[p + ".mu"])[0] == ndata:
                ps.append(p)

    if utils.is_empty(ps):
        print("- No variables parameters: not producing plot")
        return
    print("- ", ps)

    # Define data and device-dependent colours
    cdict = dict(zip(devices, sns.color_palette()))

    # Define geometry and figures
    nrows = np.ceil(len(ps) / ncols).astype(int)
    f, axs = pp.subplots(nrows, ncols, sharex=True, figsize=(6 * ncols, 2 * nrows))
    f.suptitle("Local parameters", fontsize=14)
    for i in range(nrows):
        for j in range(ncols):
            if nrows > 1:
                ax = axs[i, j]
            else:
                ax = axs[j]
            if (j + i * ncols) < len(ps):
                name = ps[j + i * ncols]
                for di in devices:
                    locs = np.where(res.devices == di)
                    x = res.ids[locs]
                    y = np.squeeze(qs["%s.mu" % name][locs])
                    err = np.squeeze(1 / qs["%s.prec" % name][locs])
                    ax.errorbar(x, y, err, fmt=".", color=cdict[di])
                    ax.set_title(name)
                if i == (nrows - 1):
                    ax.set_xlabel("Data instance")
            else:
                if i > 0:
                    axs[i - 1, j].set_xlabel("Data instance")
                ax.set_visible(False)
        if nrows > 1:
            axs[i, 0].set_ylabel("Parameter value")
        else:
            axs[0].set_ylabel("Parameter value")
    f.tight_layout(rect=(0, 0, 1, 0.97))
    sns.despine()

    return f