Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
custom
Amodio_Infertility_2023
Commits
1e116618
Commit
1e116618
authored
Jan 09, 2025
by
Giorgia Giacomini
Browse files
GSEA tile plot script
parent
69a923bd
Changes
1
Hide whitespace changes
Inline
Side-by-side
Script/Figure_5b.R
0 → 100644
View file @
1e116618
# Loads the necessary libraries for data analysis and visualization
library
(
reshape2
)
library
(
ggplot2
)
library
(
dplyr
)
library
(
RColorBrewer
)
library
(
gplots
)
library
(
pheatmap
)
library
(
Seurat
)
# Loads the GSEA results from an RDS file
gsea_res
<-
readRDS
(
"/beegfs/scratch/ric.gregori/ric.gregori/Infertility/object/gsea_intracluster_OAT_NOA_vs_FER.rds"
)
# Removes comparisons between NOA and OAT
index
<-
c
(
3
,
6
,
9
,
12
,
15
,
18
,
21
,
24
,
27
)
gsea_res
<-
gsea_res
[
-
index
]
# Divides the results into two groups: OAT vs FER and NOA vs FER
gsea_OAT_vs_FER
<-
gsea_res
[
-
c
(
2
,
4
,
6
,
8
,
10
,
12
,
14
,
16
,
18
)]
gsea_NOA_vs_FER
<-
gsea_res
[
-
c
(
1
,
3
,
5
,
7
,
9
,
11
,
13
,
15
,
17
)]
# Combines the two groups
gsea_res
<-
append
(
gsea_OAT_vs_FER
,
gsea_NOA_vs_FER
)
# Initializes empty list and dataframe
gsea_df_melt
<-
list
()
counter
<-
1
gsea_df
<-
NULL
# Extracts GSEA results for each comparison
for
(
i
in
names
(
gsea_res
)){
print
(
i
)
if
(
is.null
(
gsea_res
[[
i
]])){
next
()
}
else
if
(
nrow
(
gsea_res
[[
i
]]
@
result
)
==
0
){
next
}
else
{
gsea_df
[[
i
]]
<-
gsea_res
[[
i
]]
@
result
}
}
# Defines the correct order for the classifications
right_classification
<-
c
(
"CD4+ Tfh_OAT_vs_FER"
,
"CD4+ Th2_OAT_vs_FER"
,
"CD4+ Th1/Th17_OAT_vs_FER"
,
"CD4+ CD8+_OAT_vs_FER"
,
"CD4+ CD8+ TEM_OAT_vs_FER"
,
"CD8+ TCM(Gzk+)_OAT_vs_FER"
,
"CD8+ TE(TOX+)_OAT_vs_FER"
,
"CD8+ TE (GzK+)_OAT_vs_FER"
,
"CD8+ TEM_OAT_vs_FER"
,
"CD4+ Tfh_NOA_vs_FER"
,
"CD4+ Th2_NOA_vs_FER"
,
"CD4+ Th1/Th17_NOA_vs_FER"
,
"CD4+ CD8+_NOA_vs_FER"
,
"CD4+ CD8+ TEM_NOA_vs_FER"
,
"CD8+ TCM(Gzk+)_NOA_vs_FER"
,
"CD8+ TE(TOX+)_NOA_vs_FER"
,
"CD8+ TE (GzK+)_NOA_vs_FER"
,
"CD8+ TEM_NOA_vs_FER"
)
# Gets the indices to reorder the dataframe
order_indices
<-
match
(
right_classification
,
names
(
gsea_df
))
# Reorder the dataframe
gsea_df
<-
gsea_df
[
order_indices
]
# Extracts information from each dataframe
for
(
i
in
names
(
gsea_df
))
{
cluster
<-
unlist
(
strsplit
(
x
=
i
,
split
=
"_"
))[
1
]
comparison
<-
unlist
(
sub
(
x
=
i
,
"^.+?_"
,
""
))
gsea_df
[[
i
]]
$
cluster
<-
cluster
gsea_df
[[
i
]]
$
comparison
<-
comparison
gsea_df
[[
i
]]
$
ID
<-
gsub
(
gsea_df
[[
i
]]
$
ID
,
pattern
=
"HALLMARK_"
,
replacement
=
""
)
gsea_df_melt
[[
i
]]
<-
melt
(
data
=
gsea_df
[[
i
]],
id.vars
=
c
(
"ID"
,
"p.adjust"
,
"comparison"
,
"cluster"
),
measure.vars
=
c
(
"NES"
))
gsea_df_melt
[[
i
]]
$
value
<-
round
(
gsea_df_melt
[[
i
]]
$
value
,
digits
=
2
)
counter
<-
counter
+
1
}
# Combines all dataframes into a single dataframe
total
<-
bind_rows
(
gsea_df
,
.id
=
"Classification"
)
total_melt
<-
bind_rows
(
gsea_df_melt
,
.id
=
"Classification"
)
#min(total_melt$value, na.rm = T)#-2.4
#max(total_melt$value, na.rm = T)#2.37
# Defines the levels of the factors for ordering variables
total_melt
$
ID
<-
factor
(
total_melt
$
ID
,
levels
=
term_right
)
total_melt
$
Classification
<-
factor
(
total_melt
$
Classification
,
levels
=
unique
(
right_classification
))
# Transforms the data into a format suitable for visualization
total_cast_melt
<-
melt
(
dcast
(
data
=
total_melt
,
formula
=
ID
~
Classification
,
value.var
=
'value'
),
id.vars
=
'ID'
)
# Extracts the cluster and comparison from the column labels
total_cast_melt
$
cluster
<-
stringr
::
str_split_fixed
(
total_cast_melt
$
variable
,
"_"
,
2
)[,
1
]
total_cast_melt
$
comparison
<-
stringr
::
str_split_fixed
(
total_cast_melt
$
variable
,
"_"
,
2
)[,
2
]
# Defines the GSEA terms and their groups
term_right
<-
c
(
"NOTCH_SIGNALING"
,
"MTORC1_SIGNALING"
,
"KRAS_SIGNALING_DN"
,
"WNT_BETA_CATENIN_SIGNALING"
,
"TGF_BETA_SIGNALING"
,
"PI3K_AKT_MTOR_SIGNALING"
,
"EPITHELIAL_MESENCHYMAL_TRANSITION"
,
"MYOGENESIS"
,
"APICAL_JUNCTION"
,
"COAGULATION"
,
"COMPLEMENT"
,
"ALLOGRAFT_REJECTION"
,
"IL2_STAT5_SIGNALING"
,
"IL6_JAK_STAT3_SIGNALING"
,
"INFLAMMATORY_RESPONSE"
,
"INTERFERON_GAMMA_RESPONSE"
,
"INTERFERON_ALPHA_RESPONSE"
,
"TNFA_SIGNALING_VIA_NFKB"
,
"G2M_CHECKPOINT"
,
"MITOTIC_SPINDLE"
,
"MYC_TARGETS_V2"
,
"MYC_TARGETS_V1"
,
"APOPTOSIS"
,
"UV_RESPONSE_DN"
,
"UV_RESPONSE_UP"
,
"P53_PATHWAY"
,
"UNFOLDED_PROTEIN_RESPONSE"
,
"PROTEIN_SECRETION"
,
"GLYCOLYSIS"
,
"HYPOXIA"
,
"CHOLESTEROL_HOMEOSTASIS"
,
"ESTROGEN_RESPONSE_EARLY"
,
"ESTROGEN_RESPONSE_LATE"
,
"FATTY_ACID_METABOLISM"
,
"BILE_ACID_METABOLISM"
)
group_letter
<-
c
(
rep
(
"A_CellSignaling"
,
9
),
rep
(
"B_ImmuneResponse"
,
9
),
rep
(
"C_CellCycle"
,
4
),
rep
(
"D_CellStress"
,
6
),
rep
(
"E_Metabolism"
,
7
))
terms_group
<-
data.frame
(
term_right
=
term_right
,
group_letter
=
group_letter
)
# Merges the data with the information about the GSEA term groups
total_cast_melt
<-
merge
(
total_cast_melt
,
terms_group
,
by.x
=
"ID"
,
by.y
=
"term_right"
,
all.x
=
T
)
# Define the order of comparison
total_cast_melt
$
comparison
<-
factor
(
total_cast_melt
$
comparison
,
levels
=
c
(
"OAT_vs_FER"
,
"NOA_vs_FER"
))
# Define the order of clusters
total_cast_melt
$
cluster
<-
factor
(
total_cast_melt
$
cluster
,
levels
=
c
(
"CD4+ Tfh"
,
"CD4+ Th2"
,
"CD4+ Th1/Th17"
,
"CD4+ CD8+"
,
"CD4+ CD8+ TEM"
,
"CD8+ TCM(Gzk+)"
,
"CD8+ TE(TOX+)"
,
"CD8+ TE (GzK+)"
,
"CD8+ TEM"
))
# Define the order of groups (pathways)
total_cast_melt
$
group_letter
<-
factor
(
total_cast_melt
$
group_letter
,
levels
=
c
(
"E_Metabolism"
,
"D_CellStress"
,
"C_CellCycle"
,
"B_ImmuneResponse"
,
"A_CellSignaling"
))
#sort(unique(total_cast_melt$group_letter))
# Create the GSEA tile plot using ggplot2
gsea_tile_plot
<-
ggplot
(
data
=
total_cast_melt
,
mapping
=
aes
(
x
=
cluster
,
y
=
ID
))
+
facet_grid
(
group_letter
~
comparison
,
scales
=
"free"
,
space
=
"free"
)
+
geom_tile
(
aes
(
fill
=
value
),
width
=
0.80
,
height
=
0.80
,
color
=
"white"
,
lwd
=
0.1
,
linetype
=
5
,
size
=
0.20
)
+
labs
(
fill
=
"NES"
)
+
ggtitle
(
label
=
"GSEA hallmarks"
,
subtitle
=
" Intracluster - padj < 0.1"
)
+
theme
(
axis.text.x
=
element_text
(
angle
=
90
,
vjust
=
0.5
,
hjust
=
1
,
size
=
10
),
strip.text.x
=
element_text
(
size
=
16
),
strip.text.y
=
element_text
(
size
=
0
),
strip.background
=
element_blank
(),
plot.title
=
element_text
(
hjust
=
0
,
size
=
18
),
plot.subtitle
=
element_text
(
hjust
=
0
,
size
=
12
),
axis.ticks
=
element_blank
(),
axis.text.y
=
element_text
(
size
=
9
),
axis.title
=
element_blank
(),
panel.grid.major
=
element_blank
(),
panel.grid.minor
=
element_blank
(),
panel.spacing.x
=
unit
(
.3
,
"cm"
),
panel.spacing.y
=
unit
(
.3
,
"cm"
),
panel.background
=
element_rect
(
fill
=
"white"
))
+
scale_fill_gradient2
(
na.value
=
'#ECECED'
,
limits
=
c
(
-2.5
,
2.5
),
breaks
=
seq
(
-3
,
3
,
by
=
1
),
low
=
'#005295'
,
high
=
'#770000'
,
mid
=
'white'
)
# +
# Save the plot to a file
ggsave
(
filename
=
"GSEA_tile_plot.png"
,
width
=
7
,
height
=
6
,
plot
=
gsea_tile_plot
)
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment