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>