Пример #1
0
def test_no_fill():
    p = (ggplot(df, aes('x', group='factor(z)'))
         + geom_polygon(aes(y='y'), fill=None, color='red', size=2)
         + geom_polygon(aes(y='y+2'), fill='None', color='green', size=2)
         + geom_polygon(aes(y='y+4'), fill='none', color='blue', size=2)
         )
    assert p + _theme == 'no_fill'
Пример #2
0
def test_aesthetics():
    p = (ggplot(df, aes('x', group='factor(z)')) + geom_polygon(aes(y='y')) +
         geom_polygon(aes(y='y+3', alpha='z')) +
         geom_polygon(aes(y='y+6', linetype='factor(z)'),
                      color='brown',
                      fill=None,
                      size=2) +
         geom_polygon(aes(y='y+9', color='z'), fill=None, size=2) +
         geom_polygon(aes(y='y+12', fill='factor(z)')) + geom_polygon(
             aes(y='y+15', size='z'), color='yellow', show_legend=False))

    assert p + _theme == 'aesthetics'
Пример #3
0
def expression_plot(
    inFile,
    cp1=1,
    cp2=2,
    model=None,
    draw_distribution=True,
    draw_points=True,
    max_kernel_alpha=0.5,
    color="expression",
):
    par = get_params(inFile)
    pl = (pn.ggplot(pn.aes(f"CP {cp1}", f"CP {cp2}", color=color)) +
          pn.theme_minimal())
    df = None
    kdf = None
    if draw_points:
        if model is None:
            index = [
                f"sample {i+1}" for i in range(par["means"]["x_t"].shape[0])
            ]
            if color != "expression":
                raise Exception(
                    "A model must be passed to color other that by expression."
                )
        else:
            index = model.counts.columns
        columns = [f"CP {i+1}" for i in range(par["means"]["x_t"].shape[1])]
        df_t = pd.DataFrame(par["means"]["x_t"], index=index, columns=columns)
        df_t["expression"] = "tumor"
        df_tf = pd.DataFrame(par["means"]["x_f"], index=index, columns=columns)
        df_tf["expression"] = "non-tumor"
        df = pd.concat([df_t, df_tf])
        if model is not None:
            df = df.merge(model.pheno,
                          "left",
                          left_index=True,
                          right_index=True)
        pl += pn.geom_point(data=df, alpha=0.3)
    if draw_distribution:
        n_kernel = 0
        for var in sorted(par["means"]):
            n_kernel += "mus_f" in var

        if "altStick" in par["note"] and not par["note"]["altStick"]:
            tf = StickBreaking_legacy()
        else:
            tf = StickBreaking2()
        elipses = list()
        elipse_t = np.linspace(0, 2 * np.pi, 100)

        for tissue_type in ["t", "f"]:
            weights = tf.backward(
                par["means"][f"w_{tissue_type}_stickbreaking__"]).eval()
            n_dim = par["means"][f"x_{tissue_type}"].shape[1]
            for kernel in range(n_kernel):
                # get covariance elipse parameters
                packed_cov = par["means"][
                    f"packed_L_{tissue_type}_{kernel}_cholesky-cov-packed__"]
                lower = pm.expand_packed_triangular(n_dim,
                                                    packed_cov,
                                                    lower=True).eval()
                cov = np.dot(lower, lower.T)[[cp1 - 1, cp2 -
                                              1], :][:, [cp1 - 1, cp2 - 1]]
                var, U = np.linalg.eig(cov)
                theta = np.arccos(np.abs(U[0, 0]))

                # parametrize elipse
                width = 2 * np.sqrt(5.991 * var[0])
                hight = 2 * np.sqrt(5.991 * var[1])

                density = weights[kernel] / width * hight

                x = width * np.cos(elipse_t)
                y = hight * np.sin(elipse_t)

                # rotation
                c, s = np.cos(theta), np.sin(theta)
                R = np.array(((c, -s), (s, c)))
                path = np.dot(R, np.array([x, y]))

                # position
                pos = par["means"][f"mus_{tissue_type}_{kernel}"]
                path += pos[[cp1 - 1, cp2 - 1]][:, None]

                # make data frame
                path_df = pd.DataFrame({
                    f"CP {cp1}": path[0, :],
                    f"CP {cp2}": path[1, :]
                })
                path_df["kernel"] = kernel
                path_df["density"] = density
                path_df["expression"] = ("tumor" if tissue_type == "t" else
                                         "non-tumor")
                path_df["expression-kernel"] = (f"tumor {kernel}"
                                                if tissue_type == "t" else
                                                f"non-tumor {kernel}")
                elipses.append(path_df)
        kdf = pd.concat(elipses)
        density_scale = max_kernel_alpha / kdf["density"].max()
        kdf["density"] *= density_scale
        pl += pn.geom_polygon(
            pn.aes(fill="expression",
                   group="expression-kernel",
                   alpha="density"),
            data=kdf,
        )
        pl += pn.scale_alpha_continuous(range=(0, max_kernel_alpha))
    return pl, df, kdf