Comment ajouter des points à l'axe X du tracé

Nov 13 2020

Je pratique le codage de cartes thermiques, je suis autodidacte, je veux les points avec leur légende au bas de l'intrigue comme la carte thermique originale (j'ai entouré cette partie en rouge).

les données sont dans ce lien :

Peu d'informations sur ces données, il semble que la carte thermique soit basée sur le score z de la moyenne des 4 groupes, puisqu'ils ont deux groupes, j'ai pensé que l'équipe aurait peut-être généré une moyenne de chaque deux colonnes et dérivé le score z de la moyenne pour ces quatre groupes. J'ai essayé ce code:

library(dplyr)
library(tidyverse)
library(stringr)
library(matrixStats)
library(pheatmap)
library(heatmaps)

dfc <- read.csv(url("https://github.com/learnseq/learning/raw/main/GSE133399_Fig2_FPKM.csv"))

head(dfc)

dfg <- dfc %>% dplyr::filter(tracking_id %in% c(
    "Ifng", "Igfbp7", "Il13", "Il4", "Itgb1", "Rbpj",
    "Tnfsf11", "Xcl1", "Ern1", "Furin", "Il5", "Nrp1", "Ptprs",
    "Spry1", "Vdr", "Foxp3", "Prdm1", "Itgb8", "Lamc1", "Ptpn5",
    "Bmpr2", "Csf1", "Dst", "Myo1e", "Pmaip1", "Itgav", "Ramp1",
    "Sdc4", "Areg", "Calca", "Capg", "Ccr2", "Cd44", "Il10", "Il1rl1",
    "Maf", "Rora", "S100a4", "Adam8", "Adam19", "Anxa2", "Bcl2l1",
    "Csda", "Ehd1", "Hist1h1b", "Id2", "Il2ra", "Il2rb", "Lgals1",
    "Lmna", "Mki67", "Penk", "Podnl1", "S100a6", "Vim")) 

dfg$CD44low_rep <- rowMeans(dfg[,c('CD44low_rep1', 'CD44low_rep2')], na.rm=TRUE) dfg$CD44hi_CD69low_rep <- rowMeans(dfg[,c('CD44hi_CD69low_rep1', 'CD44hi_CD69low_rep2')], na.rm=TRUE)
dfg$CD44hi_CD69hi_CD103low_rep <- rowMeans(dfg[,c('CD44hi_CD69hi_CD103low_rep1', 'CD44hi_CD69hi_CD103low_rep2')], na.rm=TRUE) dfg$CD44hi_CD69hi_CD103hi_rep <- rowMeans(dfg[,c('CD44hi_CD69hi_CD103hi_rep1', 'CD44hi_CD69hi_CD103hi_rep2')], na.rm=TRUE)
head(dfg)
dim(dfg)
head(dfg)
rownameshm <-paste(dfg[,1])
rownameshm
colnameshm <- paste(dQuote(colnames(dfg[0, 10:13])), collapse = ", ")
colnameshm
dfg$Mean <- rowMeans(dfg[,10:13]) dfg$sd <- rowSds(as.matrix(dfg[,10:13]))
head(dfg)

zScore <- function(p){
for(n in 10:13){
    p[[n]]=(as.numeric(p[[n]])-as.numeric(p[[14]]))/as.numeric(p[[15]])
    }
return(p)
}

Matrix_zScore <- t(apply(dfg,1,zScore))
head(Matrix_zScore)
Matrix_zScore_temp <- mapply(Matrix_zScore[,10:13], FUN=as.numeric)
Matrix_zScore_temp <- matrix(data=Matrix_zScore_temp, ncol=4, nrow=55)
Matrix_zScore_temp1<-as.data.frame(Matrix_zScore_temp)

rownames(Matrix_zScore_temp) <- dfg$tracking_id
plot_frame <- reshape2::melt(Matrix_zScore_temp)

library("tidyverse")
library(repr)
options(repr.plot.width=4, repr.plot.height=8)


ggplot(plot_frame, aes(Var2, Var1, fill = value)) + 
  geom_tile(color = "white", position = position_dodge(), show.legend = TRUE) +
  scale_y_discrete(position = "right") +
  labs(y = "", fill = "") +
  scale_fill_gradientn(colors = c("#3C57A8", "white", "#DE2D29")) +
  theme_minimal() +  theme(
           legend.position = c(1, 0), 
      legend.justification = c(-0.9, 0),
          legend.direction = "vertical",
   legend.key.size = unit(0.5, "cm"),
  legend.key.width = unit(0.3,"cm"))

Ma carte thermique ressemble à ceci:

Réponses

3 AllanCameron Nov 14 2020 at 13:34

Vous pouvez ajouter un geom_pointappel, avec quelques gros points et une esthétique de couleur. Définissez-les sur une Var1valeur de "" afin qu'ils viennent en premier par ordre alphabétique et se créent de la place sur l'axe des y. Cela ajoutera également automatiquement la légende des couleurs dont vous avez besoin pour identifier l'axe x sur la carte thermique:

ggplot(plot_frame, aes(Var2, Var1, fill = value)) + 
  geom_tile(color = "white", position = position_dodge(), show.legend = TRUE) +
  geom_point(data = data.frame(Var2 = 1:4, Var1 = "", value = 0), size = 5,
             aes(color = factor(Var2))) +
  geom_point(data = data.frame(Var2 = 1:4, Var1 = " ", value = 1), alpha = 0) +
  scale_color_manual(values = c("black", "forestgreen", "red4", "blue4"),
                     labels = c("CD44 T Cells",
                                "CD44 CD69 T Cells",
                                "CD44 CD69 CD103-lo T Cells",
                                "CD44 CD69 CD103-hi T Cells"),
                     guide = guide_legend(override.aes = list(fill = NA))) +
  scale_fill_gradientn(colors = c("#3C57A8", "white", "#DE2D29")) +  
  scale_y_discrete(position = "right") +
  labs(y = "", fill = "", color = " ", x = "") +
  theme_minimal() +  
  theme(legend.justification = c(-0.9, 0),
        legend.direction     = "vertical",
        axis.text.x          = element_blank(),
        legend.key.size      = unit(0.5, "cm"),
        legend.key.width     = unit(0.3,"cm"),
        axis.text.y          = element_text(face = "italic"),
        panel.grid           = element_blank())