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