मेरे पास एक बड़ा डेटाफ्रेम है, जिसका सिर इस तरह है।

structure(list(SFE_1 = c("MAP2K4", "STK11", "AKT1", "AKT1", "NF1", 
"EGFR", "KDM5A", "AXIN1", "AMP.JAK2", "AMP.LYN", "CNOT3", "AMP.NSD3"
), SFE_2 = c("KDM5A", "AXIN1", "AMP.JAK2", "AMP.LYN", "CNOT3", 
"AMP.NSD3", "MAP2K4", "STK11", "AKT1", "AKT1", "NF1", "EGFR"), 
    overlap = c(0, 6, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1)), class = "data.frame", row.names = c("MAP2K4 - KDM5A", 
"STK11 - AXIN1", "AKT1 - AMP.JAK2", "AKT1 - AMP.LYN", "NF1 - CNOT3", 
"EGFR - AMP.NSD3", "MAP2K4 - KDM5A1", "STK11 - AXIN11", "AKT1 - AMP.JAK21", 
"AKT1 - AMP.LYN1", "NF1 - CNOT31", "EGFR - AMP.NSD31"))

मैं ggplot2 का उपयोग करके एक त्रिभुज हीटमैप प्लॉट करना चाहता हूं और मैंने कोड की कोशिश की:

ggplot(df_triheatmap, aes(SFE_1, SFE_2, fill = overlap)) +
  geom_raster() +
  scale_fill_distiller(palette = "Spectral") +
  theme_minimal() +
  theme(panel.grid = element_blank())

आउटपुट था यहां छवि विवरण दर्ज करें

यह दर्पण समरूपता जैसा दिखता है। मैं जानना चाहता हूं कि केवल ऊपरी या निचले त्रिकोण हीटमैप को रखने के लिए इनपुट डेटाफ्रेम को कैसे संशोधित किया जाए। धन्यवाद। यहां छवि विवरण दर्ज करें

1
Lin Caijin 5 सितंबर 2021, 09:33

2 जवाब

सबसे बढ़िया उत्तर

यह थोड़ा बहुत "बुनियादी" हो सकता है (मुझे लगता है कि छोटे और बेहतर समाधान हैं), लेकिन इसका परिणाम आपके वांछित आउटपुट में होता है:

मैं निचले त्रिकोण के लिए डमी डेटा बनाउंगा:

dummy_x <- c()
dummy_y <- c()
for (i in 1:length(unique(df_triheatmap$SFE_1))) {
  dummy_x <- c(dummy_x, rep(i, i))
  dummy_y <- c(dummy_y, 1:i)
}

और बस शीर्ष पर सफेद टाइलें जोड़ें:

ggplot() +
  geom_raster(data = df_triheatmap, aes(SFE_1, SFE_2, fill = overlap)) +
  scale_fill_distiller(palette = "Spectral") +
  theme_minimal() +
  theme(panel.grid = element_blank()) +
  geom_raster(aes(x=dummy_x, y=dummy_y), fill = "white")

और यह आउटपुट है:

enter image description here

(हालांकि, मैंने डेटा नहीं बदला, बल्कि प्लॉट बदला।)

2
Zoe 5 सितंबर 2021, 08:28

क्या आप ऐसा कोई समाधान ढूंढ रहे हैं?

library(tidyverse)
df1 <- df %>%
    rownames_to_column("combination") %>% 
    arrange(combination) %>% 
    filter(row_number() %% 2 != 1) ## Delete even-rows

ggplot(df1, aes(x=SFE_1, y=SFE_2, fill=overlap)) +
    geom_tile(color="white")+
    scale_fill_distiller(palette = "Spectral") +
    theme_bw()+
    theme(axis.text.x=element_text(angle=45, vjust=1, size=10, hjust=1))+
    coord_fixed()+
    labs(x="",y="")

enter image description here

1
TarJae 5 सितंबर 2021, 06:52