Add plot for cells kicked out at filtering showing two qc measures
Implement a plotting function that compares two QC metrics in the form of a scatterplot. Further drawing up to two thresholds should be possible. Thresholds should be able to filter above/ below (single threshold) or inside/ outside (two thresholds).
def qc_scatter(adata, x, y, x_thresholds, y_thresholds):
# get qc data from adata.obs columns
# plot scatter
# add threshold line(s)
# color cells out of threshold bounds in red
# return axis object
Legacy code
#define cutoffs for % mito and total number of genes and just plot (global values for all), filtering is done in next step
mito_cut = 8
feat_cut_upper = 6000
feat_cut_lower = 800
globalfilter = True
#filter1 = adata.obs['n_genes_by_counts'] > feat_cut_upper
fig, axs = plt.subplots(1,2,figsize=(10,5))
#fig, (ax1, ax2) = plt.subplot(1, 2)
#scanpy.pl.scatter(adata, x='total_counts', y='pct_counts_is_mito')
#scanpy.pl.scatter(adata, x='total_counts', y='n_genes_by_counts')
a=np.where(adata.obs['pct_counts_is_mito'] > mito_cut, "excluded","")
b=np.where(adata.obs['n_genes_by_counts'] > feat_cut_upper, "excluded","")
c=np.where(adata.obs['n_genes_by_counts'] < feat_cut_lower, "excluded","")
d= np.char.add(b,c)
if len(np.unique(a)) > 1:
a=pd.Categorical(a,ordered=True,categories=['', 'excluded'])
sns.scatterplot(x=adata.obs['total_counts'], y=adata.obs['pct_counts_is_mito'],ax=axs[0],hue=a,s=5,palette=['black','red'])
else:
sns.scatterplot(x=adata.obs['total_counts'], y=adata.obs['pct_counts_is_mito'],ax=axs[0],hue=a,s=5,palette=['black'])
if len(np.unique(d)) > 1:
d=pd.Categorical(d,ordered=True,categories=['', 'excluded'])
sns.scatterplot(x=adata.obs['total_counts'], y=adata.obs['n_genes_by_counts'],ax=axs[1],hue=d,s=5,palette=['black','red'])
else:
sns.scatterplot(x=adata.obs['total_counts'], y=adata.obs['n_genes_by_counts'],ax=axs[1],hue=d,s=5,palette=['black'])
axs[0].axhline(mito_cut, ls='--', color="darkgray")
axs[1].axhline(feat_cut_upper, ls='--', color="darkgray")
axs[0].set(xlabel='Total Counts', ylabel='% Mitochondrial Reads')
axs[1].set(xlabel='Total Counts', ylabel='Number of Genes with Counts > 0')
axs[0].grid(False);axs[1].grid(False)
plt.tight_layout()
plt.savefig(fname=local_path+figures+"01-2-QC-cell_filtering_mito_genes.pdf")
Edited by Hendrik Schultheis