a b/myeloid/myeloid_fig1ABCDE_publish.ipynb
1
{
2
 "cells": [
3
  {
4
   "cell_type": "code",
5
   "execution_count": null,
6
   "metadata": {},
7
   "outputs": [],
8
   "source": [
9
    "import numpy as np\n",
10
    "import pandas as pd\n",
11
    "import scanpy as sc # v1.6\",\n",
12
    "import sys\n",
13
    "import matplotlib.pyplot as plt\n",
14
    "import os.path\n",
15
    "import anndata\n",
16
    "from matplotlib import rcParams\n",
17
    "import seaborn as sns\n",
18
    "import numba\n",
19
    "import mnnpy\n",
20
    "import scipy"
21
   ]
22
  },
23
  {
24
   "cell_type": "code",
25
   "execution_count": null,
26
   "metadata": {},
27
   "outputs": [],
28
   "source": [
29
    "#import full COVID-19 PBMC dataset\n",
30
    "os.chdir('/home/ngr18/covid/')\n",
31
    "covid_total = sc.read_h5ad('covid.h5ad')"
32
   ]
33
  },
34
  {
35
   "cell_type": "code",
36
   "execution_count": null,
37
   "metadata": {},
38
   "outputs": [],
39
   "source": [
40
    "#Import BAL data GSE145926 (reannotated for DC subsets)\n",
41
    "\n",
42
    "os.chdir('/home/ngr18/covid/external_dataset/BAL')\n",
43
    "bal = sc.read_h5ad('full_bal.h5ad')"
44
   ]
45
  },
46
  {
47
   "cell_type": "code",
48
   "execution_count": null,
49
   "metadata": {},
50
   "outputs": [],
51
   "source": [
52
    "#Subset PBMC data to myeloid populations and reorder categories (for dotplot visualisations)\n",
53
    "\n",
54
    "blood_myeloid = covid_total[covid_total.obs.full_clustering.isin(['CD83_CD14_mono', 'CD14_mono', \n",
55
    "                                                                  'CD16_mono', 'C1_CD16_mono',\n",
56
    "                                                                 'DC1', 'DC2', 'DC3', 'ASDC', 'pDC', 'DC_prolif',\n",
57
    "                                                                 'Mono_prolif']),:]\n",
58
    "\n",
59
    "blood_myeloid.obs.full_clustering = blood_myeloid.obs.full_clustering.cat.reorder_categories([\n",
60
    "'DC1', 'DC2', 'DC3', 'ASDC', 'pDC', 'DC_prolif', \n",
61
    "    'CD83_CD14_mono', 'CD14_mono', 'CD16_mono', 'C1_CD16_mono', 'Mono_prolif'])"
62
   ]
63
  },
64
  {
65
   "cell_type": "code",
66
   "execution_count": null,
67
   "metadata": {},
68
   "outputs": [],
69
   "source": [
70
    "#Concatenate PBMC and BAL data for visualisations\n",
71
    "\n",
72
    "myeloid = anndata.concat([bal_myeloid, blood_myeloid], index_unique = None)"
73
   ]
74
  },
75
  {
76
   "cell_type": "code",
77
   "execution_count": null,
78
   "metadata": {},
79
   "outputs": [],
80
   "source": [
81
    "##myeloid figure dotplot - fig 2A (left - RNA)\n",
82
    "\n",
83
    "sc.pl.DotPlot(myeloid, [\n",
84
    "'CLEC9A', 'CADM1', 'CLEC10A','CD1C', 'CD14', 'VCAN',\n",
85
    "    'CCR7', 'LAMP3',\n",
86
    "                            'AXL', 'SIGLEC6',\n",
87
    "                            'LILRA4', 'ITM2C', 'GZMB',\n",
88
    "    'IL1B', 'IER3', 'LDLR', 'CD83',\n",
89
    "                         'S100A12', 'CSF3R', \n",
90
    "                        'FCGR3A', 'MS4A7', 'LILRB1', 'CSF1R', 'CDKN1C',\n",
91
    "                         'C1QA', 'C1QB', 'C1QC', 'CCR1',\n",
92
    "    \n",
93
    "    'MARCO', 'MKI67', 'TOP2A'], \n",
94
    "              log = True, \n",
95
    "              groupby='full_clustering').style(cmap='Blues',dot_edge_color='black', dot_edge_lw=1).swap_axes(False).show(True)\n"
96
   ]
97
  },
98
  {
99
   "cell_type": "code",
100
   "execution_count": null,
101
   "metadata": {},
102
   "outputs": [],
103
   "source": [
104
    "##myeloid figure dotplot - fig 2A (right - protein) - using only PBMC data (no CITEseq data for BAL)\n",
105
    "\n",
106
    "sc.pl.DotPlot(blood_myeloid, ['AB_CD141', 'AB_CLEC9A', 'AB_KIT','AB_BTLA',\n",
107
    "                            'AB_CD1C', 'AB_CD101', 'AB_FcERIa',\n",
108
    "                            'AB_CD5', \n",
109
    "                            'AB_CD123', 'AB_CD45RA', 'AB_CD304',\n",
110
    "                            'AB_CD14', 'AB_CD99', 'AB_CD64',  \n",
111
    "                            'AB_CR1', 'AB_ITGAM',\n",
112
    "                            'AB_CD16', 'AB_C5AR1',\n",
113
    "                              'AB_CX3CR1'], \n",
114
    "              log = True, \n",
115
    "              groupby='full_clustering',  expression_cutoff=0.15).style(cmap='YlOrRd',dot_edge_color='black', dot_edge_lw=1).swap_axes(False).show(True)\n"
116
   ]
117
  },
118
  {
119
   "cell_type": "code",
120
   "execution_count": null,
121
   "metadata": {},
122
   "outputs": [],
123
   "source": [
124
    "#subset data again to blood monocyte and BAL macrophages\n",
125
    "\n",
126
    "monos = myeloid[myeloid.obs.full_clustering.isin(['CD83_CD14_mono', 'CD14_mono', 'CD16_mono', 'C1_CD16_mono', \n",
127
    "                                                 'bal_Mac']),:]"
128
   ]
129
  },
130
  {
131
   "cell_type": "code",
132
   "execution_count": null,
133
   "metadata": {},
134
   "outputs": [],
135
   "source": [
136
    "#Figure 2C left/upper - analysis of healthy only\n",
137
    "healthy = monos[monos.obs.Status_on_day_collection_summary.isin(['bal_healthy', 'Healthy']),:]\n",
138
    "\n",
139
    "sc.pp.normalize_total(healthy, target_sum=1e4)\n",
140
    "\n",
141
    "sc.pp.log1p(healthy)\n",
142
    "\n",
143
    "sc.pp.highly_variable_genes(healthy, n_top_genes = 3000, flavor = 'seurat')\n",
144
    "\n",
145
    "healthy.raw = healthy\n",
146
    "\n",
147
    "healthy = healthy[:, healthy.var.highly_variable]\n",
148
    "\n",
149
    "sc.pp.scale(healthy, max_value=10)\n",
150
    "\n",
151
    "sc.tl.pca(healthy, svd_solver='arpack')\n",
152
    "\n",
153
    "sc.external.pp.harmony_integrate(healthy, 'sample_id', basis='X_pca', adjusted_basis='X_pca_harmony')\n",
154
    "\n",
155
    "sc.pp.neighbors(healthy, n_neighbors=10, n_pcs=50, use_rep = 'X_pca_harmony')\n",
156
    "\n",
157
    "sc.tl.paga(healthy, groups='full_clustering')\n",
158
    "\n",
159
    "#recolor clusters for consistency with bar graph\n",
160
    "\n",
161
    "healthy.uns['full_clustering_colors'][0] = '#76DDC9'\n",
162
    "healthy.uns['full_clustering_colors'][1] = '#E28686'\n",
163
    "healthy.uns['full_clustering_colors'][2] = '#C2A3E2'\n",
164
    "healthy.uns['full_clustering_colors'][3] = '#991111'\n",
165
    "healthy.uns['full_clustering_colors'][4] = '#ffff00'\n",
166
    "\n",
167
    "\n",
168
    "sc.pl.paga(test, color=['full_clustering'], threshold = 0.11, save = 'healthy_myeloid_PAGA.pdf',\n",
169
    "           fontsize = 0, node_size_scale = 10, min_edge_width = 5, frameon = False)"
170
   ]
171
  },
172
  {
173
   "cell_type": "code",
174
   "execution_count": null,
175
   "metadata": {},
176
   "outputs": [],
177
   "source": [
178
    "#Figure 2C left/lower - limit to only covid samples\n",
179
    "covid_mono = covid_mono[covid_mono.obs.Status_on_day_collection_summary.isin(['Asymptomatic', 'Critical', \n",
180
    "                                                            'Mild', 'Moderate', 'Severe',\n",
181
    "                                                            'bal_mild', 'bal_severe']),:]\n",
182
    "\n",
183
    "sc.pp.normalize_total(covid_mono, target_sum=1e4)\n",
184
    "\n",
185
    "sc.pp.log1p(covid_mono)\n",
186
    "\n",
187
    "sc.pp.highly_variable_genes(covid_mono, n_top_genes = 3000, flavor = 'seurat')\n",
188
    "\n",
189
    "covid_mono.raw = covid_mono\n",
190
    "\n",
191
    "covid_mono = covid_mono[:, covid_mono.var.highly_variable]\n",
192
    "\n",
193
    "sc.pp.scale(covid_mono, max_value=10)\n",
194
    "\n",
195
    "sc.tl.pca(covid_mono, svd_solver='arpack')\n",
196
    "\n",
197
    "sc.external.pp.harmony_integrate(covid_mono, 'sample_id', basis='X_pca', adjusted_basis='X_pca_harmony')\n",
198
    "\n",
199
    "sc.pp.neighbors(covid_mono, n_neighbors=10, n_pcs=50, use_rep = 'X_pca_harmony')\n",
200
    "\n",
201
    "sc.tl.paga(covid_mono, groups='full_clustering')\n",
202
    "\n",
203
    "#Again, recolor for consistency with bar graph\n",
204
    "\n",
205
    "covid_mono.uns['full_clustering_colors'][0] = '#76DDC9'\n",
206
    "covid_mono.uns['full_clustering_colors'][1] = '#E28686'\n",
207
    "covid_mono.uns['full_clustering_colors'][2] = '#C2A3E2'\n",
208
    "covid_mono.uns['full_clustering_colors'][3] = '#991111'\n",
209
    "covid_mono.uns['full_clustering_colors'][4] = '#ffff00'\n",
210
    "\n",
211
    "\n",
212
    "sc.pl.paga(covid_mono, color=['full_clustering'], threshold = 0.2, save = 'covid_myeloid_PAGA.pdf',\n",
213
    "           fontsize = 0, node_size_scale = 10, min_edge_width = 5, frameon = False)"
214
   ]
215
  },
216
  {
217
   "cell_type": "code",
218
   "execution_count": null,
219
   "metadata": {},
220
   "outputs": [],
221
   "source": [
222
    "#Pseudotime plot\n",
223
    "\n",
224
    "covid_mono.uns['iroot'] = np.flatnonzero(covid_mono.obs['full_clustering']  == 'CD83_CD14_mono')[0]\n",
225
    "\n",
226
    "\n",
227
    "sc.pp.log1p(covid_mono)\n",
228
    "sc.pp.scale(covid_mono)\n",
229
    "           \n",
230
    "           gene_names = ['NFKBIA',  'KLF6', 'VIM', 'CD14', 'S100A8',\n",
231
    "    'HLA-DPA1', 'HLA-DPB1', 'FCGR3A','CTSC', 'CTSL', \n",
232
    "    'CCR1','RSAD2', 'CCL2', 'CXCL10', 'CCL7', 'TNFSF10']                              # monocyte\n",
233
    "\n",
234
    "paths = [('erythrocytes', ['mono1', 'mono2', 'mono3', 'mono4', 'bal_Mac']),\n",
235
    "             ('neutrophils', ['mono1', 'mono2', 'mono3', 'mono4', 'bal_Mac']),\n",
236
    "             ('monocytes', ['mono1', 'mono2', 'mono3', 'mono4', 'bal_Mac'])]\n",
237
    "\n",
238
    "test.obs['distance'] = test.obs['dpt_pseudotime']\n",
239
    "\n",
240
    "_, axs = plt.subplots(ncols=3, figsize=(6, 5), gridspec_kw={'wspace': 0.05, 'left': 0.12})\n",
241
    "plt.subplots_adjust(left=0.05, right=0.98, top=0.82, bottom=0.2)\n",
242
    "for ipath, (descr, path) in enumerate(paths):\n",
243
    "    _, data = sc.pl.paga_path(\n",
244
    "            test, path, gene_names,\n",
245
    "            show_node_names=False,\n",
246
    "            ax=axs[ipath],\n",
247
    "            ytick_fontsize=12,\n",
248
    "            left_margin=0.15,\n",
249
    "            n_avg=50,\n",
250
    "            annotations=['distance'],\n",
251
    "            show_yticks=True if ipath==0 else False,\n",
252
    "            show_colorbar=False,\n",
253
    "            color_map='coolwarm',\n",
254
    "            color_maps_annotations={'distance': 'viridis'},\n",
255
    "            title='{} path'.format(descr),\n",
256
    "            return_data=True,\n",
257
    "            show=False, normalize_to_zero_one = True)"
258
   ]
259
  }
260
 ],
261
 "metadata": {
262
  "kernelspec": {
263
   "display_name": "covid_py",
264
   "language": "python",
265
   "name": "covid_py"
266
  },
267
  "language_info": {
268
   "codemirror_mode": {
269
    "name": "ipython",
270
    "version": 3
271
   },
272
   "file_extension": ".py",
273
   "mimetype": "text/x-python",
274
   "name": "python",
275
   "nbconvert_exporter": "python",
276
   "pygments_lexer": "ipython3",
277
   "version": "3.8.5"
278
  }
279
 },
280
 "nbformat": 4,
281
 "nbformat_minor": 4
282
}