1100 lines (1099 with data), 56.3 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# import libraries\n",
"import numpy as np\n",
"import pandas as pd\n",
"import scanpy as sc\n",
"import plotly.express as px"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Function to annotate cells\n",
"def annotate_cells(data, method=\"custom_gene_list\", gene_list=None, annotation_map=None, external_tool=\"CIBERSORT\", database_results=None):\n",
" \"\"\"\n",
" Annotates cells based on single-cell gene expression data.\n",
"\n",
" Parameters:\n",
" - data: AnnData object or DataFrame containing single-cell gene expression data.\n",
" - method: \"custom_gene_list\" or \"external_database\".\n",
" - gene_list: List of marker genes (required if method=\"custom_gene_list\").\n",
" - annotation_map: Dictionary mapping genes to cell types (required if method=\"custom_gene_list\").\n",
" - external_tool: Name of the external database/tool (e.g., \"CIBERSORT\", \"ImmuneCellAI\").\n",
" - database_results: Results from an external database (required if method=\"external_database\").\n",
"\n",
" Returns:\n",
" - data: Annotated AnnData/DataFrame with a new column \"annotations\".\n",
" \"\"\"\n",
" if method == \"custom_gene_list\":\n",
" if gene_list is None or annotation_map is None:\n",
" raise ValueError(\"A gene list and annotation map must be provided for the 'custom_gene_list' method.\")\n",
" print(\"Annotating cells using custom gene list...\")\n",
"\n",
" # Annotate cells by identifying the dominant cell type based on marker genes\n",
" annotations = []\n",
" for cell_idx in range(data.shape[0]):\n",
" cell_annotation = None\n",
" for gene in gene_list:\n",
" if gene in data.var_names:\n",
" if data[cell_idx, gene].X > 1: # Example threshold for gene expression\n",
" cell_annotation = annotation_map.get(gene, \"Unknown\")\n",
" break # Assign the first matching annotation\n",
" annotations.append(cell_annotation if cell_annotation else \"Unannotated\")\n",
" data.obs[\"annotations\"] = annotations\n",
"\n",
" elif method == \"external_database\":\n",
" if database_results is None:\n",
" raise ValueError(\"Database results must be provided for the 'external_database' method.\")\n",
" print(f\"Annotating cells using {external_tool} results...\")\n",
" data.obs[\"annotations\"] = database_results[\"cell_type\"]\n",
"\n",
" else:\n",
" raise ValueError(\"Invalid method. Choose either 'custom_gene_list' or 'external_database'.\")\n",
"\n",
" return data\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# UMAP Visualization Function\n",
"def visualize_annotations_on_umap(data, annotations_column=\"annotations\", n_pcs=50):\n",
" \"\"\"\n",
" Visualizes annotations on UMAP.\n",
"\n",
" Parameters:\n",
" - data: AnnData object or DataFrame containing UMAP coordinates and annotations.\n",
" - annotations_column: Name of the column containing cell annotations.\n",
" - n_pcs: Number of principal components to use for UMAP computation.\n",
"\n",
" Returns:\n",
" - fig: Plotly figure with annotated UMAP.\n",
" \"\"\"\n",
" # Ensure UMAP coordinates exist\n",
" if \"X_umap\" not in data.obsm.keys():\n",
" print(\"UMAP coordinates not found. Computing UMAP...\")\n",
"\n",
" # Reduce dimensions using PCA\n",
" print(f\"Reducing dimensionality to {n_pcs} principal components...\")\n",
" sc.pp.pca(data, n_comps=n_pcs)\n",
"\n",
" # Compute neighbors and UMAP\n",
" sc.pp.neighbors(data, use_rep=\"X_pca\") # Use PCA-reduced data\n",
" sc.tl.umap(data)\n",
"\n",
" umap_df = pd.DataFrame(data.obsm[\"X_umap\"], columns=[\"UMAP1\", \"UMAP2\"])\n",
" umap_df[annotations_column] = data.obs[annotations_column].values\n",
"\n",
" # Create Plotly UMAP visualization\n",
" fig = px.scatter(\n",
" umap_df,\n",
" x=\"UMAP1\",\n",
" y=\"UMAP2\",\n",
" color=annotations_column,\n",
" title=\"UMAP with Cell Annotations\",\n",
" labels={annotations_column: \"Cell Type\"},\n",
" )\n",
" fig.update_traces(marker=dict(size=5, opacity=0.8))\n",
" return fig\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Annotating cells using custom gene list...\n",
"UMAP coordinates not found. Computing UMAP...\n",
"Reducing dimensionality to 50 principal components...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jaydeepbhat/Documents/Hackathon/2024_AI_Agent/scripts/talk2cells/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n"
]
},
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"hovertemplate": "Cell Type=T cells<br>UMAP1=%{x}<br>UMAP2=%{y}<extra></extra>",
"legendgroup": "T cells",
"marker": {
"color": "#636efa",
"opacity": 0.8,
"size": 5,
"symbol": "circle"
},
"mode": "markers",
"name": "T cells",
"showlegend": true,
"type": "scattergl",
"x": {
"bdata": "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",
"dtype": "f4"
},
"xaxis": "x",
"y": {
"bdata": "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",
"dtype": "f4"
},
"yaxis": "y"
},
{
"hovertemplate": "Cell Type=B cells<br>UMAP1=%{x}<br>UMAP2=%{y}<extra></extra>",
"legendgroup": "B cells",
"marker": {
"color": "#EF553B",
"opacity": 0.8,
"size": 5,
"symbol": "circle"
},
"mode": "markers",
"name": "B cells",
"showlegend": true,
"type": "scattergl",
"x": {
"bdata": "QIQpQJWyH0AWM+ZAqZ6PPDZs+z/t5fE/xDw0PRDviEBUjLw/4HINv/UULz8qDSpA8bP4Pl8/Cj9eRLG+HFB5PjjXwz7Q8ok/qMdRvh+Ggj6aHJ2+BoANQIFsI0DPZgZABQk5QFD5oT+UVuw/d5JAQGAh/j0SQRY/MNruPh/xAbx3ZZI/0kL3PxwKqj+8WJZAp4jqvXLPjr60KLE+rmorv4x/REDC5Iw/9s9aPnG3Cz6zjOM/siEavQNfYD82DpA+wDiGPw83Pz3Jnva+hzqAP1cdyT+I19C9HlLSPyHixz/H2ZQ+h1yxvSNYMr2B1UY8MFEpQB9NRz/v0BtAtiyPP+hHub6comdA5LOSP79mZj4029s/N0u1PTae0D/Ljsg/XtwLvjz8Xr5mNvI/fBcUP1ClgT6GcZ0/OgOIPu6a7z+/IHm+ny/AP+tBIL5VxL4/bEPtvnXmnT+lMTQ/GXhFQLsWnT/qZpw+DSSGPwImub6YAQZAah7sPpogDUCDl4M+GHIRPjbc9b69v/Q/CI3nvuWbUUBp0OI/hg9GP2Bssz9ek5o+PVjKPx4WUEAIiCk+ZW5qP87yvD461Dw/29kEQYTdBUD4JNG+bav7PwrypT/H85k/5zmpP6ZkJr5v40dABQj3PqrH3z8HDfs/PAg3QDAXsj/Xrvk+Lnj/PdIjez/H5RS/xBIJvyoNmD+J4pk/dBsCQPAvtT0dTfo+ZvAwPjzdQT/p35FAvZIaPzdIzT4g+PA/r8kCQBKcgb4Fkqm+PmKfP4OIWD5otD8/ztZYPpocsz9vtTk/o2WsvUOhU77dAfA/1h72P7DR+j+p9Fw/PYyXvvHCrD+vdku/WPVePiAh+b0t5eQ/MR0cQFrh+z/AM9k+pJ4QQCPaAb9yODe+PWptQOXsF0B1Ncw/4UYcQI2sJD+azfW+ENlOvlMVyD/6Pi6+4SqPP1FQg76YlphAl8BJP00DxT4xqo4+tm53PxEHEkC3qUY+GZONQDNEWj+ZpFU+7pzHPy2Zdz/eYfO+SUUEQP6zFUFTzbi+cpAPP1Dw+77rfOI+K508P5Xsmj8kGkY+nWGmPxYwaUA9cg6+WYFQQDXhAT9S3NO7kCYqQJO9Cb6aTFm+kxfKvkEPZz/o5QQ+TyUBvnHdZj9SOv69/lAYP8JtwT84ladAA0nEP05o5kCcYB9ARKAiP4hpKT+9l4Y/bFmRQMOu8L3rv2M+ONAjP+6qzj+WK/4/AeilP9iT4Txp2lk/XnNCvnGACT8MEY0/M6GmPxBIeD9gP3e+5juQP5NmQD4GmuRA48iuP5iTO0Chkj4/ARsSv6iyHD/yat8/MC7pPbW/xj9u4x8/Dq8yP8lF8T+10HNAJQMXv0wzYj7bQJc+J+aYP+Vv5b0g+E0/XHKuvryCkL5QgvY+J/CDP1hgbUBSfyg9GTUQvjZbvD399aa9OrkRP4O5KT9khEg/dqO+P0wZwT1Bhw9AuYEJQKkWoT9n2ew/u6/HP3F2BL+z2hI/PYNaP74DxD84tP4+dp3cPqdDsj/Rgas/ZFWXP/w6XD9rkB2/ye87vlB87T/srao/R8AyPlLo0z6jdFc+qL2LPRV2oj+8WVY/QQa/P1RYvz4vvgZAlU8iP9TXmD97+Gs/Yc3YPyQKu75D5e0/tIA5P3bngbxnFfw/aVY/Pn+ViD/ipB6/AYQBP5OflEDljMQ/M9QkQLkYnD5VNEZAdQ7gPsty1j83el0/vlTlPwD1BkFL9L+9PkRRQKq9yT8Ex44/stkxP5/azz+qQXc9ezvAPxGpKz+NV1c/MuEcP58yA0CDWU1A2/BrP7KzAr/tUmBAO2X1Pl3eF78=",
"dtype": "f4"
},
"xaxis": "x",
"y": {
"bdata": "V+3MP6hHsz/Hw9rAz0orQIqFhj9JSwRAfVIWQPmyN0FORAVAv0IAQOhRpj9UCaQ/HICTP4rB4j/Ec48/NQeNP9Nzlj9+1ApBVCwAQFv3jD+GiF8/Vr/XP1w3nD8LkLk/bl7jQFIjmz9SmpU/tMvlQAnFnT82ryA/eqLKPzcOoT8zMHE/xcOFP8xsBkCCMUZBzfPFP5IBaj+pqwxA+3S5P6q/nT/5mPE/s1jgPx0llj/UiuQ/ysqbP27rCT82h9A+v3IlPwE6Lz+xatI/1E3/P5mTuj/Ou5s/q34wPyxwM0GAvus/1eqpP2vbPD/naBJAX//AP3RypD8QB+k/FqzlP0SSij8BX8pA85sEQAkO9j+JIBJAN9SkP8ICrD8mAXY/f4j+P/IDkj9394I/d7GqP5kIE0CtYqg/AZgmP4TWgj8PvyVAnmG7P4ZgcT+5v2c/CfcUQN1i2D+eMa8/5QUCQZYspD8Fcbo/i6KaPy+fhj+KBMI/y/66PwLl4T+JSx4/XdNjP0CH5z/sHtc/MuMGQA+hJkFJ2sg/Rtr3P/0Nvj8cYxRAtsSSP5ojcT6M99E/LNaPP89tgz+oKbY/RgmrwLl/nD+gkZo/fNreP3WwFUAzbh7Ad2d2P6tnG0BuBZg/dbITQDBuVj/gM6E/IZ4gQXDUUj/r83Y/Z0XUPwzaNj8i1LU/e8aiP4mp3T8QSwFARuzUPwzYEEB/A8Q/eASVP41f3z+AS7I7WWpvP1XFFkHyuOs/RHSmPxYrpD/DzxlBtXyKP7VAGUB63J0/dm8/PyHxgz+SzQlAPo4zP2V3KT9QEZc/N/UEQOVgnD+YJqo/m2nEP/thBkADagRAGYnOPxrIwD9pYa4/6mbZPwdl6j888aM/q06uP+l8yj8MZA1Ajdl5PwwNzj/9uwlA2qtlP+B98T/xEek/zth0PxFSWz9aY2E/GicDP++RKUAuRkJBth1UPwS+lD8FTqU//dWcPxkHmj8W8nM/Z34/Qc6tID8fLPU/YRP1P4Z1/T9gpBlAyJQEQAtp38DUZqk/Dk6vPwN38T8qCwNA2nrhP5FoBkBhYe4//E9VP7iXRkEIGvU/6tEdP5yIUz/qouQ/7XmWPzt6QD+Vy5Y/TLcKQc0z1T+wD+w//dYnQEkUrT86y8g/o8bpP8Tk/0DVuHXAIf5nP2rIM8CZCLE/xVrXP6Mm5j9tyQ0/n9oqPT3NJT+K92A/efEHQLYDDEHL+bw/BiS/P3/+gz8fKOE/whgDQDWwRD/pkbM/3hXSP3iy4j+K/wJAZKGJP8UX7D91a0zA19XvP3uBkD/LfOg/+C+mP9liqD8r/tc/ylTVP50gwj+cH9Y/LTaOP1uqqD/sjSRBZxr4P+YC2D/Phbw/242zP9Vtvz+DAv8/vDR6P+AlDkCG+Fg/5oemP6nwTz8vQRtAGVXTP1+Wnz/KxWw/ZNQfQMChvj+ON9I/WI2iP506jD8sU9U/9NK3P/OioD8Tl2zAmJbkP7/U7j/zNRdAue+bPyZ6Oj8HppA/XNwuQG4vDkBSr1w/IKkEQOYlRz9GKCFAdOgQQMFGE0ApWQRA8bE9P2nr/D98N6w/7eb8P/026j+Nfa8/LrfLP2LKbj/MGa4/dGQbP2MyyD9Td0s/xu0MQLhV0D8IHLI/TQYhP+S9CUBvKRZBvWeoP3FaDEAf1as/LpgPQFB89L36vYo/uvzIPxi7TD/knSJBizctP+aIBkALCsc/EQrXP3XCZsAVjBBBHYwSQRHgsD+KPRPAOCkcQOZoCEDkOKs/NJuYP24zFEABWbs/CZn4P0MmcD+TLuBAg9woP0VuaT/QN4M/I4UEP5JS2D8=",
"dtype": "f4"
},
"yaxis": "y"
},
{
"hovertemplate": "Cell Type=Monocytes<br>UMAP1=%{x}<br>UMAP2=%{y}<extra></extra>",
"legendgroup": "Monocytes",
"marker": {
"color": "#00cc96",
"opacity": 0.8,
"size": 5,
"symbol": "circle"
},
"mode": "markers",
"name": "Monocytes",
"showlegend": true,
"type": "scattergl",
"x": {
"bdata": "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",
"dtype": "f4"
},
"xaxis": "x",
"y": {
"bdata": "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",
"dtype": "f4"
},
"yaxis": "y"
},
{
"hovertemplate": "Cell Type=Unannotated<br>UMAP1=%{x}<br>UMAP2=%{y}<extra></extra>",
"legendgroup": "Unannotated",
"marker": {
"color": "#ab63fa",
"opacity": 0.8,
"size": 5,
"symbol": "circle"
},
"mode": "markers",
"name": "Unannotated",
"showlegend": true,
"type": "scattergl",
"x": {
"bdata": "R9ipP5tqtEBoah9BCITUPyiwT0CxvAVBLRjkPz71ML/FI9Y/yXsuQI2IyD9mZJlA7VcNQeEqBkDCygJBYSGtP+bPC0FCO1pBGWz9QF2WhT+6e5C+sVhwQLB3A0CPteNA+GxBP6XyAEBTIhpBtXfBQOy98T+P+ONAZFrtP21GFEEO2Xk/EZX9QDBOmz+T9/1ARC/0QBYKL0DcTVxBy3piQKsfD0Fh81pAwY8LQHEG8UDD3uFAtfjtQBttsz/GIeZA9X/qQOwwxEAbg4Q/VfI9vy1+kL65yhdBKvjNP+rJG0HKy6c/++ESQMFDF0FYGSZAYRDsQD8XDUEJaANAc+g4P7RuJEDxRBJBIgWvQHdVDEGrloY//eGtQOk05j/TicZALO6+QPUUDkDKa74/PwnrQINgdT+B4pM/USQUPy9C2UCm4CNBR+0+Psjhnj8knltAPPj+P1hMAEC/VN9ACvzxP1CqVEABKMVAcxYUQXFtVkDElIU/g6UYQe3JxD9QUxhBQ+/vPzCaH0FmxRhBRdDCQIri70BQbdk/3FscQYHptj/YqltBX237QBBMFUGHRtg/zhgYPrGj70AhLiNAlmvrQPgcdj+oY+ZAGyITQUgmW0HyHZg/lgTKQBSkrD8gxNa+ZzhEQDXMHUGXpKlAmDQQQWEFCkG0/bU/j0SHPgtjyEBKPAFBUxeDvoTu3T9HFu1AaUOQQF41A0FI9VxBKp9LP67A1D/DXwhB5CL2QPA5DkFqThJB3SqwP2BTTkDSvyhAnJ/5QON9BEF73hBAV/CPQIbGWkHqmZQ/OjUDQcpb7UD2wvE/5+SkP3Zj6kCylFxBhKgOQDzmH0E1pMBAnepsQKDmuT8xlYo9J0zDQLZDiT+phdc/bT8KQBjRCr7PFRBBBIsJQSkB6kB6vGg/StesP7c3eEDVA3JAOT3sQIJcCb/MWLhAhrbsPwEzgkDwmOQ/yBXsQKxV0z+P5vBAl5WjP4+tGkHsURNAeCmWPOOT0EDdQqxArlkIQQ/mnkAiatM/4JCtPxXwvUDpIMhAZTL0P4QXrD/dhbBALT+NP5++7j9xR7s/QAJBQAjta0A=",
"dtype": "f4"
},
"xaxis": "x",
"y": {
"bdata": "vZ02wN9gsMD/BtXAh6g0wEcdP0FDvTrAncQ2wJtLyz8m3DnAazJ4wMUoW8B+OofAT23PwB+0ZsA+IN/ATmxnwE5xl8BDPixBGDlDwBmfSMBRRCFBuzVHwDPwXsBrqF7AZy8wwDgYScBte6vAa8bTwCarM8Da0ODAANoxwEIxF8COCUrA80vFwCtjUMDZKdXAKCAuwKFINMALPipBvOFHwLfVhMCGAjnAIyIywC4yUcAZ0sDAloq5wCLGJ8CBPOnARgUIwGKVscA5oy3As+jMP+jMKUDPl4/A7stgwJavw8AHGU7AkhR7wCBASMDiezjAojeDwHGVwsDPmjvANcy8P2AuP8DaUp7AI6GYwCArlsC8gEbACm07wEtkPMBtQ9vA7sjiwOlKSMDBZXHAxmaowPziPcDt4jXAdVsKQPX4jsBM96jAuO+vP1APbMCSp4XALsJqwBn8Q8BeYbDA1oZJwCgbL8CTdLHAYQfRwLovPsCOzyvAdhlbwL88R8CTP4TATpRgwPtL4MCpNaHAmhqxwBmJosBaeTHAiPWFwB6KN8CA8StB2QsmwBjVrMBcmVHA1MwqQJyE/r/hiV7AmBUpwG6hOsCr5NzAGqnBwEYzK0FeUzzA7JqpwKlta8CJhg1A6WoxwF1b0cCkgjDAPTjUwGquh8BBo2HAg6YaQP1UkcAh+xfARdb8P66VWcDjyWLAvYmWwInF7MCwnylBn95MwHBpc8B/YXHAE7lawM9pjcDSh9zAC9lEwHtuLsAShjbArJsXwArTgsAi0EXASPyEwHtAK0H05VLAPRjUwAxU+7/f6mbAnwhRwJ/M4sCO9ilByTf7v9wXsMCZ2+DA7HQ2wFZkU8DvMQFAzCG2wK8DX8CpZh/AuPJawJ3Nsz+2P1jA38umwNBL6cA0/UfAcElmwCNtocCZYFHAf4niwO5y0z8itLjAkEIXwN2ifcAOBivAUuC0wPSmUMBXjKDAG6xTwH5u5MBj0XPANJ/8P/ip4cBwnZDAawBCwBlcOcBiPTnADSo8wAJ/5MACocLA0X5vwFf7OcB15o3A5jg4wKioScCSNh7ArVw7QTL/pz8=",
"dtype": "f4"
},
"yaxis": "y"
}
],
"layout": {
"legend": {
"title": {
"text": "Cell Type"
},
"tracegroupgap": 0
},
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermap": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermap"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"sequentialminus": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"title": {
"text": "UMAP with Cell Annotations"
},
"xaxis": {
"anchor": "y",
"domain": [
0,
1
],
"title": {
"text": "UMAP1"
}
},
"yaxis": {
"anchor": "x",
"domain": [
0,
1
],
"title": {
"text": "UMAP2"
}
}
}
}
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Example Usage\n",
"if __name__ == \"__main__\":\n",
" # Load example single-cell data (AnnData format)\n",
" adata = sc.datasets.pbmc3k() # Example dataset\n",
" sc.pp.normalize_total(adata, target_sum=1e4)\n",
" sc.pp.log1p(adata)\n",
"\n",
" # Example custom gene list and annotation map\n",
" example_gene_list = [\"CD3D\", \"CD79A\", \"LYZ\"] # Example marker genes for T-cells, B-cells, Monocytes\n",
" annotation_map = {\n",
" \"CD3D\": \"T cells\",\n",
" \"CD79A\": \"B cells\",\n",
" \"LYZ\": \"Monocytes\"\n",
" }\n",
"\n",
" # Annotate cells\n",
" adata = annotate_cells(adata, method=\"custom_gene_list\", gene_list=example_gene_list, annotation_map=annotation_map)\n",
"\n",
" # Visualize annotations on UMAP\n",
" fig = visualize_annotations_on_umap(adata, annotations_column=\"annotations\", n_pcs=50)\n",
" fig.show()\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "talk2cells",
"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.11"
}
},
"nbformat": 4,
"nbformat_minor": 2
}