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'
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'
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