library(pheatmap)
library(WGCNA)
## Warning: package 'WGCNA' was built under R version 4.3.3
## Loading required package: dynamicTreeCut
## Loading required package: fastcluster
## Warning: package 'fastcluster' was built under R version 4.3.3
##
## Attaching package: 'fastcluster'
## The following object is masked from 'package:stats':
##
## hclust
##
##
## Attaching package: 'WGCNA'
## The following object is masked from 'package:stats':
##
## cor
camk2a.Final.result.Resilience.heatmap.at.neg.log10.P <- readRDS("~/Desktop/CAMK2A.MITO.BOX.july.2025/Camk2a.Manuscript.Figure6/camk2a.Final.result.Resilience.heatmap.at.neg.log10.P.rds")
result <- camk2a.Final.result.Resilience.heatmap.at.neg.log10.P
result
## $pvalues
## Pro.Resilience Anti.Resilience
## pink 0.352603748 0.00000000
## greenyellow 0.096012584 0.81577437
## blue 1.358960261 0.05546199
## green 0.217837461 0.11648984
## yellow 0.004395637 0.33422356
## turquoise 0.024300750 3.22055405
## black 0.828966930 0.46112046
## red 3.115557117 0.00000000
## magenta 0.036828243 0.94875357
## tan 0.672353599 0.00000000
## brown 0.024257314 0.15401368
## purple 0.780995521 0.07675346
## salmon 0.337643798 0.28336846
##
## $overlap
## Pro.Resilience Anti.Resilience
## pink 5 0
## greenyellow 2 3
## blue 22 5
## green 8 3
## yellow 4 5
## turquoise 11 17
## black 7 3
## red 18 0
## magenta 2 4
## tan 3 0
## brown 6 4
## purple 6 1
## salmon 2 1
##
## $hits
## Pro.Resilience
## pink "AAK1;DLG3;DLGAP4;PDE4B;RAB3B"
## greenyellow "AAK1;DMTN"
## blue "ACAD9;AP1B1;ATAD1;BDH1;CPLX3;CTNNB1;CYB5R1;CYFIP2;DBT;HPCA;IDH2;IDH3A;IDH3B;LANCL2;LRPPRC;NDUFS8;PRRT3;RPH3A;SLC25A13;TIMM44;TLN2;TMEM65"
## green "CS;FBXO41;MGST3;MPC2;NF1;PDHB;SLC25A11;SLC25A3"
## yellow "ASAP1;CLASP2;FSD1;MAP2"
## turquoise "ACTN1;CDK5;CPLX1;DNM1L;FBXL16;PPP1CA;PPP2R1A;PRKCE;RAP1GDS1;TIMM13;YWHAQ"
## black "AP1B1;GPHN;NDRG2;PAK1;PPP5C;PYGM;VAC14"
## red "AHCYL1;ATP1A1;ATP2B2;CYFIP2;GAD2;GNB5;GNG3;GRIA3;L2HGDH;LRRC4B;MFN2;PDHA1;PLCB1;RAB35;SGIP1;SLC25A46;SLC4A10;SYNGAP1"
## magenta "BCKDHB;GSK3B"
## tan "CAMKK2;COX4I1;GSK3A"
## brown "ATP2A2;DCLK1;RPL13;RPL30;RPS25;RPS3"
## purple "CACNG8;CPNE4;KALRN;MTX2;RAP1GDS1;SYT12"
## salmon "MAP7D1;RTN4"
## Anti.Resilience
## pink ""
## greenyellow "AMPH;SNX12;WDR1"
## blue "ATP8A1;EHD1;KIF2A;LSAMP;SBF1"
## green "AKR1B1;CPE;RAB1A"
## yellow "ALDH9A1;EEF1A2;GLO1;GRHPR;SF3B3"
## turquoise "ALDOA;DGKG;DPYSL2;GPD1;LDHB;LTA4H;MAPK1;MAT2A;MDH1;PGM2;PKM;PLEC;SCRN1;TPI1;TUBA4A;TUBB4A;UBA1"
## black "DPYSL2;ESD;VAT1L"
## red ""
## magenta "MAP2K1;PKM;SCCPDH;TMEM30A"
## tan ""
## brown "GNG12;MDN1;PLEC;SEC22B"
## purple "BPNT1"
## salmon "UPF1"
##### Heatmap code
## ---- 0) Module order & colors from your legend ------------------------------
module_order <- c(
"tan", "turquoise", "yellow", "greenyellow", "pink", "magenta", "purple",
"green", "blue", "red", "brown", "black", "salmon"
)
module_colors <- c(
tan = "#D2B48C",
turquoise = "#00CED1",
yellow = "#FFFF00",
greenyellow = "#ADFF2F",
pink = "#FFC0CB",
magenta = "#FF00FF",
purple = "#800080",
green = "#008000",
blue = "#0000FF",
red = "#FF0000",
brown = "#A52A2A",
black = "#000000",
salmon = "#FA8072"
)
## ---- 1) Pull your -log10(p) matrix safely -----------------------------------
Pneg_df <- result$pvalues
rn <- rownames(Pneg_df); cn <- colnames(Pneg_df)
Pneg <- as.matrix(
data.frame(lapply(Pneg_df, function(x) as.numeric(as.character(x))),
check.names = FALSE, stringsAsFactors = FALSE)
)
rownames(Pneg) <- rn; colnames(Pneg) <- cn
## ---- 2) Reorder rows according to desired legend order ----------------------
Pneg <- Pneg[module_order, , drop = FALSE]
## ---- 3) Back-convert to p-values --------------------------------------------
Praw <- 10^(-Pneg)
## ---- 4) Stars & label formatting --------------------------------------------
stars <- matrix("", nrow = nrow(Pneg), ncol = ncol(Pneg), dimnames = dimnames(Pneg))
stars[Pneg >= 1.3 & Pneg < 2.0] <- "*"
stars[Pneg >= 2.0 & Pneg < 2.3] <- "**"
stars[Pneg >= 2.3] <- "***"
fmt <- function(x) ifelse(x < 1e-3, formatC(x, format = "e", digits = 1), signif(x, 2))
vals <- ifelse(Pneg >= 1.3, fmt(Praw), "")
display_numbers <- ifelse(stars == "", vals, paste(vals, stars))
## ---- 5) Color matrix: cap at 3; NA for p ≥ 0.05 -----------------------------
Z <- pmin(Pneg, 3) # clamp max for consistent legend top
Z[Z < 1.3 | is.na(Z)] <- NA # p ≥ 0.05 → white
## ---- 6) Fixed palette and breaks (0..3) -------------------------------------
ramp <- colorRampPalette(c("#FFFFFF", "#FFA500", "#A020F0"))(300)
brks <- seq(0, 3, length.out = length(ramp) + 1)
leg_ticks <- 0:3
leg_labels <- c("0", "1 (p=0.1)", "2 (0.01)", "3 (1e-3)")
## ---- 7) Row annotation ------------------------------------------------------
ann_row <- data.frame(Module = factor(rownames(Pneg), levels = module_order))
rownames(ann_row) <- rownames(Pneg)
ann_cols <- list(Module = module_colors)
## ---- 8) Plot ----------------------------------------------------------------
pheatmap(
Z,
cluster_rows = FALSE, cluster_cols = FALSE,
color = ramp, breaks = brks, na_col = "white",
legend_breaks = leg_ticks, legend_labels = leg_labels,
display_numbers = display_numbers, number_color = "black", fontsize_number = 12,
angle_col = 90,
main = "CAMK2A FET (−log10 p; capped at 3; white = p ≥ 0.05)",
annotation_row = ann_row, annotation_colors = ann_cols,
border_color = "grey85"
)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A FET (−log10 p; capped at 3; white = p ≥ 0.05)' in
## 'mbcsToSbcs': dot substituted for <e2>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A FET (−log10 p; capped at 3; white = p ≥ 0.05)' in
## 'mbcsToSbcs': dot substituted for <88>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A FET (−log10 p; capped at 3; white = p ≥ 0.05)' in
## 'mbcsToSbcs': dot substituted for <92>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A FET (−log10 p; capped at 3; white = p ≥ 0.05)' in
## 'mbcsToSbcs': dot substituted for <e2>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A FET (−log10 p; capped at 3; white = p ≥ 0.05)' in
## 'mbcsToSbcs': dot substituted for <89>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A FET (−log10 p; capped at 3; white = p ≥ 0.05)' in
## 'mbcsToSbcs': dot substituted for <a5>

library(readr)
camk2a_FET_Overlap_in_Cognitive_CAMK2A_21july_csv_DuplicatesALLOWED_hitListStats <- read_csv("camk2a.FET.Overlap.in.Cognitive.CAMK2A_21july.csv-DuplicatesALLOWED-hitListStats.csv")
## New names:
## Rows: 18 Columns: 14
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," chr
## (14): ...1, tan, turquoise, yellow, black, purple, greenyellow, pink, gr...
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`
camk2a_FET_Overlap_in_Cognitive_CAMK2A_21july_csv_DuplicatesALLOWED_hitListStats
## # A tibble: 18 × 14
## ...1 tan turquoise yellow black purple greenyellow pink green blue red
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 <NA> FET … FET pVal… FET p… FET … FET p… FET pValue FET … FET … FET … FET …
## 2 Pro.… 0.20… 0.932438… 0.987… 0.13… 0.152… 0.78944040… 0.42… 0.57… 0.04… 0.00…
## 3 Anti… 1 0.000443… 0.440… 0.33… 0.830… 0.14468273… 1 0.74… 0.86… 1
## 4 <NA> FDR … FDR corr… FDR c… FDR … FDR c… FDR correc… FDR … FDR … FDR … FDR …
## 5 Pro.… 0.65… 1 1 0.56… 0.564… 1 0.96… 1 0.36… 0.00…
## 6 Anti… 1 0.007319… 0.966… 0.95… 1 0.56457713… 1 1 1 1
## 7 <NA> Over… Overlap Overl… Over… Overl… Overlap Over… Over… Over… Over…
## 8 Pro.… 3 11 4 7 6 2 5 8 22 18
## 9 Anti… 0 17 5 3 1 3 0 3 5 0
## 10 <NA> Cate… Category… Categ… Cate… Categ… CategoryHi… Cate… Cate… Cate… Cate…
## 11 Pro.… 115 115 115 115 115 115 115 115 115 115
## 12 Anti… 54 54 54 54 54 54 54 54 54 54
## 13 <NA> Cate… Category… Categ… Cate… Categ… CategoryHi… Cate… Cate… Cate… Cate…
## 14 <NA> 115 115 115 115 115 115 115 115 115 115
## 15 <NA> 54 54 54 54 54 54 54 54 54 54
## 16 <NA> Over… Overlapp… Overl… Over… Overl… Overlapped… Over… Over… Over… Over…
## 17 Pro.… CAMK… ACTN1;CD… ASAP1… AP1B… CACNG… AAK1;DMTN AAK1… CS;F… ACAD… AHCY…
## 18 Anti… <NA> ALDOA;DG… ALDH9… DPYS… BPNT1 AMPH;SNX12… <NA> AKR1… ATP8… <NA>
## # ℹ 3 more variables: salmon <chr>, brown <chr>, magenta <chr>
refData <- readRDS("~/Desktop/CAMK2A.MITO.BOX.july.2025/Camk2a.Manuscript.Figure6/refData.rds")
refData
## $Pro.Resilience
## [1] "ACTN4" "NRN1" "SGTB" "EPHX4" "SH3GL1"
## [6] "RPH3A" "CPLX1" "ERI3" "TLN2" "CYB5R1"
## [11] "SLC4A8" "GNG3" "ACAD9" "HMOX2" "ATP2A2"
## [16] "ATAD1" "PDHA1" "IDH2" "SNRPF" "NDUFS8"
## [21] "MOB4" "GK" "ENSA" "EPRS" "KCNK15"
## [26] "UBE4B" "DIRAS1" "AHCYL1" "DCLK1" "GCSH"
## [31] "GAD2" "SLC8A3" "TIMM13" "CACNG8" "ATP2B2"
## [36] "GK3" "SYNGAP1" "BCKDHB" "PPP5C" "EIF3M"
## [41] "PICK1" "ARMC8" "RPS3" "PLCL2" "PDHA2"
## [46] "FBXO41" "GPR37L1" "ND3" "CBLN4" "SLC4A10"
## [51] "CKAP4" "GPHN" "PPP2R5A" "CPT1A" "BDH1"
## [56] "RPL10" "CADPS2" "ADRBK1" "CPNE4" "CTNNB1"
## [61] "CTNNA2" "VAC14" "MAP7D1" "TMOD1" "GSK3B"
## [66] "BAI1" "KIAA1549L" "LRRC4B" "CACNG2" "TIMM8B"
## [71] "NT5DC1" "VKORC1L1" "MLIP" "CDC42SE2" "PRKG2"
## [76] "WARS" "PLEKHA5" "NFS1" "PORCN" "FAM49B"
## [81] "PPP1CA" "ADCY1" "VPS28" "LOC220686" "RPL13"
## [86] "D2HGDH" "HSDL2" "RNMT" "UBL7" "SYNPO"
## [91] "NDUFB7" "DLGAP4" "PCP4" "RIMBP2" "TIMM44"
## [96] "BCAT2" "PHKA1" "TRAPPC6B" "SYVN1" "AGL"
## [101] "C19orf26" "PDCD6" "MPC2" "YARS" "CACNG3"
## [106] "NDRG2" "GRIN2C" "PITPNA" "DNM1L" "TATDN1"
## [111] "SLC22A23" "PAK1" "PLCB1" "COA1" "RPL36"
## [116] "LARS2" "PRKRA" "SGIP1" "RPS15A" "YWHAQ"
## [121] "L2HGDH" "TMEM65" "PPEF1" "GNB5" "FERMT2"
## [126] "RRM1" "SNAP25" "FLYWCH2" "PLAA" "AP1B1"
## [131] "FBXL16" "CPLX3" "PPP2R1A" "GSK3A" "RPL13A"
## [136] "CALB1" "ACTN1" "FAM103A1" "SLC25A11" "PRKCE"
## [141] "HMGB3" "EML1" "SULT4A1" "LMO7" "ATP1A1"
## [146] "DBT" "AHCYL2" "GRIA3" "ICA1" "AAK1"
## [151] "KIAA0368" "C12orf57" "PDE4B" "SIPA1L1" "CABP1"
## [156] "C3orf33" "HLA-A" "HLA-A" "C18orf32" "GCA"
## [161] "RAB3B" "FRMD5" "SYT12" "LOC101928527" "CRBN"
## [166] "SLC25A3" "TIMM8A" "DLG3" "PDHB" "PRPF40B"
## [171] "LANCL2" "RPL13AP3" "OSBPL8" "MSI2" "EIF1"
## [176] "SAMD4B" "RPL30" "DNAJC19" "NRSN2" "CADPS"
## [181] "RPL9" "CYFIP2" "FAM120A" "AGPAT5" "MTX2"
## [186] "ASAP1" "RPS25" "ATXN10" "HCN1" "SST"
## [191] "LYRM7" "PYGM" "PPP2R5D" "MGST3" "SLC25A46"
## [196] "GRAMD4" "PHLDA1" "RPS5" "EIF4G3" "ADAM11"
## [201] "DMTN" "GYS1" "LRPPRC" "SCN2B" "GFRA2"
## [206] "RPLP0" "RPL5" "COX4I1" "EML6" "PRKAR1B"
## [211] "KALRN" "CSNK1A1L" "NIPSNAP1" "HTR2A" "MFN2"
## [216] "AKT3" "RPS17" "NF1" "Q9UPP5" "MRPL32"
## [221] "UBE2D3" "UBE2D2" "VTA1" "11-Sep" "GAD1"
## [226] "FAM73A" "NDUFA3" "SHD" "CTNND1" "HIBADH"
## [231] "CAMK4" "EFCAB7" "FSD1" "MCU" "FARSB"
## [236] "CAMKK2" "RPL26L1" "BAI2" "HPCA" "SDHD"
## [241] "FAM162A" "DHRS7B" "PPP2R5C" "MYO1B" "IDH3B"
## [246] "CLASP2" "CDIPT" "RPLP0P6" "ISCU" "OLFM3"
## [251] "IDH3A" "TAGLN" "SHISA7" "CS" "DRAP1"
## [256] "PPP2R2C" "ITSN2" "CDK5" "GAS7" "ROMO1"
## [261] "TMEM126B" "MAP2" "AHSP" "IARS" "ARHGEF2"
## [266] "LPCAT4" "FMOD" "GGA1" "GNAI2" "KIAA1045"
## [271] "ACTA2" "NDUFV3" "RTN4" "SDHC" "PALM2"
## [276] "PRRT3" "SRGAP2C" "MRP63" "HMGB2" "TPM2"
## [281] "RAB35" "NUMB" "TMEM63B" "AMOT" "P2RY1"
## [286] "SERPINE2" "RAP1GDS1" "TSC22D1" "RSU1" "ELMOD1"
## [291] "COL5A1" "NDUFAF1" "ACADS" "GRM3" "SLC25A13"
## [296] "RPL28" "RPS29" "NPTX2" "COL11A1"
##
## $Anti.Resilience
## [1] "SCG5" "PGLS" "LMBRD2" "GRHPR" "MDH1"
## [6] "RAB1A" "CLDN10" "PLEKHA7" "OSGEP" "DDX51"
## [11] "RNF31" "MDN1" "GALK1" "EEF1A2" "LSAMP"
## [16] "GMPR" "CYGB" "KIF13A" "ISY1" "PBXIP1"
## [21] "PKIA" "YIF1B" "CNOT1" "KIF2A" "SCGN"
## [26] "FAM151B" "AUP1" "CSK" "RNF2" "RANBP2"
## [31] "B3GNT1" "C10orf76" "NPTX1" "TMEM63C" "IGKV3D-15"
## [36] "WDR6" "TPRG1L" "MFSD6" "EDIL3" "IGLV3-12"
## [41] "RENBP" "SCRN1" "HNMT" "MAP2K1" "MPZ"
## [46] "ANO6" "CC2D1B" "PSMA6" "TUBA4A" "CHMP1A"
## [51] "SENP8" "C4orf36" "CHD4" "ESD" "SF3B3"
## [56] "Q5TZF3" "RNF17" "MASTL" "SCCPDH" "YTHDC2"
## [61] "MPP7" "PSMB9" "SEMA7A" "SCN3B" "NUDT10"
## [66] "PELO" "BUB3" "C8orf47" "AP3S2" "ISOC1"
## [71] "ALDOA" "PPIL4" "UBE2F" "MAT2A" "ISYNA1"
## [76] "ARR3" "NRIP2" "CNST" "MAP3K5" "PRKAG2"
## [81] "SOGA1" "RGPD4" "RBX1" "SGSM2" "PCSK2"
## [86] "PWP1" "TUBB4A" "STX6" "AMPH" "MAST1"
## [91] "TXNRD1" "EFTUD2" "AGAP1" "SNX15" "BOLA2B"
## [96] "HERC2" "SEC22B" "KCNC1" "PGM2" "CTGF"
## [101] "GABRA3" "XKR6" "RFC2" "Q9H330" "ASB6"
## [106] "NUP210" "GNAS" "MMS19" "MAT1A" "MID2"
## [111] "AKR1B1" "SGSM1" "STUB1" "AIDA" "ENTPD2"
## [116] "CABLES2" "EHD1" "PPIA" "WDR1" "MAT2B"
## [121] "UGP2" "LDHB" "P02774" "ALDH9A1" "POLR2J"
## [126] "GPRASP2" "CHGA" "F12" "CA8" "Q07002"
## [131] "CD58" "RGS17" "PLEC" "WRNIP1" "CCDC6"
## [136] "GPD1" "EMC1" "TBC1D22A" "GLO1" "UPF3B"
## [141] "DPYSL2" "PKM" "FHL1" "LTA4H" "PDXP"
## [146] "DGKG" "GALNT16" "HABP2" "IGHV3-15" "GNG12"
## [151] "SYT5" "AMPD2" "LRP11" "AGPAT6" "L1CAM"
## [156] "PPP2R2B" "PPCS" "CDK7" "ZC3H7A" "RPS6KA5"
## [161] "PRMT2" "PEA15" "LOC101060723" "LOC100996744" "PPIAL4F"
## [166] "TPI1" "RAB33A" "LPIN1" "RAB27B" "HTATSF1"
## [171] "UPF2" "GPI" "SIX5" "PALM3" "RBKS"
## [176] "MAPK1" "ENO1" "SLC4A2" "SLC5A3" "BTN3A3"
## [181] "HYI" "CPE" "ELP4" "PRDX1" "MAP2K6"
## [186] "DDX23" "UPF1" "SBF1" "CLCN3" "VAT1L"
## [191] "AAMP" "CNIH2" "KPNA4" "PARK7" "ABCC5"
## [196] "ZMYM5" "CLCN4" "RAB24" "ATXN1L" "TMEM30B"
## [201] "SPIRE1" "SNX12" "ATP8A1" "CCK" "KCTD2"
## [206] "YIPF6" "CARKD" "BPNT1" "PAFAH1B3" "MACROD1"
## [211] "TRA2A" "RPS6KA2" "TMEM30A" "PCF11" "EIF2B5"
## [216] "UBA1"
result.camk2a.CARLYLE.Study.UP.DOWN <- readRDS("~/Desktop/CAMK2A.MITO.BOX.july.2025/Camk2a.Manuscript.Figure6/result.camk2a.CARLYLE.Study.UP.DOWN.rds")
result <- result.camk2a.CARLYLE.Study.UP.DOWN
result
## $pvalues
## UP.regulated.neg.log10P.value Down.regulated.neg.log10P.value
## tan 0.0000000 0.46915307
## turquoise 2.8218548 0.00000000
## yellow 0.0000000 0.03580696
## black 0.0000000 0.00000000
## purple 0.0000000 0.60907902
## greenyellow 0.0000000 0.00000000
## pink 0.0000000 1.01864412
## green 0.0000000 0.19512263
## blue 0.3562179 1.43956229
## red 0.0000000 0.46169248
## salmon 0.0000000 0.00000000
## brown 0.2067589 0.32803682
## magenta 0.5019169 0.18994406
##
## $overlap
## UP.regulated Down.regulated
## tan 0 1
## turquoise 6 0
## yellow 0 1
## greenyellow 0 0
## pink 0 3
## magenta 1 1
## purple 0 2
## green 0 2
## blue 2 8
## red 0 3
## brown 1 3
## black 0 0
## salmon 0 0
##
## $hits
## UP.regulated
## tan NA
## turquoise "CFL1;DGKG;LTA4H;NPEPPS;TKT;UCHL1"
## yellow NA
## greenyellow NA
## pink NA
## magenta "HSPB1"
## purple NA
## green NA
## blue "ATP8A1;SNX6"
## red NA
## brown "HSPB1"
## black NA
## salmon NA
## Down.regulated
## tan "CAMKK2"
## turquoise NA
## yellow "ACTN2"
## greenyellow NA
## pink "ATP1B1;BSN;RAB3B"
## magenta "GSK3B"
## purple "KALRN;SYT12"
## green "AGAP2;NF1"
## blue "ATP1A3;DGKZ;DOCK3;GPR158;MTFP1;NNT;PDK3;RPH3A"
## red "BRSK1;PDHA1;SLC4A10"
## brown "ATP2A2;DCLK1;NDUFB3"
## black NA
## salmon NA
### heatmap
library(pheatmap)
## ---- 0) Module order & colors from your legend ------------------------------
module_order <- c(
"tan", "turquoise", "yellow", "greenyellow", "pink", "magenta", "purple",
"green", "blue", "red", "brown", "black", "salmon"
)
module_colors <- c(
tan = "#D2B48C",
turquoise = "#00CED1",
yellow = "#FFFF00",
greenyellow = "#ADFF2F",
pink = "#FFC0CB",
magenta = "#FF00FF",
purple = "#800080",
green = "#008000",
blue = "#0000FF",
red = "#FF0000",
brown = "#A52A2A",
black = "#000000",
salmon = "#FA8072"
)
## ---- 1) Pull your -log10(p) matrix safely -----------------------------------
Pneg_df <- result$pvalues
rn <- rownames(Pneg_df); cn <- colnames(Pneg_df)
Pneg <- as.matrix(
data.frame(lapply(Pneg_df, function(x) as.numeric(as.character(x))),
check.names = FALSE, stringsAsFactors = FALSE)
)
rownames(Pneg) <- rn; colnames(Pneg) <- cn
## ---- 2) Reorder rows according to desired legend order ----------------------
Pneg <- Pneg[module_order, , drop = FALSE]
## ---- 3) Back-convert to p-values --------------------------------------------
Praw <- 10^(-Pneg)
## ---- 4) Stars & label formatting --------------------------------------------
stars <- matrix("", nrow = nrow(Pneg), ncol = ncol(Pneg), dimnames = dimnames(Pneg))
stars[Pneg >= 1.3 & Pneg < 2.0] <- "*"
stars[Pneg >= 2.0 & Pneg < 2.3] <- "**"
stars[Pneg >= 2.3] <- "***"
fmt <- function(x) ifelse(x < 1e-3, formatC(x, format = "e", digits = 1), signif(x, 2))
vals <- ifelse(Pneg >= 1.3, fmt(Praw), "")
display_numbers <- ifelse(stars == "", vals, paste(vals, stars))
## ---- 5) Color matrix: cap at 3; NA for p ≥ 0.05 -----------------------------
Z <- pmin(Pneg, 3) # clamp max for consistent legend top
Z[Z < 1.3 | is.na(Z)] <- NA # p ≥ 0.05 → white
## ---- 6) Fixed palette and breaks (0..3) -------------------------------------
ramp <- colorRampPalette(c("#FFFFFF", "#FFA500", "#A020F0"))(300)
brks <- seq(0, 3, length.out = length(ramp) + 1)
leg_ticks <- 0:3
leg_labels <- c("0", "1 (p=0.1)", "2 (0.01)", "3 (1e-3)")
## ---- 7) Row annotation ------------------------------------------------------
ann_row <- data.frame(Module = factor(rownames(Pneg), levels = module_order))
rownames(ann_row) <- rownames(Pneg)
ann_cols <- list(Module = module_colors)
## ---- 8) Plot ----------------------------------------------------------------
pheatmap(
Z,
cluster_rows = FALSE, cluster_cols = FALSE,
color = ramp, breaks = brks, na_col = "white",
legend_breaks = leg_ticks, legend_labels = leg_labels,
display_numbers = display_numbers, number_color = "black", fontsize_number = 12,
angle_col = 90,
main = "CAMK2A.FET(−log10 p; white = p ≥ 0.05)",
annotation_row = ann_row, annotation_colors = ann_cols,
border_color = "grey85"
)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A.FET(−log10 p; white = p ≥ 0.05)' in 'mbcsToSbcs':
## dot substituted for <e2>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A.FET(−log10 p; white = p ≥ 0.05)' in 'mbcsToSbcs':
## dot substituted for <88>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A.FET(−log10 p; white = p ≥ 0.05)' in 'mbcsToSbcs':
## dot substituted for <92>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A.FET(−log10 p; white = p ≥ 0.05)' in 'mbcsToSbcs':
## dot substituted for <e2>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A.FET(−log10 p; white = p ≥ 0.05)' in 'mbcsToSbcs':
## dot substituted for <89>
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## conversion failure on 'CAMK2A.FET(−log10 p; white = p ≥ 0.05)' in 'mbcsToSbcs':
## dot substituted for <a5>
