{"id":61051,"date":"2024-10-11T14:48:53","date_gmt":"2024-10-11T06:48:53","guid":{"rendered":"http:\/\/www.biocloudservice.com\/wordpress\/?p=61051"},"modified":"2024-10-11T14:48:53","modified_gmt":"2024-10-11T06:48:53","slug":"%e6%b2%a1%e5%90%ac%e9%94%99%e5%90%a7%ef%bc%81%e5%8d%95%e7%bb%86%e8%83%9e%e4%b8%ad%e4%b9%9f%e5%8f%af%e4%bb%a5%e8%bf%9b%e8%a1%8c%e5%85%8d%e7%96%ab%e6%b5%b8%e6%b6%a6%e5%88%86%e6%9e%90%ef%bc%9fspatialcell","status":"publish","type":"post","link":"http:\/\/www.biocloudservice.com\/wordpress\/?p=61051","title":{"rendered":"\u6ca1\u542c\u9519\u5427\uff01\u5355\u7ec6\u80de\u4e2d\u4e5f\u53ef\u4ee5\u8fdb\u884c\u514d\u75ab\u6d78\u6da6\u5206\u6790\uff1fSpatialCells\u5e26\u7ed9\u4f60\u65b0\u7684\u4f53\u9a8c\uff01"},"content":{"rendered":"\n<p><strong>\u524d\u8a00<\/strong><strong><\/strong><\/p>\n\n\n\n<p>\u8c08\u8d77\u751f\u4fe1\u5206\u6790\u5fc5\u5907\u9879\u76ee\u514d\u75ab\u6d78\u6da6\u5206\u6790\uff0c\u5c0f\u4f19\u4f34\u4eec\u518d\u719f\u6089\u4e0d\u8fc7\u4e86\uff01\u50cf\u5c0f\u4f19\u4f34\u4eec\u8033\u719f\u80fd\u8be6\u7684ImmuCellAL\u3001Cibersort\u90fd\u53ea\u80fd\u5728RNA-Seq\u548c\u82af\u7247\u6570\u636e\u4e2d\u4f7f\u7528\uff0c\u50cf\u76ee\u524d\u706b\u7206\u7684\u5355\u7ec6\u80de\u7ec4\u5b66\u6570\u636e\u8fd9\u4e24\u4e2aR\u5305\u5374\u65e0\u7528\u6b66\u4e4b\u5730\uff01\u4eca\u5929\u5927\u6d77\u54e5\u5e26\u5927\u5bb6\u5b66\u4e60\u5982\u4f55\u5728\u5355\u7ec6\u80de\u6570\u636e\u4e2d\u8fdb\u884c\u514d\u75ab\u6d78\u6da6\u5206\u6790\uff01\u5bf9\uff0c\u4f60\u6ca1\u542c\u9519\uff0c\u5355\u7ec6\u80de\u4e2d\u4e5f\u53ef\u4ee5\u8fdb\u884c\u514d\u75ab\u6d78\u6da6\u5206\u6790\u3002SpatialCells\u7684\u529f\u80fd\u6db5\u76d6\u4e86\u80bf\u7624\u5fae\u73af\u5883\u5206\u6790\u7684\u5404\u4e2a\u65b9\u9762\uff0c\u4f8b\u5982\u57fa\u4e8e\u533a\u57df\u7684\u7ec6\u80de\u7ec4\u6210\u3001\u80bf\u7624\u589e\u6b96\u6307\u6570\u3001\u80bf\u7624\u5206\u79bb\u6307\u6570\u3001\u514d\u75ab\u7ec6\u80de\u6d78\u6da6\u548c\u80bf\u7624\u514d\u75ab\u8ddd\u79bb\u7b49\u3002SpatialCells\u7684\u529f\u80fd\u5b9e\u5728\u592a\u5f3a\u5927\u4e86\uff0c\u4eca\u5929\u5927\u6d77\u54e5\u7740\u91cd\u5e26\u5927\u5bb6\u5b66\u4e60\u5355\u7ec6\u80de\u4e2d\u7684\u514d\u75ab\u6d78\u6da6\u5206\u6790\uff01\u6b64\u5916\uff0cSpatialCells \u4e5f\u6709\u52a9\u4e8e\u540e\u7eed\u7684\u5173\u8054\u5206\u6790\u548c\u673a\u5668\u5b66\u4e60\u9884\u6d4b\uff0c\u4f7f\u5176\u6210\u4e3a\u63a8\u8fdb\u6211\u4eec\u5bf9\u80bf\u7624\u751f\u957f\u3001\u4fb5\u88ad\u548c\u8f6c\u79fb\u7406\u89e3\u7684\u91cd\u8981\u5de5\u5177\u3002\u751f\u4fe1\u5206\u6790\u4e0d\u719f\u6089\u7684\u5c0f\u4f19\u4f34\u4eec\u6b22\u8fce\u6765\u6ef4\u6ef4\u5927\u6d77\u54e5\uff0c\u5927\u6d77\u54e5\u5c31\u662f\u8fd9\u4e48\u7684\u5ba0\u7c89\uff0c\u6709\u4ec0\u4e48\u751f\u4fe1\u5206\u6790\u4e0a\u7684\u95ee\u9898\u5927\u5bb6\u5c3d\u7ba1\u54a8\u8be2\u5927\u6d77\u54e5\uff01\u6ca1\u6709\u65f6\u95f4\u5b66\u4e60\u7684\u5c0f\u4f19\u4f34\u4eec\u4e5f\u4e0d\u8981\u7740\u6025\u54e6\uff01\u6709\u9700\u8981\u751f\u4fe1\u5206\u6790\u7684\u5c0f\u4f19\u4f34\u4eec\u4e5f\u53ef\u4ee5\u627e\u5927\u6d77\u54e5\u54e6\uff01\u7ec3\u4e86\u5341\u5e74\u751f\u4fe1\u5206\u6790\u7684\u5927\u6d77\u54e5\u5bf9\u4e8e\u751f\u4fe1\u5206\u6790\u77e5\u8bc6\u5df2\u7ecf\u5982\u9c7c\u5f97\u6c34\u4ece\u5206\u6790\u5230\u53ef\u89c6\u5316\u76f4\u5230\u4f60\u6ee1\u610f\u4e3a\u6b62\uff01<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"520\" height=\"282\" src=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629013207_0DD7DDE7-89DC-44ae-885C-25A37F5F71F3.png?resize=520%2C282\" alt=\"\" class=\"wp-image-61052\" srcset=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629013207_0DD7DDE7-89DC-44ae-885C-25A37F5F71F3.png?w=520 520w, https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629013207_0DD7DDE7-89DC-44ae-885C-25A37F5F71F3.png?resize=300%2C163 300w\" sizes=\"(max-width: 520px) 100vw, 520px\" data-recalc-dims=\"1\" \/><\/figure>\n\n\n\n<p>\u751f\u4fe1\u6570\u636e\u5904\u7406\u8d77\u6765\u5360\u7528\u5185\u5b58\u5b9e\u5728\u592a\u5927\u4e86\uff0c\u653e\u8fc7\u81ea\u5df1\u7684\u7535\u8111\u5427\uff01\u5927\u6d77\u54e5\u5728\u8fd9\u91cc\u7ed9\u5927\u5bb6\u9001\u4e0a\u798f\u5229\u4e86\uff0c\u6709\u9700\u8981\u670d\u52a1\u5668\u7684\u5c0f\u4f19\u4f34\u4eec\uff0c\u6b22\u8fce\u5927\u5bb6\u8054\u7cfb\u5927\u6d77\u54e5\uff0c\u4fdd\u8bc1\u670d\u52a1\u5668\u7684\u6027\u4ef7\u6bd4\u6700\u9ad8\u54e6\uff01<\/p>\n\n\n\n<p><strong>\u4ee3\u7801\u6559\u7a0b<\/strong><strong><\/strong><\/p>\n\n\n\n<p>SpatialCells \u76ee\u524d\u53ea\u80fd\u4ece\u6e90\u5b89\u88c5\u3002 \u8981\u5b89\u88c5\uff0c\u8bf7\u4ece\u5b58\u50a8\u5e93\u4e0b\u8f7d\u4ee3\u7801\u5e76\u5207\u6362\u5230\u4ee3\u7801\u6587\u4ef6\u5939\u3002<\/p>\n\n\n\n<p>\u4ece SpatialCells \u7684\u6839\u76ee\u5f55\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a<\/p>\n\n\n\n<p>pip install -r requirements.txt<\/p>\n\n\n\n<p>pip install .<\/p>\n\n\n\n<p>\u5efa\u8bae\u5728\u865a\u62df\u73af\u5883\u4e2d\u5b89\u88c5 SpatialCells\uff0c\u4f8b\u5982 conda\u3002 \u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b yaml \u6587\u4ef6\u521b\u5efa conda \u73af\u5883\uff1a<\/p>\n\n\n\n<p>conda env create &#8211;name spatialcells &#8211;file=conda.yaml<\/p>\n\n\n\n<p>pip install .<\/p>\n\n\n\n<p>conda.yaml \u6307\u5b9a\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p>name: spatial-cells-env<\/p>\n\n\n\n<p>channels:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; conda-forge<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; defaults<\/p>\n\n\n\n<p>dependencies:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; python&gt;=3.7, &lt;3.11<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; ipykernel<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; matplotlib&gt;=3.7.0<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; pandas&gt;=2.0.3<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; seaborn&gt;=0.12.2<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; shapely&gt;=2.0<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; tqdm<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; pip<\/p>\n\n\n\n<p>&nbsp;&nbsp;&#8211; pip:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; anndata==0.9.2<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; scanpy==1.9.4<\/p>\n\n\n\n<p>\u52a0\u8f7d\u76f8\u5173\u7684python\u5305<\/p>\n\n\n\n<p>import pandas as pd<\/p>\n\n\n\n<p>import matplotlib.pyplot as plt<\/p>\n\n\n\n<p>import anndata as ad<\/p>\n\n\n\n<p>import spatialcells as spc<\/p>\n\n\n\n<p>\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u4ee5\u514d\u75ab\u7ec6\u80de\u6d78\u6da6\u5206\u6790\u4e3a\u5bfc\u5411\u7684\u5206\u6790\u7684\u7ed3\u679c\u6765\u5c55\u793a SpatialCells \u7684\u529f\u80fd\u3002\u6211\u4eec\u7684\u5206\u6790\u6d89\u53ca\u75311110585\u4e2a\u7ec6\u80de\u7ec4\u6210\u7684\u76ae\u80a4\u9ed1\u8272\u7d20\u7624\u6837\u672c\uff08MEL1\uff09\u7684\u516c\u5f00\u591a\u8def\u590d\u7528\u6210\u6570\u636e\u3002<\/p>\n\n\n\n<p>\u8bfb\u53d6\u548c\u9884\u5904\u7406\u6570\u636e<\/p>\n\n\n\n<p>adata = ad.read_h5ad(&#8220;..\/..\/data\/MEL1_adata.h5ad&#8221;)<\/p>\n\n\n\n<p>spc.prep.setGate(adata, &#8220;KERATIN_cellRingMask&#8221;, 6.4, debug=True)<\/p>\n\n\n\n<p>spc.prep.setGate(adata, &#8220;SOX10_cellRingMask&#8221;, 7.9, debug=True)<\/p>\n\n\n\n<p>spc.prep.setGate(adata, &#8220;CD3D_cellRingMask&#8221;, 7, debug=True)<\/p>\n\n\n\n<p>\u80bf\u7624\u8fb9\u7f18\u66b4\u9732\u4e8e\u6765\u81ea\u57fa\u8d28\u533a\u57df\u7684\u7ec6\u80de\u6d78\u6da6\u3001\u7269\u7406\u63a5\u89e6\u548c\u53ef\u6269\u6563\u8d8b\u5316\u68af\u5ea6\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002\u56e0\u6b64\uff0c\u5b9a\u4e49\u80bf\u7624\u548c\u57fa\u8d28\u8fb9\u754c\u4f7f\u6211\u4eec\u80fd\u591f\u66f4\u5177\u4f53\u5730\u8bc4\u4f30\u4fb5\u88ad\u6027\u9ed1\u8272\u7d20\u7624\u80bf\u7624\u7ec6\u80de\u4e0e\u5fae\u73af\u5883\u4e4b\u95f4\u7684\u590d\u6742\u76f8\u4e92\u4f5c\u7528\uff0c\u5e76\u8bc6\u522b\u65b0\u7684\u6807\u8bb0\u7269\u3002<\/p>\n\n\n\n<p>\u5206\u79bb\u80bf\u7624\u7ec6\u80de\u7fa4\u843d\u5e76\u7ed8\u5236\u533a\u57df\u8fb9\u754c<\/p>\n\n\n\n<p>marker = [&#8220;SOX10_cellRingMask_positive&#8221;]<\/p>\n\n\n\n<p>communitycolumn = &#8220;COI_community&#8221;<\/p>\n\n\n\n<p>ret = spc.spatial.getCommunities(adata, marker, eps=60, newcolumn=communitycolumn)<\/p>\n\n\n\n<p>fig, ax = plt.subplots(figsize=(10, 8))<\/p>\n\n\n\n<p>spc.plt.plotCommunities(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;adata, ret, communitycolumn, plot_first_n_clusters=10, s=2, fontsize=10, ax=ax<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>ax.invert_yaxis()<\/p>\n\n\n\n<p>plt.show()<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"554\" height=\"430\" src=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629053863_DDEE1354-D4C1-442c-9C6A-6BCE04506453.png?resize=554%2C430\" alt=\"\" class=\"wp-image-61053\" srcset=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629053863_DDEE1354-D4C1-442c-9C6A-6BCE04506453.png?w=554 554w, https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629053863_DDEE1354-D4C1-442c-9C6A-6BCE04506453.png?resize=300%2C233 300w\" sizes=\"(max-width: 554px) 100vw, 554px\" data-recalc-dims=\"1\" \/><\/figure>\n\n\n\n<p>\u7ed8\u5236\u80bf\u7624\u7684\u533a\u57df\u8fb9\u754c<\/p>\n\n\n\n<p>communityIndexList = [6, 3, 14, 51, 29, 47, 39, 44, 22]<\/p>\n\n\n\n<p>boundary = spc.spatial.getBoundary(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;adata, communitycolumn, communityIndexList, alpha=130<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>boundary = spc.spa.pruneSmallComponents(boundary, min_edges=50, holes_min_edges=500)<\/p>\n\n\n\n<p>roi_boundary = spc.spa.getExtendedBoundary(boundary, offset=2000)<\/p>\n\n\n\n<p>markersize = 1<\/p>\n\n\n\n<p>fig, ax = plt.subplots(figsize=(10, 7))<\/p>\n\n\n\n<p>## all points<\/p>\n\n\n\n<p>ax.scatter(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;*zip(*adata.obs[[&#8220;X_centroid&#8221;, &#8220;Y_centroid&#8221;]].to_numpy()),<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;s=markersize,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;color=&#8221;grey&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;alpha=0.2<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p># Points in selected commnities<\/p>\n\n\n\n<p>xy = adata.obs[adata.obs[communitycolumn].isin(communityIndexList)][<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[&#8220;X_centroid&#8221;, &#8220;Y_centroid&#8221;]<\/p>\n\n\n\n<p>].to_numpy()<\/p>\n\n\n\n<p>ax.scatter(xy[:, 0], xy[:, 1], s=markersize, color=&#8221;r&#8221;)<\/p>\n\n\n\n<p># Bounds of points in selected commnities<\/p>\n\n\n\n<p>spc.plt.plotBoundary(boundary, ax=ax, label=&#8221;Boundary&#8221;, color=&#8221;b&#8221;)<\/p>\n\n\n\n<p>spc.plt.plotBoundary(roi_boundary, ax=ax, label=&#8221;ROI boundary&#8221;, color=&#8221;g&#8221;)<\/p>\n\n\n\n<p>ax.invert_yaxis()<\/p>\n\n\n\n<p>plt.show()<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"542\" height=\"372\" src=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629082589_015C58F0-3FDD-4218-B07F-0D79B605F604.png?resize=542%2C372\" alt=\"\" class=\"wp-image-61054\" srcset=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629082589_015C58F0-3FDD-4218-B07F-0D79B605F604.png?w=542 542w, https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629082589_015C58F0-3FDD-4218-B07F-0D79B605F604.png?resize=300%2C206 300w\" sizes=\"(max-width: 542px) 100vw, 542px\" data-recalc-dims=\"1\" \/><\/figure>\n\n\n\n<p>\u5c06\u7ec6\u80de\u5206\u914d\u5230\u80bf\u7624\u533a\u57df<\/p>\n\n\n\n<p>spc.spatial.assignPointsToRegions(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;adata,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[boundary, roi_boundary],<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[&#8220;Tumor&#8221;, &#8220;Tumor_ROI&#8221;],<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;assigncolumn=&#8221;region&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;default=&#8221;BG&#8221;,<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>point_size = 1<\/p>\n\n\n\n<p>fig, ax = plt.subplots(figsize=(10, 7))<\/p>\n\n\n\n<p>for region in sorted(set(adata.obs[&#8220;region&#8221;])):<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;tmp = adata.obs[adata.obs.region == region]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;ax.scatter(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*zip(*tmp[[&#8220;X_centroid&#8221;, &#8220;Y_centroid&#8221;]].to_numpy()),<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=point_size,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alpha=0.7,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label=region<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;)<\/p>\n\n\n\n<p># Bounds of points in selected commnities<\/p>\n\n\n\n<p>spc.plt.plotBoundary(boundary, ax=ax, label=&#8221;Boundary&#8221;, color=&#8221;purple&#8221;)<\/p>\n\n\n\n<p>spc.plt.plotBoundary(roi_boundary, ax=ax, label=&#8221;ROI boundary&#8221;, color=&#8221;r&#8221;)<\/p>\n\n\n\n<p>plt.legend(loc=&#8221;upper right&#8221;)<\/p>\n\n\n\n<p>ax.invert_yaxis()<\/p>\n\n\n\n<p>plt.show()<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"545\" height=\"374\" src=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629116724_BC234673-7FB9-4e51-8253-D5A281A2BE7F.png?resize=545%2C374\" alt=\"\" class=\"wp-image-61055\" srcset=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629116724_BC234673-7FB9-4e51-8253-D5A281A2BE7F.png?w=545 545w, https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629116724_BC234673-7FB9-4e51-8253-D5A281A2BE7F.png?resize=300%2C206 300w\" sizes=\"(max-width: 545px) 100vw, 545px\" data-recalc-dims=\"1\" \/><\/figure>\n\n\n\n<p>\u6839\u636e\u73b0\u6709\u8868\u578b\u6982\u62ec\u7ec6\u80de\u7c7b\u578b<\/p>\n\n\n\n<p>def merge_pheno(row):<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;if row[&#8220;phenotype_large_cohort&#8221;] in [<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;T cells&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;Cytotoxic T cells&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;Exhausted T cells&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;]:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;T cells&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;elif row[&#8220;phenotype_large_cohort&#8221;] in [&#8220;Melanocytes&#8221;]:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Tumor cells&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;else:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Other cells&#8221;<\/p>\n\n\n\n<p>def cell_type(row):<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;if row[&#8220;SOX10_cellRingMask_positive&#8221;]:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;SOX10+&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;elif row[&#8220;CD3D_cellRingMask_positive&#8221;]:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;CD3D+&#8221;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;else:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Other cells&#8221;<\/p>\n\n\n\n<p># Applying the function to create the new columns<\/p>\n\n\n\n<p>adata.obs[&#8220;pheno1&#8221;] = pd.Categorical(adata.obs.apply(merge_pheno, axis=1))<\/p>\n\n\n\n<p>adata.obs[&#8220;Cell Types&#8221;] = pd.Categorical(adata.obs.apply(cell_type, axis=1))<\/p>\n\n\n\n<p>spc.msmt.getRegionComposition(adata, &#8220;pheno1&#8221;)<\/p>\n\n\n\n<p>\u5728\u80bf\u7624ROI\u533a\u57df\u627e\u5230\u514d\u75ab\u7ec6\u80de\u6d78\u6da6\u533a\u57df<\/p>\n\n\n\n<p>melano = adata[<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;(adata.obs.SOX10_cellRingMask_positive) &amp; (adata.obs.region.isin([&#8220;Tumor_ROI&#8221;, &#8220;Tumor&#8221;]))<\/p>\n\n\n\n<p>]<\/p>\n\n\n\n<p>tcells = adata[<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;(adata.obs.CD3D_cellRingMask_positive)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&amp; (adata.obs.region.isin([&#8220;Tumor_ROI&#8221;, &#8220;Tumor&#8221;]))<\/p>\n\n\n\n<p>]<\/p>\n\n\n\n<p>fig, ax = plt.subplots(figsize=(10, 7))<\/p>\n\n\n\n<p>ax.invert_yaxis()<\/p>\n\n\n\n<p>ax.set_aspect(&#8220;equal&#8221;)<\/p>\n\n\n\n<p>plt.scatter(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;tcells.obs[&#8220;X_centroid&#8221;],<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;tcells.obs[&#8220;Y_centroid&#8221;],<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;s=0.5,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;label=&#8221;T cells&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;color=&#8221;green&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;alpha=0.5,<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>spc.plt.plotBoundary(roi_boundary, ax=ax, label=&#8221;ROI boundary&#8221;, color=&#8221;r&#8221;)<\/p>\n\n\n\n<p>plt.legend(loc=&#8221;upper right&#8221;, markerscale=5)<\/p>\n\n\n\n<p>plt.show()<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"555\" height=\"380\" src=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629149521_C4BFDD39-6E1A-4ed7-AA82-320E4E305B0A.png?resize=555%2C380\" alt=\"\" class=\"wp-image-61056\" srcset=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629149521_C4BFDD39-6E1A-4ed7-AA82-320E4E305B0A.png?w=555 555w, https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629149521_C4BFDD39-6E1A-4ed7-AA82-320E4E305B0A.png?resize=300%2C205 300w\" sizes=\"(max-width: 555px) 100vw, 555px\" data-recalc-dims=\"1\" \/><\/figure>\n\n\n\n<p>tumor = adata[adata.obs.region.isin([&#8220;Tumor_ROI&#8221;, &#8220;Tumor&#8221;])]<\/p>\n\n\n\n<p>communitycolumn = &#8220;CD3D_cellRingMask_positive&#8221;<\/p>\n\n\n\n<p>communityIndexList = [True]<\/p>\n\n\n\n<p>immune_boundary = spc.spatial.getBoundary(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;tumor, communitycolumn, communityIndexList, alpha=130<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>immune_boundary = spc.spa.pruneSmallComponents(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;immune_boundary, min_edges=25, holes_min_edges=30, min_area=30000<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>markersize = 0.1<\/p>\n\n\n\n<p>fig, ax = plt.subplots(figsize=(10, 7))<\/p>\n\n\n\n<p>## all points<\/p>\n\n\n\n<p>ax.scatter(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;*zip(*adata.obs[[&#8220;X_centroid&#8221;, &#8220;Y_centroid&#8221;]].to_numpy()),<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;s=markersize,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;color=&#8221;grey&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;alpha=0.2<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p># Points in selected commnities<\/p>\n\n\n\n<p>xy = tumor.obs[tumor.obs[communitycolumn].isin(communityIndexList)][<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;[&#8220;X_centroid&#8221;, &#8220;Y_centroid&#8221;]<\/p>\n\n\n\n<p>].to_numpy()<\/p>\n\n\n\n<p>ax.scatter(xy[:, 0], xy[:, 1], s=markersize, color=&#8221;green&#8221;, alpha=1, label=&#8221;T cells&#8221;)<\/p>\n\n\n\n<p># Bounds of points in selected commnities<\/p>\n\n\n\n<p>spc.plt.plotBoundary(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;immune_boundary, ax=ax, label=&#8221;Immune Cell Region Boundary&#8221;, color=&#8221;k&#8221;, linewidth=1<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>spc.plt.plotBoundary(roi_boundary, ax=ax, label=&#8221;ROI boundary&#8221;, color=&#8221;r&#8221;)<\/p>\n\n\n\n<p># ax.set_xlim(0, 20000)<\/p>\n\n\n\n<p># ax.set_ylim(0, 13000)<\/p>\n\n\n\n<p>ax.invert_yaxis()<\/p>\n\n\n\n<p>ax.set_aspect(&#8220;equal&#8221;)<\/p>\n\n\n\n<p>ax.set_axis_off()<\/p>\n\n\n\n<p># plt.legend(loc=&#8221;upper right&#8221;, markerscale=5, fontsize=13.5)<\/p>\n\n\n\n<p># plt.savefig(&#8220;immune_cell_region1.png&#8221;, dpi=400)<\/p>\n\n\n\n<p>plt.show()<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"549\" height=\"398\" src=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629195405_AE5321E7-4B80-46b2-AABE-C21A57D502B4.png?resize=549%2C398\" alt=\"\" class=\"wp-image-61057\" srcset=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629195405_AE5321E7-4B80-46b2-AABE-C21A57D502B4.png?w=549 549w, https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629195405_AE5321E7-4B80-46b2-AABE-C21A57D502B4.png?resize=300%2C217 300w\" sizes=\"(max-width: 549px) 100vw, 549px\" data-recalc-dims=\"1\" \/><\/figure>\n\n\n\n<p>spc.spatial.assignPointsToRegions(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;melano, [immune_boundary], [&#8220;T&#8221;], assigncolumn=&#8221;tumor_isolated_region&#8221;, default=&#8221;F&#8221;<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5c06\u5df2\u8bc6\u522b\u7684\u514d\u75ab\u6d78\u6da6\u533a\u57df\u4e0e\u6240\u6709\u80bf\u7624\u7ec6\u80de\u91cd\u53e0\u6765\u4f30\u8ba1\u514d\u75ab\u6d78\u6da6\u7684\u89c4\u6a21\u3002<\/p>\n\n\n\n<p>point_size = 0.5<\/p>\n\n\n\n<p>fig, ax = plt.subplots(figsize=(10, 7))<\/p>\n\n\n\n<p>ax.scatter(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;*zip(*adata.obs[[&#8220;X_centroid&#8221;, &#8220;Y_centroid&#8221;]].to_numpy()),<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;s=markersize,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;color=&#8221;grey&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;alpha=0.2<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>colors = [&#8220;red&#8221;, &#8220;orange&#8221;]<\/p>\n\n\n\n<p>labels = [&#8220;Immune-isolated Tumor Cells&#8221;, &#8220;Immune-rich Tumor Cells&#8221;]<\/p>\n\n\n\n<p>for i, region in enumerate(sorted(set(melano.obs[&#8220;tumor_isolated_region&#8221;]))):<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;tmp = melano.obs[melano.obs.tumor_isolated_region == region]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;ax.scatter(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*zip(*tmp[[&#8220;X_centroid&#8221;, &#8220;Y_centroid&#8221;]].to_numpy()),<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=point_size,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alpha=0.5,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color=colors[i],<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label=labels[i]<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;)<\/p>\n\n\n\n<p># Bounds of points in selected commnities<\/p>\n\n\n\n<p>spc.plt.plotBoundary(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;immune_boundary, ax=ax, label=&#8221;Immune Cell Region Boundary&#8221;, color=&#8221;k&#8221;, linewidth=1<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>spc.plt.plotBoundary(roi_boundary, ax=ax, label=&#8221;ROI boundary&#8221;, color=&#8221;b&#8221;)<\/p>\n\n\n\n<p>ax.invert_yaxis()<\/p>\n\n\n\n<p>ax.set_axis_off()<\/p>\n\n\n\n<p># plt.savefig(&#8220;roi_region1.png&#8221;, dpi=400)<\/p>\n\n\n\n<p>plt.show()<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"552\" height=\"389\" src=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629226887_A8B6A868-ECDC-4b69-880B-C929116ED7C5.png?resize=552%2C389\" alt=\"\" class=\"wp-image-61058\" srcset=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629226887_A8B6A868-ECDC-4b69-880B-C929116ED7C5.png?w=552 552w, https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629226887_A8B6A868-ECDC-4b69-880B-C929116ED7C5.png?resize=300%2C211 300w\" sizes=\"(max-width: 552px) 100vw, 552px\" data-recalc-dims=\"1\" \/><\/figure>\n\n\n\n<p>print(&#8220;Percentage of tumor cells in immune-isolated regions: &#8220;)<\/p>\n\n\n\n<p>melano.obs[&#8220;tumor_isolated_region&#8221;].value_counts() \/ len(melano.obs)<\/p>\n\n\n\n<p>\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u6bd4\u8f83\u80bf\u7624\u533a\u57df\u548c\u514d\u75ab\u7ec6\u80de\u533a\u57df\u4e4b\u95f4\u7684\u533a\u57df\u91cd\u53e0\u6765\u89c2\u5bdf\u514d\u75ab\u6d78\u6da6\u7684\u89c4\u6a21\u3002<\/p>\n\n\n\n<p>roi_area = spc.msmt.getRegionArea(roi_boundary)<\/p>\n\n\n\n<p>tumor_area = spc.msmt.getRegionArea(boundary)<\/p>\n\n\n\n<p>immune_area = spc.msmt.getRegionArea(immune_boundary)<\/p>\n\n\n\n<p>tumor_immune_overlap = boundary.intersection(immune_boundary)<\/p>\n\n\n\n<p>overlap_area = spc.msmt.getRegionArea(tumor_immune_overlap)<\/p>\n\n\n\n<p>print(f&#8221;Area of ROI: {roi_area:.2f}&#8221;)<\/p>\n\n\n\n<p>print(f&#8221;Area of main tumor cell region: {tumor_area:.2f}&#8221;)<\/p>\n\n\n\n<p>print(f&#8221;Area of immune cell region: {immune_area}&#8221;)<\/p>\n\n\n\n<p>print(f&#8221;Area of overlap between tumor and immune cell regions: {overlap_area:.2f}&#8221;)<\/p>\n\n\n\n<p>print(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;f&#8221;Percentage of tumor region that has overlap with &#8220;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;f&#8221;immune cell region: {overlap_area \/ tumor_area:.3f}&#8221;<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>\u8bc6\u522b\u4e0e\u514d\u75ab\u7ec6\u80de\u76f8\u90bb\u7684\u80bf\u7624\u7ec6\u80de\u3002<\/p>\n\n\n\n<p>dists = spc.msmt.getMinCellTypesDistance(melano, tcells)<\/p>\n\n\n\n<p>adata.obs.loc[<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;(adata.obs.SOX10_cellRingMask_positive) &amp; (adata.obs.region.isin([&#8220;Tumor_ROI&#8221;, &#8220;Tumor&#8221;])), &#8220;dist&#8221;<\/p>\n\n\n\n<p>] = dists<\/p>\n\n\n\n<p>threshold = 20<\/p>\n\n\n\n<p>adata.obs[&#8220;dist_binned&#8221;] = adata.obs[&#8220;dist&#8221;] &lt;= threshold<\/p>\n\n\n\n<p>infiltrated = adata.obs[<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;(adata.obs.SOX10_cellRingMask_positive)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&amp; (adata.obs.region == &#8220;Tumor&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&amp; (adata.obs.dist_binned == True)<\/p>\n\n\n\n<p>]<\/p>\n\n\n\n<p>non_infiltrated = adata.obs[<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;(adata.obs.SOX10_cellRingMask_positive)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&amp; (adata.obs.region == &#8220;Tumor&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&amp; (adata.obs.dist_binned == False)<\/p>\n\n\n\n<p>]<\/p>\n\n\n\n<p>fig, ax = plt.subplots(figsize=(10, 6))<\/p>\n\n\n\n<p>ax.invert_yaxis()<\/p>\n\n\n\n<p>region = adata.obs[(adata.obs.region == &#8220;Tumor&#8221;)]<\/p>\n\n\n\n<p>plt.scatter(region[&#8220;X_centroid&#8221;], region[&#8220;Y_centroid&#8221;], s=1, alpha=0.2, color=&#8221;grey&#8221;)<\/p>\n\n\n\n<p>plt.scatter(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;infiltrated[&#8220;X_centroid&#8221;],<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;infiltrated[&#8220;Y_centroid&#8221;],<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;s=1,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;alpha=0.5,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;color=&#8221;green&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;label=f&#8221;Infiltrated (distance to t-cells &lt;= {threshold}um)&#8221;,<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>plt.legend(markerscale=10)<\/p>\n\n\n\n<p>plt.show()<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"555\" height=\"330\" src=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629287600_88785698-F0A4-4ac9-9418-F52BE8E3B4F6.png?resize=555%2C330\" alt=\"\" class=\"wp-image-61059\" srcset=\"https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629287600_88785698-F0A4-4ac9-9418-F52BE8E3B4F6.png?w=555 555w, https:\/\/i0.wp.com\/www.biocloudservice.com\/wordpress\/wp-content\/uploads\/2024\/10\/1728629287600_88785698-F0A4-4ac9-9418-F52BE8E3B4F6.png?resize=300%2C178 300w\" sizes=\"(max-width: 555px) 100vw, 555px\" data-recalc-dims=\"1\" \/><\/figure>\n\n\n\n<p><strong>\u5c0f\u7ed3<\/strong><strong><\/strong><\/p>\n\n\n\n<p>SpatialCells \u662f\u4e00\u4e2a\u7528\u4e8e\u7a7a\u95f4\u5206\u6790\u591a\u8def\u590d\u7528\u5355\u7ec6\u80de\u6210\u50cf\u6570\u636e\u7684\u8f6f\u4ef6\u5305\uff0c\u5176\u7279\u70b9\u662f\u80fd\u591f\u6839\u636e\u4efb\u4f55\u7ec6\u80de\u7ec4\u5b9a\u4e49\u611f\u5174\u8da3\u533a\u57df\uff0c\u7136\u540e\u8fdb\u884c\u57fa\u4e8e\u533a\u57df\u7684\u5206\u6790\u3002SpatialCells\u7684\u529f\u80fd\u6db5\u76d6\u4e86\u80bf\u7624\u5fae\u73af\u5883\u5206\u6790\u7684\u5404\u4e2a\u65b9\u9762\uff0c\u4f8b\u5982\u57fa\u4e8e\u533a\u57df\u7684\u7ec6\u80de\u7ec4\u6210\u3001\u80bf\u7624\u589e\u6b96\u6307\u6570\u3001\u80bf\u7624\u5206\u79bb\u6307\u6570\u3001\u514d\u75ab\u7ec6\u80de\u6d78\u6da6\u548c\u80bf\u7624\u514d\u75ab\u8ddd\u79bb\u3002SpatialCells \u5141\u8bb8\u4f7f\u7528\u7528\u6237\u5b9a\u4e49\u7684\u53c2\u6570\u4ee5\u6807\u51c6\u5316\u65b9\u5f0f\u9884\u5904\u7406\u548c\u5206\u6790\u6570\u636e\uff0c\u5e76\u4e14\u53ef\u4ee5\u5904\u7406\u5305\u542b\u6570\u767e\u4e07\u4e2a\u7ec6\u80de\u7684\u6837\u672c\u3002\u6700\u540e\u5927\u6d77\u54e5\u7ed9\u5927\u5bb6\u4ecb\u7ecd\u4e00\u4e2a\u4e91\u5de5\u5177\uff01\u540c\u5b66\u4eec\u5982\u679c\u89c9\u5f97\u81ea\u5df1\u7684\u4ee3\u7801\u6c34\u5e73\u4e00\u822c\uff0c\u5bf9\u4e8e\u5f88\u591a\u7684\u53c2\u6570\u4e0d\u77e5\u9053\u600e\u4e48\u6539\uff0c\u53ef\u4ee5\u4f53\u9a8c\u4e00\u4e0b\u6211\u4eec\u7684\u4e91\u751f\u4fe1\u5c0f\u5de5\u5177\uff0c\u53ea\u9700\u8f93\u5165\u6570\u636e\uff0c\u5373\u53ef\u8f7b\u677e\u751f\u6210\u6240\u9700\u56fe\u8868\uff0c\u5b57\u4f53\u5927\u5c0f\u3001\u6807\u9898\u7b49\u4e5f\u53ef\u4e00\u952e\u66f4\u6539\u3002\u611f\u5174\u8da3\u7684\u5c0f\u4f19\u4f34\u53bb\u4e91\u751f\u4fe1\uff08http:\/\/www.biocloudservice.com\/home.html\uff09\u4f53\u9a8c\u4e00\u4e0b\u5427\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u8c08\u8d77\u751f\u4fe1\u5206\u6790\u5fc5\u5907\u9879\u76ee\u514d\u75ab\u6d78\u6da6\u5206\u6790\uff0c\u5c0f\u4f19\u4f34\u4eec\u518d\u719f\u6089\u4e0d\u8fc7\u4e86\uff01\u50cf\u5c0f\u4f19\u4f34\u4eec\u8033\u719f\u80fd\u8be6\u7684ImmuCellAL\u3001Cib [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":""},"categories":[1],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/61051"}],"collection":[{"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=61051"}],"version-history":[{"count":1,"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/61051\/revisions"}],"predecessor-version":[{"id":61060,"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/61051\/revisions\/61060"}],"wp:attachment":[{"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=61051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=61051"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.biocloudservice.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=61051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}