Search code examples
rggplot2matrix

Heatmap of matrix with 2 variables in upper and lower triangles using R ggplot2


This is my data:

dput(data)
structure(list(col1 = c("AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", 
"AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", 
"AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", 
"AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", 
"AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", 
"AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", "AnnoPred", 
"BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", 
"BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", 
"BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", 
"BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", 
"BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", 
"BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", "BridgePRS", 
"BridgePRS", "BridgePRS", "BridgePRS", "CT-SLEB", "CT-SLEB", 
"CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", 
"CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", 
"CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", 
"CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", 
"CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", "CT-SLEB", 
"DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", 
"DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", 
"DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", 
"DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", "DBSLMM", 
"DBSLMM", "DBSLMM", "DBSLMM", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", 
"EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", 
"EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", 
"EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", 
"EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "EB-PRS", "Impute.me", 
"Impute.me", "Impute.me", "Impute.me", "Impute.me", "Impute.me", 
"Impute.me", "Impute.me", "Impute.me", "Impute.me", "Impute.me", 
"Impute.me", "Impute.me", "Impute.me", "Impute.me", "Impute.me", 
"Impute.me", "Impute.me", "Impute.me", "Impute.me", "Impute.me", 
"Impute.me", "Impute.me", "Impute.me", "Impute.me", "Impute.me", 
"Impute.me", "Impute.me", "Impute.me", "IPRS", "IPRS", "IPRS", 
"IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", 
"IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", 
"IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", "IPRS", 
"IPRS", "JAMpred", "JAMpred", "JAMpred", "JAMpred", "JAMpred", 
"JAMpred", "JAMpred", "JAMpred", "JAMpred", "JAMpred", "JAMpred", 
"JAMpred", "JAMpred", "JAMpred", "JAMpred", "JAMpred", "JAMpred", 
"JAMpred", "JAMpred", "JAMpred", "JAMpred", "JAMpred", "JAMpred", 
"JAMpred", "JAMpred", "JAMpred", "JAMpred", "lassosum", "lassosum", 
"lassosum", "lassosum", "lassosum", "lassosum", "lassosum", "lassosum", 
"lassosum", "lassosum", "lassosum", "lassosum", "lassosum", "lassosum", 
"lassosum", "lassosum", "lassosum", "lassosum", "lassosum", "lassosum", 
"lassosum", "lassosum", "lassosum", "lassosum", "lassosum", "lassosum", 
"LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", 
"LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", 
"LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", "LDAK", 
"LDAK", "LDPred", "LDPred", "LDPred", "LDPred", "LDPred", "LDPred", 
"LDPred", "LDPred", "LDPred", "LDPred", "LDPred", "LDPred", "LDPred", 
"LDPred", "LDPred", "LDPred", "LDPred", "LDPred", "LDPred", "LDPred", 
"LDPred", "LDPred", "LDPred", "LDPred", "LDpred2", "LDpred2", 
"LDpred2", "LDpred2", "LDpred2", "LDpred2", "LDpred2", "LDpred2", 
"LDpred2", "LDpred2", "LDpred2", "LDpred2", "LDpred2", "LDpred2", 
"LDpred2", "LDpred2", "LDpred2", "LDpred2", "LDpred2", "LDpred2", 
"LDpred2", "LDpred2", "LDpred2", "LDpred-funct", "LDpred-funct", 
"LDpred-funct", "LDpred-funct", "LDpred-funct", "LDpred-funct", 
"LDpred-funct", "LDpred-funct", "LDpred-funct", "LDpred-funct", 
"LDpred-funct", "LDpred-funct", "LDpred-funct", "LDpred-funct", 
"LDpred-funct", "LDpred-funct", "LDpred-funct", "LDpred-funct", 
"LDpred-funct", "LDpred-funct", "LDpred-funct", "LDpred-funct", 
"meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", 
"meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", 
"meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", "meta-PRS", 
"meta-PRS", "meta-PRS", "meta-PRS", "NEBULA", "NEBULA", "NEBULA", 
"NEBULA", "NEBULA", "NEBULA", "NEBULA", "NEBULA", "NEBULA", "NEBULA", 
"NEBULA", "NEBULA", "NEBULA", "NEBULA", "NEBULA", "NEBULA", "NEBULA", 
"NEBULA", "NEBULA", "NEBULA", "NPS", "NPS", "NPS", "NPS", "NPS", 
"NPS", "NPS", "NPS", "NPS", "NPS", "NPS", "NPS", "NPS", "NPS", 
"NPS", "NPS", "NPS", "NPS", "NPS", "PGS-server", "PGS-server", 
"PGS-server", "PGS-server", "PGS-server", "PGS-server", "PGS-server", 
"PGS-server", "PGS-server", "PGS-server", "PGS-server", "PGS-server", 
"PGS-server", "PGS-server", "PGS-server", "PGS-server", "PGS-server", 
"PGS-server", "PleioPred", "PleioPred", "PleioPred", "PleioPred", 
"PleioPred", "PleioPred", "PleioPred", "PleioPred", "PleioPred", 
"PleioPred", "PleioPred", "PleioPred", "PleioPred", "PleioPred", 
"PleioPred", "PleioPred", "PleioPred", "PolyPred", "PolyPred", 
"PolyPred", "PolyPred", "PolyPred", "PolyPred", "PolyPred", "PolyPred", 
"PolyPred", "PolyPred", "PolyPred", "PolyPred", "PolyPred", "PolyPred", 
"PolyPred", "PolyPred", "PRS-CS", "PRS-CS", "PRS-CS", "PRS-CS", 
"PRS-CS", "PRS-CS", "PRS-CS", "PRS-CS", "PRS-CS", "PRS-CS", "PRS-CS", 
"PRS-CS", "PRS-CS", "PRS-CS", "PRS-CS", "PRS-CSx", "PRS-CSx", 
"PRS-CSx", "PRS-CSx", "PRS-CSx", "PRS-CSx", "PRS-CSx", "PRS-CSx", 
"PRS-CSx", "PRS-CSx", "PRS-CSx", "PRS-CSx", "PRS-CSx", "PRS-CSx", 
"PRSet", "PRSet", "PRSet", "PRSet", "PRSet", "PRSet", "PRSet", 
"PRSet", "PRSet", "PRSet", "PRSet", "PRSet", "PRSet", "PRSice", 
"PRSice", "PRSice", "PRSice", "PRSice", "PRSice", "PRSice", "PRSice", 
"PRSice", "PRSice", "PRSice", "PRSice", "PRSice-2", "PRSice-2", 
"PRSice-2", "PRSice-2", "PRSice-2", "PRSice-2", "PRSice-2", "PRSice-2", 
"PRSice-2", "PRSice-2", "PRSice-2", "SBayesR", "SBayesR", "SBayesR", 
"SBayesR", "SBayesR", "SBayesR", "SBayesR", "SBayesR", "SBayesR", 
"SBayesR", "SDPR", "SDPR", "SDPR", "SDPR", "SDPR", "SDPR", "SDPR", 
"SDPR", "SDPR", "SDPRX", "SDPRX", "SDPRX", "SDPRX", "SDPRX", 
"SDPRX", "SDPRX", "SDPRX", "TL-Multi", "TL-Multi", "TL-Multi", 
"TL-Multi", "TL-Multi", "TL-Multi", "TL-Multi", "TL-PRS/MTL-PRS", 
"TL-PRS/MTL-PRS", "TL-PRS/MTL-PRS", "TL-PRS/MTL-PRS", "TL-PRS/MTL-PRS", 
"TL-PRS/MTL-PRS", "VIPRS", "VIPRS", "VIPRS", "VIPRS", "VIPRS", 
"XPA/XPASS", "XPA/XPASS", "XPA/XPASS", "XPA/XPASS", "XP-BLUP", 
"XP-BLUP", "XP-BLUP", "XPXP", "XPXP", "X-Wing"), col2 = c("AnnoPred", 
"BridgePRS", "CT-SLEB", "DBSLMM", "EB-PRS", "Impute.me", "IPRS", 
"JAMpred", "lassosum", "LDAK", "LDPred", "LDpred2", "LDpred-funct", 
"meta-PRS", "NEBULA", "NPS", "PGS-server", "PleioPred", "PolyPred", 
"PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", 
"SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "BridgePRS", "CT-SLEB", "DBSLMM", 
"EB-PRS", "Impute.me", "IPRS", "JAMpred", "lassosum", "LDAK", 
"LDPred", "LDpred2", "LDpred-funct", "meta-PRS", "NEBULA", "NPS", 
"PGS-server", "PleioPred", "PolyPred", "PRS-CS", "PRS-CSx", "PRSet", 
"PRSice", "PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", 
"TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", 
"CT-SLEB", "DBSLMM", "EB-PRS", "Impute.me", "IPRS", "JAMpred", 
"lassosum", "LDAK", "LDPred", "LDpred2", "LDpred-funct", "meta-PRS", 
"NEBULA", "NPS", "PGS-server", "PleioPred", "PolyPred", "PRS-CS", 
"PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", "SDPR", 
"SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "DBSLMM", "EB-PRS", "Impute.me", 
"IPRS", "JAMpred", "lassosum", "LDAK", "LDPred", "LDpred2", "LDpred-funct", 
"meta-PRS", "NEBULA", "NPS", "PGS-server", "PleioPred", "PolyPred", 
"PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", 
"SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "EB-PRS", "Impute.me", "IPRS", "JAMpred", 
"lassosum", "LDAK", "LDPred", "LDpred2", "LDpred-funct", "meta-PRS", 
"NEBULA", "NPS", "PGS-server", "PleioPred", "PolyPred", "PRS-CS", 
"PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", "SDPR", 
"SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "Impute.me", "IPRS", "JAMpred", 
"lassosum", "LDAK", "LDPred", "LDpred2", "LDpred-funct", "meta-PRS", 
"NEBULA", "NPS", "PGS-server", "PleioPred", "PolyPred", "PRS-CS", 
"PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", "SDPR", 
"SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "IPRS", "JAMpred", "lassosum", "LDAK", 
"LDPred", "LDpred2", "LDpred-funct", "meta-PRS", "NEBULA", "NPS", 
"PGS-server", "PleioPred", "PolyPred", "PRS-CS", "PRS-CSx", "PRSet", 
"PRSice", "PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", 
"TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", 
"JAMpred", "lassosum", "LDAK", "LDPred", "LDpred2", "LDpred-funct", 
"meta-PRS", "NEBULA", "NPS", "PGS-server", "PleioPred", "PolyPred", 
"PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", 
"SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "lassosum", "LDAK", "LDPred", "LDpred2", 
"LDpred-funct", "meta-PRS", "NEBULA", "NPS", "PGS-server", "PleioPred", 
"PolyPred", "PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", 
"SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", 
"XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "LDAK", "LDPred", "LDpred2", 
"LDpred-funct", "meta-PRS", "NEBULA", "NPS", "PGS-server", "PleioPred", 
"PolyPred", "PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", 
"SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", 
"XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "LDPred", "LDpred2", 
"LDpred-funct", "meta-PRS", "NEBULA", "NPS", "PGS-server", "PleioPred", 
"PolyPred", "PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", 
"SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", 
"XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "LDpred2", "LDpred-funct", 
"meta-PRS", "NEBULA", "NPS", "PGS-server", "PleioPred", "PolyPred", 
"PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", 
"SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "LDpred-funct", "meta-PRS", "NEBULA", 
"NPS", "PGS-server", "PleioPred", "PolyPred", "PRS-CS", "PRS-CSx", 
"PRSet", "PRSice", "PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", 
"TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", 
"meta-PRS", "NEBULA", "NPS", "PGS-server", "PleioPred", "PolyPred", 
"PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", 
"SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "NEBULA", "NPS", "PGS-server", "PleioPred", 
"PolyPred", "PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", 
"SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", 
"XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "NPS", "PGS-server", 
"PleioPred", "PolyPred", "PRS-CS", "PRS-CSx", "PRSet", "PRSice", 
"PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", 
"VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "PGS-server", 
"PleioPred", "PolyPred", "PRS-CS", "PRS-CSx", "PRSet", "PRSice", 
"PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", 
"VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "PleioPred", 
"PolyPred", "PRS-CS", "PRS-CSx", "PRSet", "PRSice", "PRSice-2", 
"SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", 
"XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "PolyPred", "PRS-CS", 
"PRS-CSx", "PRSet", "PRSice", "PRSice-2", "SBayesR", "SDPR", 
"SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "PRS-CS", "PRS-CSx", "PRSet", "PRSice", 
"PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", 
"VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "PRS-CSx", 
"PRSet", "PRSice", "PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", 
"TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", 
"PRSet", "PRSice", "PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", 
"TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", 
"PRSice", "PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", 
"TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", 
"PRSice-2", "SBayesR", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", 
"VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "SBayesR", 
"SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", 
"XP-BLUP", "XPXP", "X-Wing", "SDPR", "SDPRX", "TL-Multi", "TL-PRS/MTL-PRS", 
"VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "SDPRX", "TL-Multi", 
"TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", 
"TL-Multi", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", 
"XPXP", "X-Wing", "TL-PRS/MTL-PRS", "VIPRS", "XPA/XPASS", "XP-BLUP", 
"XPXP", "X-Wing", "VIPRS", "XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", 
"XPA/XPASS", "XP-BLUP", "XPXP", "X-Wing", "XP-BLUP", "XPXP", 
"X-Wing", "XPXP", "X-Wing", "X-Wing"), accuracy = c(NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 2L, NA, -1L, NA, NA, NA, NA, -2L, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, 2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, -2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 2L, NA, 2L, NA, NA, NA, NA, NA, -2L, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, -2L, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, 2L, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, -2L, 2L, NA, NA, NA, NA, NA, -2L, NA, NA, 
NA, NA, NA, NA, -2L, NA, NA, -2L, NA, -2L, NA, NA, NA, NA, NA, 
NA, 2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, -2L, -2L, NA, NA, -2L, 
NA, -2L, NA, -2L, NA, NA, NA, -2L, -2L, NA, NA, NA, NA, NA, -2L, 
NA, -2L, NA, NA, NA, NA, NA, NA, -2L, NA, NA, 2L, -2L, NA, NA, 
NA, NA, NA, -2L, NA, NA, NA, NA, NA, -2L, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, -2L, NA, NA, 
2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, 2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, -2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, -2L, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, -2L, NA, -2L, NA, NA, NA, -2L, 
-2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
-2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2L, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, -2L, NA, NA, NA, NA, NA, NA), speed = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1L, NA, 2L, 2L, NA, NA, NA, NA, NA, 
NA, NA, NA, 2L, NA, NA, NA, NA, -1L, 2L, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, 2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
2L, NA, NA, NA, NA, -1L, 2L, NA, NA, NA, 2L, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, -2L, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, -2L, 
NA, NA, NA, NA, -2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, -2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, -2L, NA, -2L, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, -2L, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-595L))

I obtained separate heatmaps one for accuracy and one for speed using the following code (running this twice changeing only the line data_full$value <- data_full$accuracy accordingly):

data <- read.csv("heatmap_scopingReview - Copy.csv")
head(data)
library(ggplot2)
library(reshape2)


methods <- unique(c(data$col1, data$col2))
full_combinations <- expand.grid(col1 = methods, col2 = methods)

data_full <- merge(full_combinations, data, by = c("col1", "col2"), all.x = TRUE)


data_full$value <- data_full$accuracy


# Melt for ggplot
melted_data <- melt(data_full, id.vars = c("col1", "col2"), measure.vars = "value")


# Identify diagonal elements
# Assuming 'col1' and 'col2' are factors with the same levels in the same order
melted_data$diagonal <- melted_data$col1 == melted_data$col2

# Plot
plot1 <- ggplot(melted_data, aes(x = col2, y = col1)) +
  geom_tile(aes(fill = value), color = "grey", size = 0.1) + # Main heatmap layer
  geom_tile(data = subset(melted_data, diagonal), fill = "grey") + # Diagonal in grey
  scale_fill_gradient2(low = "dark red", high = "dark blue", midpoint = 0, mid = "white", 
                       na.value = "white", limits = c(-2, 2), name = "y/x") +
  labs(x = "x", y = "y", fill = "y/x") +
  theme_minimal(base_size = 12) +
  theme(axis.title.x = element_text(size = 14, angle = 0),
        axis.title.y = element_text(size = 14, angle = 90),
        axis.text.x = element_text(angle = 45, hjust = 1),
        axis.text.y = element_text(angle = 0, vjust = 0.5),
        panel.background = element_blank(), # Remove panel background
        panel.grid.major = element_line(color = "grey", size = 0.2), # Customize major gridlines
        panel.grid.minor = element_blank(), # Remove minor gridlines if not needed
        legend.position = "right")

plot1

I obtained the following graphs: enter image description here

enter image description here

What I need is to have the speed variable as the upper triangle and accuracy as the lower triangle of the same graph. It is better if I can have the diagonal from left bottom to right up too. Please help me to obtain the final output modifying this code.

Thanks


Solution

  • One option would be to use your original dataset and a geom_tile for each of your variables where you switch the columns mapped on x and y:

    library(ggplot2)
    
    data$diagonal <- data$col1 == data$col2
    
    diagonal <- subset(data, diagonal)
    
    ggplot(data, aes()) +
      geom_tile(aes(x = col2, y = col1, fill = speed),
        color = "red", size = 0.1
      ) + # Speed heatmap
      geom_tile(aes(x = col1, y = col2, fill = accuracy),
        color = "blue", size = 0.1
      ) + # Accuracy heatmap layer
      geom_tile(
        data = diagonal, aes(x = col1, y = col1),
        fill = "grey"
      ) + # Diagonal in grey
      annotate(
        "label",
        x = -Inf, y = Inf,
        label = "Accuracy", 
        hjust = 0, vjust = 1
      ) +
      annotate(
        "label",
        x = Inf, y = -Inf,
        label = "Speed", 
        hjust = 1, vjust = 0
      ) +
      scale_fill_gradient2(
        low = "dark red", high = "dark blue", midpoint = 0, mid = "white",
        na.value = "white", limits = c(-2, 2), name = "y/x"
      ) +
      labs(x = "x", y = "y", fill = "y/x") +
      theme_minimal(base_size = 12) +
      theme(
        axis.title.x = element_text(size = 14, angle = 0),
        axis.title.y = element_text(size = 14, angle = 90),
        axis.text.x = element_text(angle = 45, hjust = 1),
        axis.text.y = element_text(angle = 0, vjust = 0.5),
        panel.background = element_blank(), # Remove panel background
        panel.grid.major = element_line(color = "grey", size = 0.2), # Customize major gridlines
        panel.grid.minor = element_blank(), # Remove minor gridlines if not needed
        legend.position = "right"
      )
    

    enter image description here