{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 4_ctx_layer56_and_th_correlation" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import anndata\n", "import scanpy as sc\n", "from tqdm import tqdm\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import warnings\n", "import seaborn as sns\n", "from scipy.cluster.hierarchy import fcluster, linkage\n", "import matplotlib as mpl\n", "mpl.rcParams['pdf.fonttype'] = 42\n", "mpl.rcParams['ps.fonttype'] = 42\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "ctx_regions = ['ACAd', 'ACAv', 'PL', 'ILA', 'ORBl', 'ORBvl', 'AId', 'SSs', 'SSp-bfd', 'SSp-ll', 'SSp-ul', 'SSp-n', 'SSp-m', 'MOp',\n", " 'MOs', 'VISal', 'VISl', 'VISp', 'VISpor', 'VISrl', 'VISam', 'VISpm', 'RSPd', 'RSPv', 'AUDp']\n", "th_regions = ['VPL', 'VPM', 'PO', 'PoT', 'VPMpc', 'VPLpc', 'SPFp',\n", " 'MG', 'PIL', 'PP', 'SGN', 'AD', 'AV', 'LD', 'LP', 'VAL', 'PF', 'CL',\n", " 'SubG', 'LGv', 'IGL', 'POL', 'MD', 'IMD', 'CM', 'SMT',\n", " 'SPA', 'VM', 'PCN', 'PVT', 'PT', 'RE', 'SPFm', 'Xi', 'RH', 'IAM', 'PR',\n", " 'LH', 'MH', 'IAD', 'RT']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
brain_section_labelxyzx_ccfy_ccfz_ccfregioncell_type
cell_label
198904341065180396762707397604803217407Zhuang-ABCA-3.02349.20685344.87763412.1681554.9206854.4877631.216815SSs133 Vascular
252199681526991424029643077826220097990Zhuang-ABCA-3.02348.97399244.81376112.1790064.8973994.4813761.217901SSs133 Vascular
277720971126854564514249564750701518375Zhuang-ABCA-3.02348.79106644.57772212.1927074.8791074.4577721.219271SSs133 Vascular
31551867344111790264292067056219852271Zhuang-ABCA-3.02348.83048944.42612012.1950784.8830494.4426121.219508SSs133 Vascular
131102494428104399865219008178262036485Zhuang-ABCA-3.02348.30884343.02815612.2678794.8308844.3028161.226788SSs134 Immune
..............................
318102106429791409781741726367984532777Zhuang-ABCA-3.009131.09071669.33427541.43674313.1090726.9334274.143674MDRNd30 Astro-Epen
35262847161560382172299767067854387528Zhuang-ABCA-3.009131.21603269.49407041.35103413.1216036.9494074.135103MDRNd33 Vascular
75415866509570969932943497000463821106Zhuang-ABCA-3.009131.41515270.76450440.80040313.1415157.0764504.080040sctd24 MY Glut
12350978322417280063239916106423065862Zhuang-ABCA-3.009131.64616771.18255740.59599513.1646177.1182564.059599sctd24 MY Glut
327554758863546024460748891922509519354Zhuang-ABCA-3.009131.65889271.41467540.50135613.1658897.1414684.050136sctd24 MY Glut
\n", "

1566842 rows × 9 columns

\n", "
" ], "text/plain": [ " brain_section_label x \\\n", "cell_label \n", "198904341065180396762707397604803217407 Zhuang-ABCA-3.023 49.206853 \n", "252199681526991424029643077826220097990 Zhuang-ABCA-3.023 48.973992 \n", "277720971126854564514249564750701518375 Zhuang-ABCA-3.023 48.791066 \n", "31551867344111790264292067056219852271 Zhuang-ABCA-3.023 48.830489 \n", "131102494428104399865219008178262036485 Zhuang-ABCA-3.023 48.308843 \n", "... ... ... \n", "318102106429791409781741726367984532777 Zhuang-ABCA-3.009 131.090716 \n", "35262847161560382172299767067854387528 Zhuang-ABCA-3.009 131.216032 \n", "75415866509570969932943497000463821106 Zhuang-ABCA-3.009 131.415152 \n", "12350978322417280063239916106423065862 Zhuang-ABCA-3.009 131.646167 \n", "327554758863546024460748891922509519354 Zhuang-ABCA-3.009 131.658892 \n", "\n", " y z x_ccf \\\n", "cell_label \n", "198904341065180396762707397604803217407 44.877634 12.168155 4.920685 \n", "252199681526991424029643077826220097990 44.813761 12.179006 4.897399 \n", "277720971126854564514249564750701518375 44.577722 12.192707 4.879107 \n", "31551867344111790264292067056219852271 44.426120 12.195078 4.883049 \n", "131102494428104399865219008178262036485 43.028156 12.267879 4.830884 \n", "... ... ... ... \n", "318102106429791409781741726367984532777 69.334275 41.436743 13.109072 \n", "35262847161560382172299767067854387528 69.494070 41.351034 13.121603 \n", "75415866509570969932943497000463821106 70.764504 40.800403 13.141515 \n", "12350978322417280063239916106423065862 71.182557 40.595995 13.164617 \n", "327554758863546024460748891922509519354 71.414675 40.501356 13.165889 \n", "\n", " y_ccf z_ccf region \\\n", "cell_label \n", "198904341065180396762707397604803217407 4.487763 1.216815 SSs1 \n", "252199681526991424029643077826220097990 4.481376 1.217901 SSs1 \n", "277720971126854564514249564750701518375 4.457772 1.219271 SSs1 \n", "31551867344111790264292067056219852271 4.442612 1.219508 SSs1 \n", "131102494428104399865219008178262036485 4.302816 1.226788 SSs1 \n", "... ... ... ... \n", "318102106429791409781741726367984532777 6.933427 4.143674 MDRNd \n", "35262847161560382172299767067854387528 6.949407 4.135103 MDRNd \n", "75415866509570969932943497000463821106 7.076450 4.080040 sctd \n", "12350978322417280063239916106423065862 7.118256 4.059599 sctd \n", "327554758863546024460748891922509519354 7.141468 4.050136 sctd \n", "\n", " cell_type \n", "cell_label \n", "198904341065180396762707397604803217407 33 Vascular \n", "252199681526991424029643077826220097990 33 Vascular \n", "277720971126854564514249564750701518375 33 Vascular \n", "31551867344111790264292067056219852271 33 Vascular \n", "131102494428104399865219008178262036485 34 Immune \n", "... ... \n", "318102106429791409781741726367984532777 30 Astro-Epen \n", "35262847161560382172299767067854387528 33 Vascular \n", "75415866509570969932943497000463821106 24 MY Glut \n", "12350978322417280063239916106423065862 24 MY Glut \n", "327554758863546024460748891922509519354 24 MY Glut \n", "\n", "[1566842 rows x 9 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata_raw = sc.read_h5ad('/mnt/Data16Tc/home/haichao/code/SpaCon/Data/N_20231213_zxw/mouse_3/adata_processed.h5ad')\n", "allen_region = pd.read_csv('/mnt/Data16Tc/home/haichao/code/SpaCon/Data/N_20231213_zxw/mouse_3/allen_region.csv')\n", "adata_raw.obs['region'] = allen_region['region'].values\n", "# add cell type\n", "meta = pd.read_csv('/mnt/Data16Tc/home/haichao/code/SpaCon/Data/N_20231213_zxw/mouse_3/cell_metadata_with_cluster_annotation.csv')\n", "meta = meta.set_index('cell_label')\n", "meta = meta.loc[adata_raw.obs.index.to_list()]\n", "adata_raw.obs['cell_type'] = meta['class'].to_list()\n", "adata_raw.obs" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
brain_section_labelxyzx_ccfy_ccfz_ccfregioncell_type
cell_label
29162871883387929795006067736640436040Zhuang-ABCA-3.02361.66689842.25591212.2326136.1666904.2255911.223261SSs501 IT-ET Glut
293032136699589827732370249746624703959Zhuang-ABCA-3.02362.39684041.83830712.2164306.2396844.1838311.221643SSs501 IT-ET Glut
169008133492981499504077797165914124518Zhuang-ABCA-3.02364.99484140.39460812.1610296.4994844.0394611.216103SSs501 IT-ET Glut
227494694293280194589855295428860091482Zhuang-ABCA-3.02364.49858640.61108912.1755376.4498594.0611091.217554SSs501 IT-ET Glut
33873656525375865261837620890496116573Zhuang-ABCA-3.02364.28210341.05924912.1758006.4282104.1059251.217580SSs501 IT-ET Glut
..............................
229580843941555951333299912014571135110Zhuang-ABCA-3.00997.42963810.57547838.3817069.7429641.0575483.838171VISp501 IT-ET Glut
248292745152448671917314233790662445907Zhuang-ABCA-3.00997.15079311.54945538.2846279.7150791.1549453.828463VISp501 IT-ET Glut
329636896424947842904418891891676096227Zhuang-ABCA-3.00997.09882210.81695238.3506289.7098821.0816953.835063VISp501 IT-ET Glut
210578552686403511812793479380810073674Zhuang-ABCA-3.00998.29886811.67421138.3113679.8298871.1674213.831137VISp501 IT-ET Glut
5967642066674772504918301827478668961Zhuang-ABCA-3.00998.35423512.39957038.2591309.8354231.2399573.825913VISp501 IT-ET Glut
\n", "

60861 rows × 9 columns

\n", "
" ], "text/plain": [ " brain_section_label x \\\n", "cell_label \n", "29162871883387929795006067736640436040 Zhuang-ABCA-3.023 61.666898 \n", "293032136699589827732370249746624703959 Zhuang-ABCA-3.023 62.396840 \n", "169008133492981499504077797165914124518 Zhuang-ABCA-3.023 64.994841 \n", "227494694293280194589855295428860091482 Zhuang-ABCA-3.023 64.498586 \n", "33873656525375865261837620890496116573 Zhuang-ABCA-3.023 64.282103 \n", "... ... ... \n", "229580843941555951333299912014571135110 Zhuang-ABCA-3.009 97.429638 \n", "248292745152448671917314233790662445907 Zhuang-ABCA-3.009 97.150793 \n", "329636896424947842904418891891676096227 Zhuang-ABCA-3.009 97.098822 \n", "210578552686403511812793479380810073674 Zhuang-ABCA-3.009 98.298868 \n", "5967642066674772504918301827478668961 Zhuang-ABCA-3.009 98.354235 \n", "\n", " y z x_ccf \\\n", "cell_label \n", "29162871883387929795006067736640436040 42.255912 12.232613 6.166690 \n", "293032136699589827732370249746624703959 41.838307 12.216430 6.239684 \n", "169008133492981499504077797165914124518 40.394608 12.161029 6.499484 \n", "227494694293280194589855295428860091482 40.611089 12.175537 6.449859 \n", "33873656525375865261837620890496116573 41.059249 12.175800 6.428210 \n", "... ... ... ... \n", "229580843941555951333299912014571135110 10.575478 38.381706 9.742964 \n", "248292745152448671917314233790662445907 11.549455 38.284627 9.715079 \n", "329636896424947842904418891891676096227 10.816952 38.350628 9.709882 \n", "210578552686403511812793479380810073674 11.674211 38.311367 9.829887 \n", "5967642066674772504918301827478668961 12.399570 38.259130 9.835423 \n", "\n", " y_ccf z_ccf region \\\n", "cell_label \n", "29162871883387929795006067736640436040 4.225591 1.223261 SSs5 \n", "293032136699589827732370249746624703959 4.183831 1.221643 SSs5 \n", "169008133492981499504077797165914124518 4.039461 1.216103 SSs5 \n", "227494694293280194589855295428860091482 4.061109 1.217554 SSs5 \n", "33873656525375865261837620890496116573 4.105925 1.217580 SSs5 \n", "... ... ... ... \n", "229580843941555951333299912014571135110 1.057548 3.838171 VISp5 \n", "248292745152448671917314233790662445907 1.154945 3.828463 VISp5 \n", "329636896424947842904418891891676096227 1.081695 3.835063 VISp5 \n", "210578552686403511812793479380810073674 1.167421 3.831137 VISp5 \n", "5967642066674772504918301827478668961 1.239957 3.825913 VISp5 \n", "\n", " cell_type \n", "cell_label \n", "29162871883387929795006067736640436040 01 IT-ET Glut \n", "293032136699589827732370249746624703959 01 IT-ET Glut \n", "169008133492981499504077797165914124518 01 IT-ET Glut \n", "227494694293280194589855295428860091482 01 IT-ET Glut \n", "33873656525375865261837620890496116573 01 IT-ET Glut \n", "... ... \n", "229580843941555951333299912014571135110 01 IT-ET Glut \n", "248292745152448671917314233790662445907 01 IT-ET Glut \n", "329636896424947842904418891891676096227 01 IT-ET Glut \n", "210578552686403511812793479380810073674 01 IT-ET Glut \n", "5967642066674772504918301827478668961 01 IT-ET Glut \n", "\n", "[60861 rows x 9 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata_th = adata_raw[adata_raw.obs['region'].isin(th_regions)]\n", "adata_th = adata_th[adata_th.obs['cell_type'].str.contains('Glut')]\n", "\n", "adata_ctx = adata_raw[(adata_raw.obs['region'].str.startswith(tuple(ctx_regions))) & (adata_raw.obs['region'].str.contains('5|6'))]\n", "adata_ctx = adata_ctx[adata_ctx.obs['cell_type'].str.contains('Glut')]\n", "adata_ctx.obs" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
brain_section_labelxyzx_ccfy_ccfz_ccfregioncell_type
cell_label
29162871883387929795006067736640436040Zhuang-ABCA-3.02361.66689842.25591212.2326136.1666904.2255911.223261SSs501 IT-ET Glut
293032136699589827732370249746624703959Zhuang-ABCA-3.02362.39684041.83830712.2164306.2396844.1838311.221643SSs501 IT-ET Glut
169008133492981499504077797165914124518Zhuang-ABCA-3.02364.99484140.39460812.1610296.4994844.0394611.216103SSs501 IT-ET Glut
227494694293280194589855295428860091482Zhuang-ABCA-3.02364.49858640.61108912.1755376.4498594.0611091.217554SSs501 IT-ET Glut
33873656525375865261837620890496116573Zhuang-ABCA-3.02364.28210341.05924912.1758006.4282104.1059251.217580SSs501 IT-ET Glut
..............................
137125155786416424728071422508382942054Zhuang-ABCA-3.00986.48043034.09420337.2487288.6480433.4094203.724873SGN19 MB Glut
186321231466624970722021094909324401885Zhuang-ABCA-3.00986.44397735.01582237.2910438.6443983.5015823.729104POL19 MB Glut
262284519603134366801326445274337827961Zhuang-ABCA-3.00986.38898932.86651837.2127568.6388993.2866523.721276SGN19 MB Glut
33608739852097367198466784523454261485Zhuang-ABCA-3.00986.90420434.75289637.2685678.6904203.4752903.726857POL19 MB Glut
303385550649730012456703013017610179856Zhuang-ABCA-3.00988.38951037.02436937.4008118.8389513.7024373.740081POL19 MB Glut
\n", "

71462 rows × 9 columns

\n", "
" ], "text/plain": [ " brain_section_label x \\\n", "cell_label \n", "29162871883387929795006067736640436040 Zhuang-ABCA-3.023 61.666898 \n", "293032136699589827732370249746624703959 Zhuang-ABCA-3.023 62.396840 \n", "169008133492981499504077797165914124518 Zhuang-ABCA-3.023 64.994841 \n", "227494694293280194589855295428860091482 Zhuang-ABCA-3.023 64.498586 \n", "33873656525375865261837620890496116573 Zhuang-ABCA-3.023 64.282103 \n", "... ... ... \n", "137125155786416424728071422508382942054 Zhuang-ABCA-3.009 86.480430 \n", "186321231466624970722021094909324401885 Zhuang-ABCA-3.009 86.443977 \n", "262284519603134366801326445274337827961 Zhuang-ABCA-3.009 86.388989 \n", "33608739852097367198466784523454261485 Zhuang-ABCA-3.009 86.904204 \n", "303385550649730012456703013017610179856 Zhuang-ABCA-3.009 88.389510 \n", "\n", " y z x_ccf \\\n", "cell_label \n", "29162871883387929795006067736640436040 42.255912 12.232613 6.166690 \n", "293032136699589827732370249746624703959 41.838307 12.216430 6.239684 \n", "169008133492981499504077797165914124518 40.394608 12.161029 6.499484 \n", "227494694293280194589855295428860091482 40.611089 12.175537 6.449859 \n", "33873656525375865261837620890496116573 41.059249 12.175800 6.428210 \n", "... ... ... ... \n", "137125155786416424728071422508382942054 34.094203 37.248728 8.648043 \n", "186321231466624970722021094909324401885 35.015822 37.291043 8.644398 \n", "262284519603134366801326445274337827961 32.866518 37.212756 8.638899 \n", "33608739852097367198466784523454261485 34.752896 37.268567 8.690420 \n", "303385550649730012456703013017610179856 37.024369 37.400811 8.838951 \n", "\n", " y_ccf z_ccf region \\\n", "cell_label \n", "29162871883387929795006067736640436040 4.225591 1.223261 SSs5 \n", "293032136699589827732370249746624703959 4.183831 1.221643 SSs5 \n", "169008133492981499504077797165914124518 4.039461 1.216103 SSs5 \n", "227494694293280194589855295428860091482 4.061109 1.217554 SSs5 \n", "33873656525375865261837620890496116573 4.105925 1.217580 SSs5 \n", "... ... ... ... \n", "137125155786416424728071422508382942054 3.409420 3.724873 SGN \n", "186321231466624970722021094909324401885 3.501582 3.729104 POL \n", "262284519603134366801326445274337827961 3.286652 3.721276 SGN \n", "33608739852097367198466784523454261485 3.475290 3.726857 POL \n", "303385550649730012456703013017610179856 3.702437 3.740081 POL \n", "\n", " cell_type \n", "cell_label \n", "29162871883387929795006067736640436040 01 IT-ET Glut \n", "293032136699589827732370249746624703959 01 IT-ET Glut \n", "169008133492981499504077797165914124518 01 IT-ET Glut \n", "227494694293280194589855295428860091482 01 IT-ET Glut \n", "33873656525375865261837620890496116573 01 IT-ET Glut \n", "... ... \n", "137125155786416424728071422508382942054 19 MB Glut \n", "186321231466624970722021094909324401885 19 MB Glut \n", "262284519603134366801326445274337827961 19 MB Glut \n", "33608739852097367198466784523454261485 19 MB Glut \n", "303385550649730012456703013017610179856 19 MB Glut \n", "\n", "[71462 rows x 9 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata = anndata.concat([adata_ctx, adata_th])\n", "adata.obs" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 71462 × 1122\n", " obs: 'brain_section_label', 'x', 'y', 'z', 'x_ccf', 'y_ccf', 'z_ccf', 'region', 'cell_type'\n", " uns: 'log1p'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sc.pp.normalize_total(adata, target_sum=1e4)\n", "sc.pp.log1p(adata)\n", "adata" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### ctx layer56 th correlation" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#### L5/L6 corr" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
brain_section_labelxyzx_ccfy_ccfz_ccfregioncell_typesubregion
cell_label
29162871883387929795006067736640436040Zhuang-ABCA-3.02361.66689842.25591212.2326136.1666904.2255911.223261SSs501 IT-ET GlutSSs5_16
293032136699589827732370249746624703959Zhuang-ABCA-3.02362.39684041.83830712.2164306.2396844.1838311.221643SSs501 IT-ET GlutSSs5_16
169008133492981499504077797165914124518Zhuang-ABCA-3.02364.99484140.39460812.1610296.4994844.0394611.216103SSs501 IT-ET GlutSSs5_15
227494694293280194589855295428860091482Zhuang-ABCA-3.02364.49858640.61108912.1755376.4498594.0611091.217554SSs501 IT-ET GlutSSs5_15
33873656525375865261837620890496116573Zhuang-ABCA-3.02364.28210341.05924912.1758006.4282104.1059251.217580SSs501 IT-ET GlutSSs5_15
.................................
137125155786416424728071422508382942054Zhuang-ABCA-3.00986.48043034.09420337.2487288.6480433.4094203.724873SGN19 MB GlutSGN_1
186321231466624970722021094909324401885Zhuang-ABCA-3.00986.44397735.01582237.2910438.6443983.5015823.729104POL19 MB GlutPOL_1
262284519603134366801326445274337827961Zhuang-ABCA-3.00986.38898932.86651837.2127568.6388993.2866523.721276SGN19 MB GlutSGN_1
33608739852097367198466784523454261485Zhuang-ABCA-3.00986.90420434.75289637.2685678.6904203.4752903.726857POL19 MB GlutPOL_1
303385550649730012456703013017610179856Zhuang-ABCA-3.00988.38951037.02436937.4008118.8389513.7024373.740081POL19 MB GlutPOL_1
\n", "

71462 rows × 10 columns

\n", "
" ], "text/plain": [ " brain_section_label x \\\n", "cell_label \n", "29162871883387929795006067736640436040 Zhuang-ABCA-3.023 61.666898 \n", "293032136699589827732370249746624703959 Zhuang-ABCA-3.023 62.396840 \n", "169008133492981499504077797165914124518 Zhuang-ABCA-3.023 64.994841 \n", "227494694293280194589855295428860091482 Zhuang-ABCA-3.023 64.498586 \n", "33873656525375865261837620890496116573 Zhuang-ABCA-3.023 64.282103 \n", "... ... ... \n", "137125155786416424728071422508382942054 Zhuang-ABCA-3.009 86.480430 \n", "186321231466624970722021094909324401885 Zhuang-ABCA-3.009 86.443977 \n", "262284519603134366801326445274337827961 Zhuang-ABCA-3.009 86.388989 \n", "33608739852097367198466784523454261485 Zhuang-ABCA-3.009 86.904204 \n", "303385550649730012456703013017610179856 Zhuang-ABCA-3.009 88.389510 \n", "\n", " y z x_ccf \\\n", "cell_label \n", "29162871883387929795006067736640436040 42.255912 12.232613 6.166690 \n", "293032136699589827732370249746624703959 41.838307 12.216430 6.239684 \n", "169008133492981499504077797165914124518 40.394608 12.161029 6.499484 \n", "227494694293280194589855295428860091482 40.611089 12.175537 6.449859 \n", "33873656525375865261837620890496116573 41.059249 12.175800 6.428210 \n", "... ... ... ... \n", "137125155786416424728071422508382942054 34.094203 37.248728 8.648043 \n", "186321231466624970722021094909324401885 35.015822 37.291043 8.644398 \n", "262284519603134366801326445274337827961 32.866518 37.212756 8.638899 \n", "33608739852097367198466784523454261485 34.752896 37.268567 8.690420 \n", "303385550649730012456703013017610179856 37.024369 37.400811 8.838951 \n", "\n", " y_ccf z_ccf region \\\n", "cell_label \n", "29162871883387929795006067736640436040 4.225591 1.223261 SSs5 \n", "293032136699589827732370249746624703959 4.183831 1.221643 SSs5 \n", "169008133492981499504077797165914124518 4.039461 1.216103 SSs5 \n", "227494694293280194589855295428860091482 4.061109 1.217554 SSs5 \n", "33873656525375865261837620890496116573 4.105925 1.217580 SSs5 \n", "... ... ... ... \n", "137125155786416424728071422508382942054 3.409420 3.724873 SGN \n", "186321231466624970722021094909324401885 3.501582 3.729104 POL \n", "262284519603134366801326445274337827961 3.286652 3.721276 SGN \n", "33608739852097367198466784523454261485 3.475290 3.726857 POL \n", "303385550649730012456703013017610179856 3.702437 3.740081 POL \n", "\n", " cell_type subregion \n", "cell_label \n", "29162871883387929795006067736640436040 01 IT-ET Glut SSs5_16 \n", "293032136699589827732370249746624703959 01 IT-ET Glut SSs5_16 \n", "169008133492981499504077797165914124518 01 IT-ET Glut SSs5_15 \n", "227494694293280194589855295428860091482 01 IT-ET Glut SSs5_15 \n", "33873656525375865261837620890496116573 01 IT-ET Glut SSs5_15 \n", "... ... ... \n", "137125155786416424728071422508382942054 19 MB Glut SGN_1 \n", "186321231466624970722021094909324401885 19 MB Glut POL_1 \n", "262284519603134366801326445274337827961 19 MB Glut SGN_1 \n", "33608739852097367198466784523454261485 19 MB Glut POL_1 \n", "303385550649730012456703013017610179856 19 MB Glut POL_1 \n", "\n", "[71462 rows x 10 columns]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mergecell_num = 80\n", "def cluster_region(df_region, num_points=mergecell_num):\n", " # Perform hierarchical cluster\n", " Z = linkage(df_region[['x', 'y', 'z']], method='ward')\n", " # Divided into clusters according to the results of the cluster, each cluster has about NUM_POINTS individual points\n", " cluster_labels = fcluster(Z, t=len(df_region) / num_points, criterion='maxclust')\n", " return cluster_labels\n", "\n", "# Initialize a empty cluster label\n", "adata.obs['subregion'] = 0\n", "# Perform clusters separately for each area\n", "for region in adata.obs['region'].unique():\n", " mask = adata.obs['region'] == region\n", " if adata[adata.obs['region'] == region].shape[0] < 80:\n", " adata.obs.loc[mask, 'subregion'] = adata.obs.loc[mask, 'region'].apply(lambda x: x + '_1')\n", " continue\n", " clu_list = cluster_region(adata.obs[mask])\n", " cl_list = [f'{region}_{i}' for i in clu_list]\n", " adata.obs.loc[mask, 'subregion'] = cl_list\n", "adata.obs" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(867, 1122)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regions = adata.obs['subregion'].values\n", "gene_expression = adata.X.A\n", "\n", "# Create a DataFrame to integrate regional information and gene expression matrix together\n", "df = pd.DataFrame(gene_expression, columns=adata.var_names)\n", "df['subregion'] = regions\n", "\n", "# Calculate the average gene expression by regional grouping and calculate the average gene\n", "region_mean_expression = df.groupby('subregion').mean()\n", "# Convert the result to the matrix format of the regional*gene\n", "region_gene_matrix = region_mean_expression.values\n", "region_gene_matrix.shape" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(867, 867)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corr_all = np.corrcoef(region_gene_matrix)\n", "corr_all.shape" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(124,)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata_th = adata[adata.obs['region'].isin(th_regions)]\n", "th_subregions = adata_th.obs['subregion'].unique()\n", "th_subregions.shape" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(743,)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata_ctx = adata[adata.obs['region'].str.startswith(tuple(ctx_regions))]\n", "ctx_subregions = adata_ctx.obs['subregion'].unique()\n", "ctx_subregions.shape" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(743, 124)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "region_labels = region_mean_expression.index\n", "ctx_indices = [i for i, label in enumerate(region_labels) if label in ctx_subregions]\n", "th_indices = [i for i, label in enumerate(region_labels) if label in th_subregions]\n", "corr = corr_all[np.ix_(ctx_indices, th_indices)]\n", "corr.shape" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AD_1AD_2AD_3AV_1AV_2AV_3AV_4CL_1CL_2CM_1...VPM_2VPM_3VPM_4VPM_5VPM_6VPM_7VPM_8VPM_9VPMpc_1VPMpc_2
ACAd5_10.4107820.3999580.4298780.3891280.3998720.3796260.3859720.4337260.4484860.418421...0.3496220.3929640.3679100.3831020.3962610.3935930.4004770.3959130.4718050.461550
ACAd5_100.3931250.3826210.4152510.3762640.3840300.3650630.3735790.4248260.4465420.411051...0.3264930.3716320.3474030.3613140.3766640.3770900.3796260.3763440.4582140.458316
ACAd5_110.3982340.3809200.4207920.4138180.4098450.3943240.4006330.4554720.4670390.445792...0.3743500.4161920.3910170.4038940.4266160.4235030.4278030.4233350.4898650.486841
ACAd5_120.4105270.3934340.4355840.4203350.4190850.4010340.4075940.4604310.4693670.445620...0.3884940.4289090.4058530.4195870.4376700.4351930.4400990.4323760.4965980.487125
ACAd5_130.3968180.3789640.4168660.4076490.4044790.3908330.3993430.4606730.4755240.454787...0.3710240.4119060.3878360.3987770.4269810.4259600.4246570.4256080.4923380.495915
..................................................................
VISrl5_30.4039460.3921580.4476940.4120680.4313900.3915720.3986290.4588710.4786940.423189...0.3572830.4308410.3993250.4154670.4135600.4101790.4261740.4187960.5032350.475361
VISrl6a_10.3538940.3511500.3779030.3219320.3360510.3151140.3159660.3503150.3628670.331669...0.2791480.3147110.2896570.3065110.3034500.3034530.3111590.3088280.3772440.372180
VISrl6a_20.3294700.3289200.3593240.3189480.3310330.3035890.3042520.3476500.3657710.318220...0.2644000.3161150.2845810.3021150.2913930.2871090.3019320.2984100.3786670.372998
VISrl6a_30.3500700.3485130.3805150.3345100.3476040.3229650.3208020.3639740.3822270.333347...0.2671620.3280050.2947170.3111890.3048040.3009800.3166390.3137980.3965150.383178
VISrl6b_10.3229100.3232770.3496230.3076130.3177010.3022400.3022370.3392890.3573660.312219...0.2432230.2898700.2638710.2766270.2761740.2754920.2823200.2825520.3610670.364670
\n", "

743 rows × 124 columns

\n", "
" ], "text/plain": [ " AD_1 AD_2 AD_3 AV_1 AV_2 AV_3 \\\n", "ACAd5_1 0.410782 0.399958 0.429878 0.389128 0.399872 0.379626 \n", "ACAd5_10 0.393125 0.382621 0.415251 0.376264 0.384030 0.365063 \n", "ACAd5_11 0.398234 0.380920 0.420792 0.413818 0.409845 0.394324 \n", "ACAd5_12 0.410527 0.393434 0.435584 0.420335 0.419085 0.401034 \n", "ACAd5_13 0.396818 0.378964 0.416866 0.407649 0.404479 0.390833 \n", "... ... ... ... ... ... ... \n", "VISrl5_3 0.403946 0.392158 0.447694 0.412068 0.431390 0.391572 \n", "VISrl6a_1 0.353894 0.351150 0.377903 0.321932 0.336051 0.315114 \n", "VISrl6a_2 0.329470 0.328920 0.359324 0.318948 0.331033 0.303589 \n", "VISrl6a_3 0.350070 0.348513 0.380515 0.334510 0.347604 0.322965 \n", "VISrl6b_1 0.322910 0.323277 0.349623 0.307613 0.317701 0.302240 \n", "\n", " AV_4 CL_1 CL_2 CM_1 ... VPM_2 VPM_3 \\\n", "ACAd5_1 0.385972 0.433726 0.448486 0.418421 ... 0.349622 0.392964 \n", "ACAd5_10 0.373579 0.424826 0.446542 0.411051 ... 0.326493 0.371632 \n", "ACAd5_11 0.400633 0.455472 0.467039 0.445792 ... 0.374350 0.416192 \n", "ACAd5_12 0.407594 0.460431 0.469367 0.445620 ... 0.388494 0.428909 \n", "ACAd5_13 0.399343 0.460673 0.475524 0.454787 ... 0.371024 0.411906 \n", "... ... ... ... ... ... ... ... \n", "VISrl5_3 0.398629 0.458871 0.478694 0.423189 ... 0.357283 0.430841 \n", "VISrl6a_1 0.315966 0.350315 0.362867 0.331669 ... 0.279148 0.314711 \n", "VISrl6a_2 0.304252 0.347650 0.365771 0.318220 ... 0.264400 0.316115 \n", "VISrl6a_3 0.320802 0.363974 0.382227 0.333347 ... 0.267162 0.328005 \n", "VISrl6b_1 0.302237 0.339289 0.357366 0.312219 ... 0.243223 0.289870 \n", "\n", " VPM_4 VPM_5 VPM_6 VPM_7 VPM_8 VPM_9 \\\n", "ACAd5_1 0.367910 0.383102 0.396261 0.393593 0.400477 0.395913 \n", "ACAd5_10 0.347403 0.361314 0.376664 0.377090 0.379626 0.376344 \n", "ACAd5_11 0.391017 0.403894 0.426616 0.423503 0.427803 0.423335 \n", "ACAd5_12 0.405853 0.419587 0.437670 0.435193 0.440099 0.432376 \n", "ACAd5_13 0.387836 0.398777 0.426981 0.425960 0.424657 0.425608 \n", "... ... ... ... ... ... ... \n", "VISrl5_3 0.399325 0.415467 0.413560 0.410179 0.426174 0.418796 \n", "VISrl6a_1 0.289657 0.306511 0.303450 0.303453 0.311159 0.308828 \n", "VISrl6a_2 0.284581 0.302115 0.291393 0.287109 0.301932 0.298410 \n", "VISrl6a_3 0.294717 0.311189 0.304804 0.300980 0.316639 0.313798 \n", "VISrl6b_1 0.263871 0.276627 0.276174 0.275492 0.282320 0.282552 \n", "\n", " VPMpc_1 VPMpc_2 \n", "ACAd5_1 0.471805 0.461550 \n", "ACAd5_10 0.458214 0.458316 \n", "ACAd5_11 0.489865 0.486841 \n", "ACAd5_12 0.496598 0.487125 \n", "ACAd5_13 0.492338 0.495915 \n", "... ... ... \n", "VISrl5_3 0.503235 0.475361 \n", "VISrl6a_1 0.377244 0.372180 \n", "VISrl6a_2 0.378667 0.372998 \n", "VISrl6a_3 0.396515 0.383178 \n", "VISrl6b_1 0.361067 0.364670 \n", "\n", "[743 rows x 124 columns]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ctx_regions_df = [region_labels[i] for i in ctx_indices]\n", "th_regions_df = [region_labels[i] for i in th_indices]\n", "corr_df = pd.DataFrame(corr, index=ctx_regions_df, columns=th_regions_df)\n", "corr_df" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(25, 44)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tempdf = pd.read_excel('./data/layer56_to_th_connection_strength.xlsx', index_col=0, sheet_name=None)\n", "Rbp4_L5 = tempdf['Sheet1']\n", "Ntsr1_Syt6_L6 = tempdf['Sheet2']\n", "\n", "Rbp4_L5 = Rbp4_L5.replace('TN', -10)\n", "Rbp4_L5.loc['SSs'] = Rbp4_L5.loc[['SSs-1', 'SSs-2']].mean(axis=0)\n", "Rbp4_L5.loc['MOs'] = Rbp4_L5.loc[['MOs-1', 'MOs-2']].mean(axis=0)\n", "Rbp4_L5 = Rbp4_L5.drop(['SSs-1', 'SSs-2', 'MOs-1', 'MOs-2'], axis=0)\n", "# Rbp4_L5 = Rbp4_L5.loc[:, col_list]\n", "Rbp4_L5 = Rbp4_L5.loc[ctx_regions]\n", "\n", "Ntsr1_Syt6_L6 = Ntsr1_Syt6_L6.replace('TN', -10)\n", "Ntsr1_Syt6_L6.loc['SSs'] = Ntsr1_Syt6_L6.loc[['SSs-1', 'SSs-2']].mean(axis=0)\n", "Ntsr1_Syt6_L6.loc['MOs'] = Ntsr1_Syt6_L6.loc[['MOs-1', 'MOs-2']].mean(axis=0)\n", "Ntsr1_Syt6_L6 = Ntsr1_Syt6_L6.drop(['SSs-1', 'SSs-2', 'MOs-1', 'MOs-2'], axis=0)\n", "# Ntsr1_Syt6_L6 = Ntsr1_Syt6_L6.loc[:, col_list]\n", "Ntsr1_Syt6_L6 = Ntsr1_Syt6_L6.loc[ctx_regions]\n", "\n", "Ntsr1_Syt6_L6.shape" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 25/25 [00:00<00:00, 52.47it/s]\n" ] } ], "source": [ "connect_strength = pd.DataFrame(index=corr_df.index, columns=corr_df.columns, dtype=float)\n", "connraw = (Rbp4_L5 + Ntsr1_Syt6_L6)/2\n", "for ctx in tqdm(connraw.index):\n", " for th in connraw.columns:\n", " rows = connect_strength.index.str.startswith(ctx)\n", " cols = connect_strength.columns.str.startswith(th)\n", " connect_strength.loc[rows, cols] = connraw.loc[ctx, th]" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "ctx_region_order = ['ACAd', 'ACAv', 'PL', 'ILA', 'ORBl', 'ORBvl', 'AId', 'SSs', 'SSp-bfd', 'SSp-ll', 'SSp-ul', 'SSp-n', 'SSp-m', 'MOp', 'MOs', 'VISal', 'VISl', 'VISp', 'VISpor', 'VISrl', 'VISam', 'VISpm', 'RSPd', 'RSPv', 'AUDp']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tp = []\n", "tn = []\n", "for c in ctx_region_order:\n", " tmp = pd.DataFrame()\n", " tmp['conn'] = connect_strength.loc[connect_strength.index.str.startswith(c)].values.flatten()\n", " tmp['corr'] = corr_df.loc[corr_df.index.str.startswith(c)].values.flatten()\n", " tmp_p = tmp[(tmp['conn'] > -2)]\n", " # top_indices = tmp['conn'].nlargest(10).index\n", " # tmp_p = tmp.loc[top_indices]\n", " tmp_n = tmp[tmp['conn'] == -10]\n", " tp.append(tmp_p['corr'].mean())\n", " tn.append(tmp_n['corr'].mean())\n", "values = tp\n", "values2 = tn\n", "feature = ctx_region_order\n", "\n", "N = len(values)\n", "# Set the angle of the radar diagram to cut a round surface in a flat separation\n", "angles=np.linspace(0, 2*np.pi, N, endpoint=False)\n", "# In order to close the radar map, the following steps need\n", "values=np.concatenate((values,[values[0]]))\n", "values2=np.concatenate((values2,[values2[0]]))\n", "angles=np.concatenate((angles,[angles[0]]))\n", "feature = np.concatenate((feature, [feature[0]]))\n", "fig=plt.figure(figsize=(6,6))\n", "ax = fig.add_subplot(111, polar=True)\n", "# Draw a line map\n", "ax.plot(angles, values, 'o-', markersize=2, linewidth=0.5, label = 'TP', color='#E56F5E')\n", "# Fill color\n", "ax.fill(angles, values, alpha=0.25, color='#F19685')\n", "# Draw the second folding drawing\n", "ax.plot(angles, values2, 'o-', markersize=2, linewidth=0.5, label = 'TN', color='#8d8d8d')\n", "ax.fill(angles, values2, alpha=0.25, color='#8d8d8d')\n", "# Add the tags of each feature\n", "# ax.set_thetagrids(angles * 180/np.pi, feature)\n", "ax.set_thetagrids(angles * 180/np.pi, feature) # FRAC parameter setting label distance MAX ( *TP, *TN)+0.05 to depart the center\n", "ax.tick_params(axis='x', pad=6) # Set the distance between the label and the axis\n", "# Set the range of radar chart\n", "# ax.set_ylim(min(*tp, *tn)-0.05, max(*tp, *tn)+0.05)\n", "ax.set_ylim(0.25, 0.45)\n", "# Add title\n", "# plt.title(f'Layer5/6_CTX_in & TH_in', fontweight='bold')\n", "# Add grid line\n", "# ax.grid(True)\n", "ax.grid(True, linewidth=0.25, alpha=0.7)\n", "\n", "# ax.set_rgrids([0.25, 0.3, 0.35, 0.4, 0.45], labels=['', '0.3', '', '0.4', ''])\n", "# Set diagram\n", "plt.legend(loc='center left', bbox_to_anchor=(1, 1))\n", "\n", "plt.tight_layout()\n", "# plt.savefig('./l56_module_ave_exp_radar_plot_out.pdf', format='pdf')" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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P9+h7fzwhz/E8ePHMXz4cLVr4hNPPIEJEyZg/vz5mDNnDnJycjo9qS11Tnl5OcaPH9/sa926dfjVr36FZ555BqNHj8Yf//hHrFq1qtl606ZNwze/+U0sXLgQmZmZ+PnPfw7gUjeeRYsWYfny5SgsLMStt96KPXv2tDsnycsvv4z6+npMmDAB99xzD5YuXcoEtk4wm80oLS3Ff/zHf2DWrFkYPXo0nnzySXz961/H888/D41Gg//+7/+G3W7HrFmzMG/ePFx99dV48803u7TfsWPHdumcmThxIm6++WZMnToVQghs3Ljxsm5/HdXednv6eOgflixZgvr6esyfP79Z95ymjEYjDh8+jNtvvx0FBQV44IEH8K1vfQvf+MY3AADz58/Hk08+iccffxyTJ0+Gx+PBokWL1PW1Wi3eeOMN7Nu3D6NHj8Zjjz3W6tyQ1D9YrdaY9y8/+tGP8OSTT2LVqlUoKirCggUL8O6772LYsGEAgPz8fPzXf/0X3n77bYwdOxYvvfQSfvrTn7a5v1/96lew2+2YNm0abrnlFsyfPx8TJkxI+OeinvPyyy9j3rx5rfbguv3227F3716cPn0af/jDH7Bx40Z1eiAl30CxcOFC9dozceJEnDhxAg8++GAPfYr4aETLzo1ERERERETUYWy5IiIiIiIiSgAWV0RERERERAnA4oqIiIiIiCgBWFwRERERERElAIsrIiIiIiKiBGBxRURERERElAAsroiIiIiIiBKAxRUREVE3efXVV5GWltahdebMmYNHH320W46HiIi6F4srIiLqs44fPw6NRoP9+/f39qEQERG1i8UVERERERFRArC4IiKiXifLMn7+859jxIgR0Ov1yM/Px09+8hMMGzYMADB+/HhoNBrMmTMHwWAQJSUleOCBB9T1a2trYbFY8Morr7S7L6Wr3oYNG1BYWAij0Yg77rgDfr8fa9euxdChQ2G327F06VJIkqSuV19fj0WLFsFut8NoNOKGG25ATU3NZdvOz8+H0WjEbbfdBpfL1ez1e++9F7feemuzZY8++ijmzJkT83hDoRBWrFiB3NxcmEwmlJaWory8vN3PSUREPY/FFRER9bqVK1fiZz/7GZ588kkcOnQIr7/+OrKzs7F7924AwN/+9jecPXsW69evR2pqKv74xz9i7dq1+O///m9IkoS7774b119/Pe6///649uf3+/Hcc8/hjTfewKZNm1BeXo7bbrsNGzduxMaNG7Fu3Tr89re/xV/+8hd1nXvvvRd79+7FO++8gx07dkAIgRtvvBGRSAQAsGvXLixZsgQPP/ww9u/fj7lz5+LHP/5xl382Dz/8MHbs2IE33ngDBw4cwFe+8hUsWLDgssKOiIh6X3JvHwAREV3ZPB4Pnn32WTz//PNYvHgxAGD48OGYMWMGjh8/DgBIT09HTk6Ous64cePw4x//GF/72tfwL//yLzhx4gQ2bNgQ9z4jkQh+85vfYPjw4QCAO+64A+vWrcP58+dhNptRXFyMuXPn4sMPP8TChQtRU1ODd955B9u2bcO0adMAAH/84x+Rl5eHt99+G1/5ylfw7LPPYsGCBXj88ccBAAUFBdi+fTs2bdrU6Z/NyZMnsWbNGpw8eRKDBw8GAKxYsQKbNm3CmjVr8NOf/rTT2yYiosRjyxUREfWqqqoqhEIhXHfddR1ab/ny5SgoKMDzzz+PV155Benp6XGvazQa1cIKALKzszF06FCYzeZmyy5cuKAeY3JyMkpLS9XX09PTUVhYiKqqKvU9TV8HgKlTp3boM7X02WefQZIkFBQUwGw2q18fffQRamtru7RtIiJKPLZcERFRrzIYDJ1a78KFCzhy5AiSkpJQU1ODBQsWxL2uTqdr9r1Go2l1mSzLnTq2WLRaLYQQzZYp3Qpb4/V6kZSUhH379iEpKanZa00LQSIi6hvYckVERL1q5MiRMBgM2Lx582WvpaSkAECzYAnF/fffjzFjxmDt2rX47ne/q7YgdYeioiJEo1Hs2rVLXeZyuVBdXY3i4mL1PU1fB4CdO3c2+z4zMxNnz55ttqytmPnx48dDkiRcuHABI0aMaPbVtJskERH1DSyuiIioV6WmpuK73/0uHn/8cbz22muora3Fzp078fLLLyMrKwsGgwGbNm3C+fPn0dDQAAB44YUXsGPHDqxduxZ33XUXbr31Vtx1110Ih8PdcowjR45EWVkZvv71r2Pr1q349NNPcffddyM3NxdlZWUAgKVLl2LTpk345S9/iZqaGjz//POXjbf60pe+hL179+K1115DTU0NnnrqKRw8eDDmfgsKCnDXXXdh0aJFWL9+PY4dO4bdu3dj1apVePfdd7vlsxIRUeexuCIiol735JNPYvny5fj+97+PoqIiLFy4EBcuXEBycjKee+45/Pa3v8XgwYNRVlaGw4cP4zvf+Q5efPFF5OXlAQBefPFFOJ1OPPnkk912jGvWrMHEiRNx8803Y+rUqRBCYOPGjWp3wmuvvRa///3v8eyzz2Ls2LF4//338cQTTzTbxvz58/Hkk0/i8ccfx+TJk+HxeLBo0aJ297to0SIsX74chYWFuPXWW7Fnzx7k5+d322clIqLO0YiWnb+JiIiIiIiow9hyRURERERElAAsroiIaEC54YYbmsWWN/3ivFBERNSd2C2QiIgGlDNnziAQCLT6msPhgMPh6OEjIiKiKwWLKyIiIiIiogRgt0AiIiIiIqIEYHFFRERERESUACyuiIiIiIiIEoDFFRERERERUQKwuCIiIiIiIkoAFldEREREREQJwOKKiIiIiIgoAVhcERERERERJcD/B8FT2zW5+LPSAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ctx_module = {'Prefrontal': ['ACAd', 'ACAv', 'PL', 'ILA', 'ORBl', 'ORBvl'], 'Lateral': ['AId'], 'Somatomotor' :['SSs', 'SSp-bfd', 'SSp-ll', 'SSp-ul', 'SSp-n', 'SSp-m', 'MOp', 'MOs'],\n", " 'Visual': ['VISal', 'VISl', 'VISp', 'VISpor', 'VISrl'], 'Medial': ['VISam', 'VISpm', 'RSPd', 'RSPv'], 'Aud': ['AUDp']}\n", "# Reset the index to ensure that the index is listed as a column\n", "df1_reset = connect_strength.reset_index()\n", "df2_reset = corr_df.reset_index()\n", "# Merge Dataframe\n", "merged_df = df1_reset.melt(id_vars=['index'], var_name='th_region', value_name='conn')\n", "merged_df['corr'] = df2_reset.melt(id_vars=['index'], var_name='th_region', value_name='corr')['corr']\n", "# Huge naming\n", "merged_df.rename(columns={'index': 'ctx_region'}, inplace=True)\n", "\n", "merged_df['ctx_module'] = 0\n", "for i, c in enumerate(ctx_module.keys()):\n", " merged_df.loc[merged_df['ctx_region'].str.startswith(tuple(ctx_module[c])), 'ctx_module'] = c\n", "\n", "merged_df['tp_tn'] = 0\n", "merged_df.loc[merged_df['conn'] > -2, 'tp_tn'] = 'TP'\n", "merged_df.loc[merged_df['conn'] == -10, 'tp_tn'] = 'TN'\n", "merged_df = merged_df[merged_df['tp_tn'] != 0]\n", "\n", "plt.figure(figsize=(10,5))\n", "order = ['Prefrontal', 'Lateral', 'Somatomotor', 'Visual', 'Medial', 'Aud']\n", "merged_df['ctx_module'] = pd.Categorical(merged_df['ctx_module'], categories=order, ordered=True)\n", "custom_palette = {\n", " 'TP': '#6bad6b',\n", " 'TN': '#8d8d8d'\n", "}\n", "# Custom label style\n", "custom_markers = {\n", " 'TP': 'o', # Circle label\n", " 'TN': 's' # Square label\n", "}\n", "sns.lineplot(data=merged_df, x=\"ctx_module\", y=\"corr\", hue=\"tp_tn\", style=\"tp_tn\", markers=custom_markers, dashes=False, palette=custom_palette)\n", "# sns.lineplot(data=merged_df, x=\"ctx_module\", y=\"corr\", hue=\"tp_tn\", err_style=\"bars\")\n", "# plt.savefig('./L56_Moudel_tp_tn_compare_line.pdf', format='pdf')" ] } ], "metadata": { "kernelspec": { "display_name": "SpaCon_clone", "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.8.8" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }