Heatmap de Single-cell sequencing

Librerias

library("dplyr")
library("tidyr")
library("pheatmap")

Cargar el archivo de trabajo con los conteos de lecturas por celulas

counts.df <- read.csv(file = "rpkm_embryonic_day3vsday7.csv", row.names = 1)
head(counts.df)

Manejo de datos

Agregamos una columna con los nombres de genes para abajo poder hacer un left_join

counts_with_names.df <- counts.df %>% 
  mutate(gene_name =  rownames(counts.df))

###¢ Cargar genes up y down regulated

upregulated.df <- read.csv(file = "genes_upregulated.csv", header = TRUE, row.names = 1)

downregulated.df <- read.csv(file = "genes_downregulated.csv", header = TRUE, row.names = 1)

Establecemos un valor semilla

set.seed(77)

Juntamos los genes DE uniendo las filas de ambos archivos y decidimos los genes del Heatmap al azar

allDE.df <- rbind(upregulated.df, downregulated.df) %>% 
  sample_n(size = 100) %>% 
  arrange(desc(State),
          desc(norm_total_mean_1),
          desc(norm_foldChange))

unimos la tabla con los conteos y los nombres por nombre de gen

DE_names.df <- allDE.df %>% 
  select(gene_name)

DE_counts.df <- DE_names.df %>% 
  left_join(counts_with_names.df, by= "gene_name")

pasamos los nombres de los genea a nombres de fila para que la funcion de pheatmap los pueda reconocer

rownames(DE_counts.df) <- DE_counts.df$gene_name

only_counts.df <- DE_counts.df %>% 
  select(-gene_name)

Iniciamos con el pheatmap

El nombre de las filas deben ser los genes y el nombre de las columnas debe ser la muestra

pheat_A.p <- pheatmap(mat = only_counts.df,
                      main = "Single cell counts - Defaults",
                      )

Cambiamos la escala del gradiente

library("RColorBrewer")

mi_escala.v <- colorRampPalette(c("darkblue", "white", "red")) (100)

Ahora usamos la paleta de gradiente generada

pheat_B.p <- pheatmap(mat = only_counts.df,
                      main = "Single cell counts - otro color gradiente",
                      color = mi_escala.v
                      )

Normalizamos por fila

pheat_C.p <- pheatmap(mat = only_counts.df,
                      main = "Single cell counts - otro color gradiente",
                      color = mi_escala.v,
                      scale = "row"
                      )

Quitamos los nombres de genes y celulas que no son legibles

pheat_D.p <- pheatmap(mat = only_counts.df,
                      main = "Single cell counts - otro color gradiente",
                      color = mi_escala.v,
                      scale = "row",
                      show_rownames = F,
                      show_colnames = F
                      )

Vamos a poner etiquetas de color para columnas (de qué celulas viene) y si estan up o down regulated

cell_ids.df <- read.csv(file = "celulas_etiquetadas.csv")

rownames(cell_ids.df) <- cell_ids.df$column_names

etiquetas_final.df <- cell_ids.df %>% 
  select(tag)
genes_etiquetados.df <- allDE.df %>% 
  select(State)

mis_colores.v <- list(tag = c( "E3" = "#C59B76", "E7" = "#9F84BD"),      # la columna tag del dataframe etiquetas_final.df
                      State = c("up" = "#78BC61", "down" = "#E9806E") 
                      )
pheat_E.p <- pheatmap(mat = only_counts.df,
                      main = "Single cell counts - otro color gradiente",
                      color = mi_escala.v,
                      scale = "row",
                      show_rownames = F,
                      show_colnames = F,
                      annotation_colors = mis_colores.v,
                      annotation_row = genes_etiquetados.df
                      )

pheat_F.p <- pheatmap(mat = only_counts.df,
                      main = "Single cell counts - otro color gradiente",
                      color = mi_escala.v,
                      scale = "row",
                      show_rownames = F,
                      show_colnames = F,
                      annotation_colors = mis_colores.v,
                      annotation_row = genes_etiquetados.df,
                      annotation_col = etiquetas_final.df
                      )

Quitamos los dendogramas

pheat_F.p <- pheatmap(mat = only_counts.df,
                      main = "Single cell counts - otro color gradiente",
                      color = mi_escala.v,
                      scale = "row",
                      show_rownames = F,
                      show_colnames = F,
                      annotation_colors = mis_colores.v,
                      annotation_row = genes_etiquetados.df,
                      annotation_col = etiquetas_final.df,
                      cluster_rows = F,
                      cluster_cols = F
                      )

# library(ggplot2)
# 
# plots.v <- apropos("pheat_")
# 
# n_plots <- length(plots.v)
# 
# for ( i in 1:n_plots) {
#   plots_en_turno <- plots.v[i]
#   
#   ggsave(filename = paste0(plot_en_turno, ".png"),
#          plot = get(plots_en_turno),
#          height = 14, 
#          width = 14,
#          units = "in",
#          dpi = 300 )
# }