Пример #1
0
def check_colornorm(vmin=None, vmax=None, vcenter=None, norm=None):
    from matplotlib.colors import Normalize

    try:
        from matplotlib.colors import TwoSlopeNorm as DivNorm
    except ImportError:
        # matplotlib<3.2
        from matplotlib.colors import DivergingNorm as DivNorm

    if norm is not None:
        if (vmin is not None) or (vmax is not None) or (vcenter is not None):
            raise ValueError(
                'Passing both norm and vmin/vmax/vcenter is not allowed.')
    else:
        if vcenter is not None:
            norm = DivNorm(vmin=vmin, vmax=vmax, vcenter=vcenter)
        else:
            norm = Normalize(vmin=vmin, vmax=vmax)

    return norm
Пример #2
0
def test_scatter_embedding_add_outline_vmin_vmax_norm(image_comparer, check_same_image):
    save_and_compare_images = image_comparer(ROOT, FIGS, tol=15)
    pbmc = sc.datasets.pbmc68k_reduced()

    sc.pl.embedding(
        pbmc,
        'X_umap',
        color=['percent_mito', 'n_counts', 'bulk_labels', 'percent_mito'],
        s=200,
        frameon=False,
        add_outline=True,
        vmax=['p99.0', partial(np.percentile, q=90), None, 0.03],
        vmin=0.01,
        vcenter=[0.015, None, None, 0.025],
        outline_color=('#555555', '0.9'),
        outline_width=(0.5, 0.5),
        cmap='viridis_r',
        alpha=0.9,
        wspace=0.5,
    )
    save_and_compare_images('master_embedding_outline_vmin_vmax')

    import matplotlib as mpl, matplotlib.pyplot as plt

    norm = mpl.colors.LogNorm()
    with pytest.raises(
        ValueError, match="Passing both norm and vmin/vmax/vcenter is not allowed."
    ):
        sc.pl.embedding(
            pbmc,
            'X_umap',
            color=['percent_mito', 'n_counts'],
            norm=norm,
            vmin=0,
            vmax=1,
            vcenter=0.5,
            cmap='RdBu_r',
        )

    try:
        from matplotlib.colors import TwoSlopeNorm as DivNorm
    except ImportError:
        # matplotlib<3.2
        from matplotlib.colors import DivergingNorm as DivNorm

    from matplotlib.colors import Normalize

    norm = Normalize(0, 10000)
    divnorm = DivNorm(200, 150, 6000)

    # allowed
    sc.pl.umap(
        pbmc,
        color=['n_counts', 'bulk_labels', 'percent_mito'],
        frameon=False,
        vmax=['p99.0', None, None],
        vcenter=[0.015, None, None],
        norm=[None, norm, norm],
        wspace=0.5,
    )

    sc.pl.umap(
        pbmc,
        color=['n_counts', 'bulk_labels'],
        frameon=False,
        norm=norm,
        wspace=0.5,
    )
    plt.savefig(FIGS / 'umap_norm_fig0.png')
    plt.close()

    sc.pl.umap(
        pbmc,
        color=['n_counts', 'bulk_labels'],
        frameon=False,
        norm=divnorm,
        wspace=0.5,
    )
    plt.savefig(FIGS / 'umap_norm_fig1.png')
    plt.close()

    sc.pl.umap(
        pbmc,
        color=['n_counts', 'bulk_labels'],
        frameon=False,
        vcenter=200,
        vmin=150,
        vmax=6000,
        wspace=0.5,
    )
    plt.savefig(FIGS / 'umap_norm_fig2.png')
    plt.close()

    check_same_image(FIGS / 'umap_norm_fig1.png', FIGS / 'umap_norm_fig2.png', tol=1)

    with pytest.raises(AssertionError):
        check_same_image(
            FIGS / 'umap_norm_fig1.png', FIGS / 'umap_norm_fig0.png', tol=1
        )