{ "cells": [ { "cell_type": "markdown", "id": "59cc2f94-b077-4bfc-9b8b-95eec7c19126", "metadata": {}, "source": [ "# A tiny simulation\n", "\n", "This is a self-contained example. No outside dataset required." ] }, { "cell_type": "markdown", "id": "0f2f9e9c-5d17-4062-86bc-5fc234dad6b0", "metadata": {}, "source": [ "## Data generation" ] }, { "cell_type": "code", "execution_count": 1, "id": "63b18a00-857e-4ddc-bcba-c4c3834076af", "metadata": {}, "outputs": [], "source": [ "from functools import reduce\n", "import pickle as pkl\n", "\n", "import pandas as pd\n", "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "import sklearn.metrics" ] }, { "cell_type": "code", "execution_count": 2, "id": "9faa697b-dc5c-4990-b673-98f2f0e49f42", "metadata": {}, "outputs": [], "source": [ "import matplotlib\n", "matplotlib.rcParams['mathtext.fontset'] = 'dejavuserif'\n", "matplotlib.rcParams['font.family'] = 'arial'\n", "matplotlib.rc('pdf', fonttype=42)\n", "\n", "do_savefig = False\n", "savefig_path = './'" ] }, { "cell_type": "code", "execution_count": 3, "id": "ae651461-f932-406f-9ffe-f593f8f46c03", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "H1 H2 H3 H4 A1 A2 B1 B2 C1 C2 D1 D2 R\n" ] } ], "source": [ "np.random.seed(42)\n", "\n", "## Create a grid\n", "width = 50\n", "height = 8\n", "xs = np.arange(0, width)\n", "ys = np.arange(0, height)\n", "grid_x, grid_y = np.meshgrid(xs, ys)\n", "grid_x = grid_x.ravel()\n", "grid_y = grid_y.ravel()\n", "df = pd.DataFrame(np.array([grid_x, grid_y]).T, \n", " columns=['x', 'y'], \n", " index=reduce(np.char.add, ['cell_', grid_x.astype(str), '_', grid_y.astype(str)]))\n", "\n", "## Randomly assign cell types\n", "for y in range(3, 8):\n", " random_columns = np.random.choice([0, 1, 2], width, p=[0.3, 0.3, 0.4])\n", " \n", " df.loc[(random_columns[df['x']] == 0) & (df['y'] == y), 'celltype'] = 'B'\n", " df.loc[(random_columns[df['x']] == 1) & (df['y'] == y), 'celltype'] = 'C'\n", " df.loc[(random_columns[df['x']] == 2) & (df['y'] == y), 'celltype'] = 'D'\n", "\n", "df.loc[(df['y'] <= 2), 'celltype'] = 'A'\n", "\n", "## Generate receptor expression\n", "def go(d, x, y, width, height):\n", " if d == 'left':\n", " x = x - 1\n", " elif d == 'right':\n", " x = x + 1\n", " elif d == 'up':\n", " y = y + 1\n", " elif d == 'down':\n", " y = y - 1\n", " elif d == 'left-up':\n", " x = x - 1\n", " y = y + 1\n", " elif d == 'right-up':\n", " x = x + 1\n", " y = y + 1\n", " elif d == 'left-down':\n", " x = x - 1\n", " y = y - 1 \n", " elif d == 'right-down':\n", " x = x + 1\n", " y = y - 1\n", " \n", " if x < 0 or y < 0 or x >= width or y >= height:\n", " return None, None\n", " else:\n", " return x, y\n", "\n", "df['R+'] = 0\n", "for i in df.index:\n", " if df.loc[i, 'celltype'] in ['B', 'C']:\n", " for d in ['left', 'right', 'up', 'down', 'left-up', 'right-up', 'left-down', 'right-down']:\n", " x, y = go(d, df.loc[i, 'x'], df.loc[i, 'y'], width, height)\n", " if x is not None and y is not None:\n", " j = f'cell_{x}_{y}'\n", " if df.loc[j, 'celltype'] == 'A':\n", " if np.random.rand() < 1.:\n", " df.loc[i, 'R+'] = 1\n", "\n", "meta_expr_split = df.shape[1] # Number of columns for metadata, the rest is \"expression\"\n", "\n", "# Housekeeping genes that are uniform over all cell types\n", "df['H1'] = 50\n", "df['H2'] = 50\n", "df['H3'] = 50\n", "df['H4'] = 50\n", "\n", "# Cell identity genes that are over expressed in the corresponding cell type\n", "df['A1'] = 1\n", "df['A2'] = 1\n", "df['B1'] = 1\n", "df['B2'] = 1\n", "df['C1'] = 1\n", "df['C2'] = 1\n", "df['D1'] = 1\n", "df['D2'] = 1\n", "\n", "df.loc[df['celltype'] == 'A', 'A1'] = 50 \n", "df.loc[df['celltype'] == 'A', 'A2'] = 50\n", "df.loc[df['celltype'] == 'B', 'B1'] = 50\n", "df.loc[df['celltype'] == 'B', 'B2'] = 50\n", "df.loc[df['celltype'] == 'C', 'C1'] = 50\n", "df.loc[df['celltype'] == 'C', 'C2'] = 50\n", "df.loc[df['celltype'] == 'D', 'D1'] = 50\n", "df.loc[df['celltype'] == 'D', 'D2'] = 50\n", "\n", "# LR\n", "df['R'] = 1\n", "df.loc[:, 'R'] = 100 * df['R+']\n", "\n", "features = df.columns[meta_expr_split:].tolist()\n", "print(*features)\n", "\n", "expr = np.random.poisson(df[features])\n", "expr = pd.DataFrame(expr, index=df.index, columns=features)\n", "expr[['H1', 'H2', 'H3', 'H4']] = 50" ] }, { "cell_type": "code", "execution_count": 4, "id": "45879c7c-2b98-4c29-a927-92f65bd013d0", "metadata": {}, "outputs": [], "source": [ "meta = df.iloc[:, :meta_expr_split]" ] }, { "cell_type": "markdown", "id": "74058fbb-048e-4bf1-876c-a2c990951992", "metadata": {}, "source": [ "## Run Steamboat\n", "### Prepare the dataset" ] }, { "cell_type": "code", "execution_count": 5, "id": "9140bc32-8628-4646-af45-e199ee30ff13", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\dask\\dataframe\\_pyarrow_compat.py:15: FutureWarning: Minimal version of pyarrow will soon be increased to 14.0.1. You are using 11.0.0. Please consider upgrading.\n", " warnings.warn(\n" ] } ], "source": [ "import os\n", "import sys\n", "import pickle as pkl\n", "import matplotlib.pyplot as plt\n", "\n", "## Add path to the directory containing steamboat.\n", "sys.path.append(\"../\") \n", "\n", "import torch\n", "import pandas as pd\n", "import numpy as np\n", "import scipy as sp\n", "import scanpy as sc\n", "import squidpy as sq\n", "import steamboat as sf # Steamboat Factorization -> sf\n", "import steamboat.tools" ] }, { "cell_type": "code", "execution_count": 6, "id": "1f6f1b1b-afa8-4b6c-b1fd-ce2b0c21fd63", "metadata": {}, "outputs": [], "source": [ "device = \"cuda\"" ] }, { "cell_type": "code", "execution_count": 7, "id": "be676cd4-2c85-4cb8-9f34-42222ecfa9fb", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\anndata\\utils.py:292: UserWarning: X converted to numpy array with dtype int64\n", " warnings.warn(f\"{name} converted to numpy array with dtype {arr.dtype}\")\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a50b6ef20bcf48b4933b30952cc3a394", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/1 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sq.pl.spatial_scatter(adatas[0], color=adatas[0].var_names, shape=None, figsize=(2, 1), size=1., \n", " legend_fontsize=9, cmap='Reds', ncols=4)" ] }, { "cell_type": "code", "execution_count": 9, "id": "14fde0f9-33ef-48a9-a507-d01c8a793432", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING: Please specify a valid `library_id` or set it permanently in `adata.uns['spatial']`\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\squidpy\\pl\\_spatial_utils.py:946: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap', 'norm' will be ignored\n", " _cax = scatter(\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sq.pl.spatial_scatter(adatas[0], color='celltype', shape=None, figsize=(3, 2), size=1., \n", " legend_fontsize=9, cmap='Reds', ncols=4)" ] }, { "cell_type": "code", "execution_count": 10, "id": "8b0ce070-11aa-4d3b-a282-ddcb2760aca8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING: Please specify a valid `library_id` or set it permanently in `adata.uns['spatial']`\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sq.pl.spatial_scatter(adatas[0], color='R', shape=None, figsize=(3, 2), size=1., \n", " legend_fontsize=9, cmap='Reds', ncols=4)" ] }, { "cell_type": "markdown", "id": "96e2e769-2512-49b9-88cc-1be5b1cd3cc5", "metadata": {}, "source": [ "### Train and inspect the metagenes" ] }, { "cell_type": "code", "execution_count": 11, "id": "1cff7553-8fa3-4c55-846b-7df132ad9802", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-03-04 15:18:31,216::train::INFO] Epoch 1: train_loss 93.53722\n", "[2025-03-04 15:18:31,833::train::INFO] Epoch 201: train_loss 45.86432\n", "[2025-03-04 15:18:32,414::train::INFO] Epoch 401: train_loss 18.05071\n", "[2025-03-04 15:18:33,002::train::INFO] Epoch 601: train_loss 15.25431\n", "[2025-03-04 15:18:33,632::train::INFO] Epoch 801: train_loss 14.48488\n", "[2025-03-04 15:18:34,306::train::INFO] Epoch 1001: train_loss 13.66049\n", "[2025-03-04 15:18:34,900::train::INFO] Epoch 1201: train_loss 13.85075\n", "[2025-03-04 15:18:35,461::train::INFO] Epoch 1401: train_loss 8.00697\n", "[2025-03-04 15:18:36,033::train::INFO] Epoch 1601: train_loss 8.28427\n", "[2025-03-04 15:18:36,595::train::INFO] Epoch 1801: train_loss 7.29631\n", "[2025-03-04 15:18:37,155::train::INFO] Epoch 2001: train_loss 6.12441\n", "[2025-03-04 15:18:37,761::train::INFO] Epoch 2201: train_loss 5.56421\n", "[2025-03-04 15:18:38,348::train::INFO] Epoch 2401: train_loss 4.44459\n", "[2025-03-04 15:18:38,954::train::INFO] Epoch 2601: train_loss 23.91569\n", "[2025-03-04 15:18:39,564::train::INFO] Epoch 2801: train_loss 4.39433\n", "[2025-03-04 15:18:40,191::train::INFO] Epoch 3001: train_loss 5.70080\n", "[2025-03-04 15:18:40,833::train::INFO] Epoch 3201: train_loss 4.24723\n", "[2025-03-04 15:18:41,470::train::INFO] Epoch 3401: train_loss 4.25953\n", "[2025-03-04 15:18:42,089::train::INFO] Epoch 3601: train_loss 3.40463\n", "[2025-03-04 15:18:42,697::train::INFO] Epoch 3801: train_loss 8.52747\n", "[2025-03-04 15:18:43,298::train::INFO] Epoch 4001: train_loss 5.92595\n", "[2025-03-04 15:18:43,909::train::INFO] Epoch 4201: train_loss 4.36083\n", "[2025-03-04 15:18:44,600::train::INFO] Epoch 4401: train_loss 3.44769\n", "[2025-03-04 15:18:45,223::train::INFO] Epoch 4601: train_loss 4.07736\n", "[2025-03-04 15:18:45,834::train::INFO] Epoch 4801: train_loss 4.35808\n", "[2025-03-04 15:18:46,438::train::INFO] Epoch 5001: train_loss 5.09088\n", "[2025-03-04 15:18:47,036::train::INFO] Epoch 5201: train_loss 3.47747\n", "[2025-03-04 15:18:47,642::train::INFO] Epoch 5401: train_loss 4.57676\n", "[2025-03-04 15:18:48,258::train::INFO] Epoch 5601: train_loss 4.05396\n", "[2025-03-04 15:18:48,838::train::INFO] Epoch 5792: train_loss 6.33401\n", "[2025-03-04 15:18:48,839::train::INFO] Stopping criterion met.\n" ] }, { "data": { "text/plain": [ "Steamboat(\n", " (spatial_gather): BilinearAttention(\n", " (bias): NonNegBias(\n", " (elu): ELU(alpha=1.0)\n", " )\n", " (q): NonNegLinear(\n", " (elu): ELU(alpha=1.0)\n", " )\n", " (k_local): NonNegLinear(\n", " (elu): ELU(alpha=1.0)\n", " )\n", " (k_regionals): ModuleList()\n", " (w_ego): NonNegScale(\n", " (elu): ELU(alpha=1.0)\n", " )\n", " (tanh): Tanh()\n", " (v): NonNegLinear(\n", " (elu): ELU(alpha=1.0)\n", " )\n", " (cosine_similarity): CosineSimilarity()\n", " )\n", ")" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sf.set_random_seed(2)\n", "model = sf.Steamboat(adata.var_names.tolist(), n_heads=5, n_scales=2)\n", "model = model.to(device)\n", "\n", "model.fit(dataset, entry_masking_rate=0.2, feature_masking_rate=0.2,\n", " max_epoch=10000, \n", " loss_fun=torch.nn.MSELoss(reduction='sum'),\n", " opt=torch.optim.Adam, opt_args=dict(lr=0.01), stop_eps=1e-3, report_per=200, stop_tol=1000, device=device)" ] }, { "cell_type": "code", "execution_count": 12, "id": "8990428b-12b3-4120-b031-f18335b68f6f", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sf.tools.plot_all_transforms2(model, top=0)" ] }, { "cell_type": "code", "execution_count": 15, "id": "d8d95cda-f27e-4c39-8e89-50ba7222e58b", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a592f8a7076846208ff89bafdd3a3fac", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/1 [00:00" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "i = 0\n", "\n", "quantile = 1 - 0.01\n", "\n", "ego = np.quantile(adatas[i].obsm['ego_attn'], quantile, axis=0)\n", "local = np.quantile(adatas[i].obsm['local_attn'], quantile, axis=0)\n", "# regional = np.quantile(adatas[i].obsm['regional_attn_0'], quantile, axis=0)\n", "\n", "fig, ax = plt.subplots(figsize=(4, 1))\n", "sns.heatmap(np.vstack([ego, local]) * 100, vmax=50, ax=ax, linewidths=0.2, linecolor='grey', cmap='Reds', annot=True, fmt='.0f')\n", "ax.set_yticklabels(['ego', 'local'], rotation=0)\n", "\n", "fig, ax = plt.subplots(figsize=(4, 1))\n", "matrix = np.vstack([ego, local])\n", "matrix /= matrix.sum(axis=0)\n", "sns.heatmap((matrix * 100).round(), vmax=100, ax=ax, linewidths=0.2, linecolor='grey', cmap='Reds', annot=True, fmt='.0f')\n", "ax.set_yticklabels(['ego', 'local'], rotation=0)" ] }, { "cell_type": "markdown", "id": "91fef873-05ca-48a1-81be-8b46dca5f1c0", "metadata": {}, "source": [ "### Annotate the adata(s) with the scores" ] }, { "cell_type": "markdown", "id": "3b0c3f12-0bbb-4d92-b57d-93505a59ea8b", "metadata": {}, "source": [ "### Clustering" ] }, { "cell_type": "code", "execution_count": 17, "id": "51c326b0-10b4-4e1b-bbce-8744f98c2c5b", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\umap\\distances.py:1063: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n", " @numba.jit()\n", "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\umap\\distances.py:1071: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n", " @numba.jit()\n", "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\umap\\distances.py:1086: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n", " @numba.jit()\n", "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\umap\\umap_.py:660: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n", " @numba.jit()\n" ] } ], "source": [ "sf.tools.neighbors(adata, 'attn')" ] }, { "cell_type": "code", "execution_count": 18, "id": "b8c2e7d2-3792-4329-a02e-ac5386e9d54b", "metadata": {}, "outputs": [], "source": [ "sf.tools.leiden(adata, resolution=0.1)" ] }, { "cell_type": "code", "execution_count": 19, "id": "5b4acd90-0561-4071-bf8a-7e28b22588eb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING: Please specify a valid `library_id` or set it permanently in `adata.uns['spatial']`\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\squidpy\\pl\\_spatial_utils.py:946: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap', 'norm' will be ignored\n", " _cax = scatter(\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sq.pl.spatial_scatter(adata, color='steamboat_clusters', shape=None, figsize=(3, 2), size=1., \n", " legend_fontsize=9, cmap='Reds', ncols=4)\n", "if do_savefig:\n", " plt.savefig(savefig_path + 'sim-clusters.pdf')" ] }, { "cell_type": "code", "execution_count": 20, "id": "fa9a43e1-117d-47ec-a878-7296ed589b2f", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMYAAACHCAYAAABNnyaUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAYY0lEQVR4nO2da1BUR9rH/zPDneGOXCIOiqjIpUQC3hE2JF5eE9GomEpEpEzkVdyNl3LX5JUlRgWNuq6FcdFszBoTBVcjlqiY1UC0IK4xiiAGISCCIILcQbkM87wfUk5xZJBzBgZmxv5V9YfT0/30M+h/uvv0090iIiIwGAwO4sF2gMHQRpgwGAwVMGEwGCpgwmAwVMCEwWCogAmDwVABEwaDoQImDAZDBUwYDIYKmDAYOkV1dTXc3d2RkZHRY5lz587Bx8cH5ubmGDt2LFJTUwW3w4TB0BkyMzMxefJkFBUV9VimsLAQCxYswJYtW9DQ0IDNmzcjLCwM5eXlgtpiwmDoBIcPH8a7776Lbdu29VouMDAQ8+bNg4GBAcLCwhAUFISDBw8Kao8JgzFotLW1obGxkZPa2tpUlp05cyaKioqwePHiF9rMy8uDj48PJ8/T0xO3bt0S5BsTBmPAWC224qT4+HhYWVlxUnx8vMq6Tk5OMDAw6LWNpqYmmJubc/LMzMzQ3NwsyNfeW2Iw+gkjEff5o48+wrp16zh5xsbGfWrD3NwcT5484eQ9efIEFhYWguwwYTAGDBMxVxnGxsZ9FsLzeHt748aNG5y8O3fuwN/fX5AdNpRiDBiGYhEnaYLw8HBkZGTg+PHjkMvlOH78ODIyMhAeHi7IDhMGY8AwEok4qb+QSqX49ttvAQAeHh5ISUlBXFwcbGxs8Omnn+LkyZMYPXq0IJsitrWVMVDsNrPjPK9/UjNInvSOXs0x/ldkqXbdRGoEnjT0zQEzq77Z6Gt9bfJBBf3ZS2gavRIGQ7sx0qGBOxMGY8Aw1tCEWxNolYYfP3482C4wNIimJt+aQCuEUVBQgKioKLi6ug62KwwNYiAScZI2M6jCuHLlCkJDQ+Hp6Yn//ve/2Llz52C6w9AwuiSMAZ9jKBQKnDhxArt378bt27chl8tx9uxZzJw5k7eNtra2bsFm/b2Cyuh/tF0MXRHcY1RXV2PPnj1Ys2YNGhsbBW0C2bt3L9zd3bFhwwa8/fbbKCsrg6WlZbdoyN4QEnzG0B4MRNykzQha4Ltx4wZef/11jB07Fjk5Obh16xa8vLywf/9+REZG9lpfLBZj1apV2L17t/IXfsiQIbh16xZeeeUV3k731GN8aDKEt43nYesY/eyDCr4fwv03nlFd0bd2NIigHmPt2rX429/+hszMTBgYGMDNzQ0pKSm85wYJCQlIT0/HsGHDsGnTJlRUVECkRvdqbGwMS0tLTmJDKe1Hl+YYgoSRm5urDMZ69h965syZvLcNRkdHIy8vD8eOHUNeXh5GjhyJuro6XLp0CZ2dnQJdZ+gaeisMBwcH5Ofnc/Lu3r0LJycnQY2GhITg1KlTyM/Px7p167Bu3Tq88sorWL9+vSA7DN1Cb4WxatUqvPnmm/jiiy+UIb2LFi3CihUr1Grc1dUVO3bswIMHDxAfH48ff/xRLTsM3UCXhCE4uvbzzz/H/v37UVJSAhcXF6xYsQJr166FWDz4a4UsiFCLfFDBL69wF3Bfrbjft3Y0iOB1jOjoaERHR2vCF4aeY6Dt72i7IOhnXi6XIzY2Fm5ubjA1NcWYMWOwa9cuTfnG0DMMDMScpM0I6jE2bNiA1NRUfPTRR5DJZCguLsauXbvQ2tqKTZs2acpH3iRSY98M9DAEGFAb+uKDCgwkutNjCJpjDBkyBFevXsXIkSOVeXfv3sVrr70m+KQ3jaAFY2ttmOdogw+q+G3sKM6z+6+FfWtHgwjqMYgIzs7OnLzhw4eD7Y5l8MFQy4dPXRHkaXR0NN5//33U19cDAFpbW7F+/XosX75cE74x9AyJRMRJ2oygHuPQoUMoLy/H8ePHYWtri/r6esjlcgBAXFycshxbxWaoQqJDb6UECeObb77RlB+MlwBdGkoJEkZ6ejoiIyP7fadddnY2Ll68iMDAQEycOLFfbTO0B4lEd4QhyNNffvkFY8aMQUhICL799lu0trYKbvDBgwcIDg6GhYUFIiMj8dNPP2HixInYvn07pk2bhu+++65XG0JOyWZoD2JDMSdpM4K8O3PmDEpLSzFnzhzs3LkTTk5OiIqKwrVr13jbWL16NaysrHDs2DG0t7djzpw5iIuLw+PHj3Hw4EFs3769Vxtso5JuIjI04CRtpk8nEV69ehXR0dHIzs6Gh4cHVq1ahaioqBce125nZ4f79+9DKpWirq4OdnZ2ePr0KYyNjdHZ2Qk7OzvlW6+e6GmjknGn8B5MCVvH6FcfVNH8PxM4z9Jz/H9QBxrB/VlHRwe+++47zJ8/H8HBwSAi/P3vf8f27dvx9ddfIyws7IX129vbIZVKAQA2NjacTUYSiYTXmgjbqKSbiAwknKTNCOrPoqKicOLECYhEIrz77ru4evUqfH19lZ8PGzYMU6dOfaGN53fsPR+VyxYL9ReRkXaLoSuChFFaWorExESEhobCyMio2+cymQynTp16oY3Ozk5cuXJFKQC5XM55Zmsg+ovIUHeEIWgoNWrUKCxatKibKJYuXQoAsLW1xYwZM15o4+nTpwgKCkJwcDCCg4PR3NzMeVbnTRdDN+jLUKqqqgrz5s2DtbU17O3tsWbNGuXi8vPMnj0bJiYmkEqlypSWliaovV57jPLycly6dAkA8M9//hMBAQGc4U5DQ0OvvURXFAqFIAcZ+oPYSP03UYsXL8bQoUNRUVGByspKzJ07F3v27MGGDRu6lb1+/TouXLiAoKAgtdvr1VN7e3vs27cP1dXVaGtrw1//+lfO5yYmJoiNjVXbAcbLw/O9RI9vF597kfLbb78hIyMD5eXlMDMzg5ubG2JiYvDnP/+5mzDu3buH2tpa+Pn59c1ZEsCMGTOEFGcwOHREz+Gk2NhYAsBJsbGx3eqlpKSQra0tJy8nJ4cAUF1dHSc/OTmZrKysaPbs2WRvb09eXl705ZdfCvZVUN924cKFvqlQ02jBfoy++tCXNQigH9Yh+ssHVRgach753tra0xXFANDc3Axra2tlfltbGyZPnoxt27bB29sb6enpWLBgASwsLLBo0SLe30G7lx8Z+oWEO5Tie2trT1cUA+h2TXF4eDjnIsoZM2Zg6dKlSE5OFiQM7Q5YYegXBgbcxBNvb2/U1NTg0aNHyrw7d+7AxcUFVlbcVfZDhw7h3//+Nyevra0NpqamglxlwmAMHIaG3MSTUaNGYdq0aVizZg2amppw7949bNmyReUGuYaGBqxevRo3b96EQqHA2bNncfToUcFnn/GSbWlpaa9lZDIZ70aJCMXFxZy948nJyVi4cCEkEt1ZBGIIQySgl3ieEydOYPXq1RgxYgTEYjGWLl2KmJgYAL9fZ3zgwAG89957WLNmDVpaWjB//nxUVVXBzc0NX3/9NQIDA4X5StR7DIZYLO7x8GUigkgk4r1i3dLSghkzZsDR0VEZYl5VVQVXV1f4+/sjLS2t20SLN2zyrdWT785tH3CeJf/3RZ/a0SS8JHzv3r1+a3Dr1q0wMjJCYmKiMs/BwQH379/H3LlzER8fj61bt/ZbewwtQsDwabDhJYz+3LF34sQJnD9/Hg4ODpx8BwcHJCYmIiwsrFdh9Lgw1G9eMjRCH4ZSAw2vybdYLIZEInlh4ktVVRXc3d1Vfubr64vKyspebbCNSjqKRMJNWgwvCaenp/dbg5aWlqipqYGdnV23z2pra5ULNy+ix4WhvmxUYmgew+4R2doKL2E8H4xVV1eH4uJijB8/HnK5XGUIek+EhITg888/7xZzBQD79+/H5MmTe7XR48LQEyYMrUaHhlKCPG1ubsaKFSuQlJQEU1NT5Z18Fy9exJgxY3jZ+Pjjj+Hn54fq6mq88847cHJywsOHD5GcnIxDhw7h8uXLan0Rhg5goDuTb0ELfBs2bEBLSwvy8/NhZGQENzc3vPXWW/jwww952xg9ejS+//57ZGRkIDAwEKNHj8b06dNx+fJlnD9/Hq+++qrgL8HQEQyNuEmLEdRjnDlzBrm5ubCxsYFIJIKhoSF2796NoUOHCmp0ypQpyM3NRXFxMaqrq+Hs7CxogZCho+jrUKqzs1M5tn+2LqhQKNQ+iMDNzQ1ubm5q1WXoIDokDEFDqZCQEERHR+PJkyfKlfBNmzYhODhYE74x9A0dGkoJOleqqqoKc+fOxc2bNyGXy2FmZoZRo0YhNTVV0AX2jJeTztQDnGfJm1GD5EnvCOrbHBwc8NNPP+H69evKyyknTJigPYF/2hAjpAfxWpo6cE0vh1JEhKKiIohEIgQEBGDRokW8om4ZDCU6NJTiJYyWlhZMmzaNs/G8qqoKy5YtQ3BwMFpaWjTmIEOPkBhykxbDSxgviojt6OhgcUoMfqi5g28w4CWMEydO4IsvvugxIvb48eMacY6hX4gkhpykzfCSbX9ExD5Pc3MzsrKyUFNTAwcHB0yaNEn9DUoM3UDL5xVd4SWM/oiI7crOnTvxySef4OnTp8o8CwsLxMXFITo6utf6bD+GjqLlvURXeA2lnkXEqoJvROwzvvzyS2zbtg179+5FRUUF2tvb8eDBA+zYsQMxMTE4efJkrzbYfgwdRYfmGLwW+AoKCuDn54fIyMgeI2L5Bv/5+fkhJiYG8+fP7/ZZcnIy9u/fjx9//PGFNjR1cQxbx+hHH1SgyP+J8yz24P+DOtDwXvnOyspCVFQU8vLyIBKJQETw8fFBQkICpk+fzrtBCwsL1NXVqbx1qb29HcOGDeOcHyQItsCn1cKgwp85z6JRAX1rR4Pw7s/6KyJWJBL1eBWZkZERZ97B0DN0aD+G4IEei4hlqI0OTb4HfAbU0dGBI0eO9HilWE+XgTD0ALGWxNTxYMCF4ejoqHK/d9fPGXqKWHdOhB1wYZSUlAx0kwxtQaLdr2g5CL5RQwdpbW2l2NhYam1tHZT62mJjsH1QVJVwkjYjaKOSrtLY2AgrKys0NDTA0lL4K9m+1tcWG4PuQ80D7rOdi1o+DAS6M+hj6D5iA24SgJBbW8+dOwcfHx+Ym5tj7NixSE1NFe6q4BoMhrqIxdwkgMWLF0MqlaKiogLXrl3DxYsXsWfPnm7lCgsLsWDBAmzZsgUNDQ3YvHkzwsLCUF5eLsxVQaUZjL4glnATT57d2vrZZ59xbm3dt29ft7KHDx9GYGAg5s2bBwMDA4SFhSEoKAgHDx4U5KoOvSZQH2NjY8TGxqp9zE9f62uLjUH34bm3UnyvM87Ly4OtrS3nwA1PT0+Ulpaivr6eczllXl4efHx8OPU9PT1x69YtYb4O9uyf8fLC9zrjI0eO0LBhwzh5v/32GwGgsrIyTn5ISAjFxMRw8jZt2kQhISGCfHspegyGdsL3OmMht7b2VPb5cr3BhMEYNPheZ9z11tZnkRE93drq7e2NGzducPLu3LkDf39/Yc4J6l8YjEFi2rRp9M4771BjYyMVFxeTl5eXymHXr7/+SiYmJpScnEwdHR2UnJxMJiYmdPfuXUHtMWEwdILKykpauHAh2dnZ0ZAhQ2j9+vUkl8uJiMjc3Jy++eYbZdm0tDQaN24cSaVS8vLyorNnzwpuT++F8ejRIwoNDSUrKyuys7OjDz/8kDo6OgTbqaqqopEjR1J6errgutnZ2fT666+TjY0NOTo6Unh4OFVXV/Ouf+nSJZowYQJZWFiQo6MjrV69mp48eSLYD7lcTkFBQRQRESG4blJSEkkkEjI3N1emJUuWCLajK+j9OgbfhaEXkZmZicmTJ6OoqEhw+0+fPsXs2bMxZcoUVFZWIi8vDzU1NYiMjORVv7q6GnPmzMHKlStRX1+PmzdvIiMjA9u3bxfsy+bNm3HlyhXB9QDg559/Rnh4OJqbm5XpyJEjatnSCQZbmZqksLCQAFB5ebkyLykpiWQyGW8b//rXv0gmk1FSUhIBENxj5Ofn06xZs5TdPhHR6dOnydLSkreNxsZGIiJSKBSUm5tL7u7ulJCQIMiPS5cukaenJy1atEitHmP69Om0b98+wfV0Fb0WRkpKCtna2nLycnJyCADV1dXxsvHw4UPl0EsdYagiPDyc/vCHPwiuN3ToUAJAgYGB1NzczLveo0ePaPjw4ZSdnU0RERGChdHZ2UlSqZRmz55NMpmMhg4dSh988AHV1tYK/Aa6g14PpZqamrod4vbsDKzm5mZeNpycnHrcoy4UIsKmTZtw5swZ7N27V3D9wsJClJeXQyKRYOHChbzqKBQKLFmyBOvWrcO4ceMEtwn8PpwbP348Fi5ciF9//RVZWVkoLCzEkiVL1LKnC+j1OoaQhSFN09jYiMjISPzyyy+4fPlyt7AFPpiamsLU1BQ7duzAxIkTUVdXBxsbmxfWiY+Ph4mJCf74xz+q6zocHR05l4bKZDJ89tlnmDhxIpqamgb8bzkQ6HWP0XVh6Bk9LQxpkqKiIgQEBKCxsRHXr18XJIqsrCx4eHigvb1dmdfW1gYjIyNeR5oeOXIEGRkZsLa2hrW1NY4ePYqjR49y4ot6IycnBxs3buTs029ra4NYLBZ0lbVOMdhjOU3Dd2GID1BjjlFbW0symYyWLVtGnZ2dgttsamqiYcOG0dq1a6mtrY1KSkpowoQJtHLlSsG2iEitOUZZWRmZm5vTjh07qKOjg+7fv0+TJk2i5cuXq+WDLqDXPQbw+0ntcrkcI0aMwMSJEzFr1izExMQMWPtfffUVSktLcfz4cVhaWkIqlSoTH6RSKdLS0nD79m04OjoiKCgIb7zxhuBXzn3BxcUFZ8+eRUpKCmxtbeHv74+AgACVYd/6wkuxtZXBEIre9xgMhjowYTAYKmDCYDBUwITBYKiACYPBUAETBoOhAiYMBkMFTBhaQENDA6qrqwfbDUYXmDBeQEFBASIiIuDi4gILCwuMHDkSGzduVEbmikQiZGRk9Lkdd3d35OXlqV1fKpWqvQGJoRomjB7IysrC+PHjMXz4cNy8eRNNTU04f/48rl69ijfeeAOdnZ391tbjx4/7VL+5uRmBgYH95A0DgP4HEaqLl5eXykC9yspKCg0NpYKCAk5QoaurK3311VfKcunp6dT1zxsbG0suLi5kY2ND/v7+dPr0aSIiGj16NAEgExMT2rFjBxER/ec//6GAgACysrIiT09Pzkb/iIgIWrhwIXl4eJC9vb3y4LGufsTFxZGvry+Zm5uTr68v/fDDD8r6N27coKlTp5JUKqVx48bR1q1bydXVtZ/+avoDE4YKnv1nu3z58gvL8RXGDz/8QM7OzlRRUUEKhYISExPJ3t6e2tvbu9nJzs4mU1NTOnnyJMnlcsrMzCR7e3tKS0sjot+FIZVKKTc3V7kL8Xk/3N3dqbCwkFpaWigiIoLGjBlDREQNDQ3k4OBAMTEx1NraSjk5OSSTyZgwVMCGUip4NhF2cnLqF3smJiaora3FwYMHcfPmTbz//vuoqqqCoWH3yxoPHDiA0NBQvP3225BIJJgyZQo++OADTiTrpEmT4O3t3eOeiuXLl8Pd3R1mZmZ47733UFBQAAA4c+YMDAwM8Mknn8DY2Bg+Pj74y1/+0i/fUd9gwlCBs7MzAODhw4cqPxd6D/nkyZNx8uRJZGVlITAwEE5OTti6dSsUCkW3siUlJTh16pRyY5G1tTUSEhJQVlamLNP1cGNVdBW0oaGhcoNRWVkZZDIZxF2O4Gc38KqGCUMFrq6u8PHxQXJycrfPqqqq4OrqimPHjnHyJRIJZ5dd1wl1aWkpHB0dceHCBdTV1eHw4cPYtm0bzp8/382+i4sLli1bhvr6emUqKCjAuXPnlGVEIpHa36u0tJSzE+/+/ftq2dJ3mDB6ICEhAYcOHcKnn36KmpoaEBGys7Px1ltvwc/Pr9thBGPHjsXp06fx9OlTVFZWcg47+PnnnzFr1izcunULRkZGyvNX7e3tAfx+hmtDQwOA34dBR48exffffw+FQoHCwkJMnz4du3bt6vN3mjt3LhQKBeLi4tDe3o67d+9i586dfbarlwzyHEeruXbtGoWGhpKDgwOZm5vTyJEjaePGjcpzntBl0nv79m0KDAwkS0tL8vDwoMTERM5bqbi4OJLJZGRmZkYjRoygf/zjH8rP/vSnP5GpqSl9/PHHRESUmppKr776KllaWpKzszOtW7eO2traiEj11lQIeDt27do1CggIIDMzM/L19aWVK1fSqFGj+utPpjewHXwvETU1NcjPz8fUqVOVeQkJCUhKSkJmZuYgeqZ9sKHUS4RcLsdrr72mnNuUlJRg//79ePPNNwfZM+2D9RgvGadPn0ZMTAzu3bsHa2trLFu2DLGxsf12qJy+wITBYKiADaUYDBUwYTAYKmDCYDBUwITBYKiACYPBUAETBoOhAiYMBkMFTBgMhgr+H0sXjDRiEqvBAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "labels=['A', 'B', 'C', 'D', '0', '1', '2', '3', '4', '5']\n", "\n", "df = pd.DataFrame(sklearn.metrics.confusion_matrix(adata.obs['celltype'], adata.obs['steamboat_clusters'], labels=labels),\n", " columns=labels, index=labels).loc[['A', 'B', 'C', 'D'], ['0', '1', '2', '3', '4', '5']]\n", "df /= df.sum(axis=0)\n", "fig, ax = plt.subplots(figsize=(1.6, 1.0))\n", "sns.heatmap(df, linewidths=.5, ax=ax, cmap='Reds', square=True)\n", "ax.set_xlabel('Clustering')\n", "ax.set_ylabel('Cell type')\n", "if do_savefig:\n", " plt.savefig(savefig_path + 'sim-clusters-conf.pdf')" ] }, { "cell_type": "markdown", "id": "1ac1f65c-781f-4320-8678-18ef039dcd2b", "metadata": {}, "source": [ "### Segmentation" ] }, { "cell_type": "code", "execution_count": 21, "id": "bab0a58d-d49e-483f-8190-1a124755005b", "metadata": {}, "outputs": [], "source": [ "sf.tools.segment(adata, resolution=0.33)" ] }, { "cell_type": "code", "execution_count": 22, "id": "59c85115-3dea-4525-98db-fb8b32cc2d9e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING: Please specify a valid `library_id` or set it permanently in `adata.uns['spatial']`\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\lshh\\miniconda3\\envs\\py311_torch211_cuda121\\Lib\\site-packages\\squidpy\\pl\\_spatial_utils.py:946: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap', 'norm' will be ignored\n", " _cax = scatter(\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sq.pl.spatial_scatter(adata, color='steamboat_spatial_domain', shape=None, figsize=(3, 2), size=1., \n", " legend_fontsize=9, cmap='Reds', ncols=4)\n", "if do_savefig:\n", " plt.savefig(savefig_path + 'sim-sd.pdf')" ] }, { "cell_type": "code", "execution_count": 23, "id": "77374870-971e-4dfa-90ca-d838007fa961", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "labels=['A', 'B', 'C', 'D', '0', '1']\n", "\n", "df = pd.DataFrame(sklearn.metrics.confusion_matrix(adata.obs['celltype'], adata.obs['steamboat_spatial_domain'], labels=labels),\n", " columns=labels, index=labels).loc[['A', 'B', 'C', 'D'], ['0', '1']]\n", "df = df.div(df.sum(axis=1), axis=0)\n", "fig, ax = plt.subplots(figsize=(.7, 1.0))\n", "sns.heatmap(df, linewidths=.5, ax=ax, cmap='Reds', square=True)\n", "ax.set_xlabel('Spatial domain')\n", "ax.set_ylabel('Cell type')\n", "plt.savefig('sim-sd-conf.pdf')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }