Сбои в группировке условий pheatmap (), а также другие моменты путаницы - PullRequest
0 голосов
/ 02 апреля 2020

Я хотел, чтобы мои условия были отмечены на тепловой карте, которую я делаю для DGE. Этот код:

mat <- assay(rld)[topVarGenes,]
condition = c("black", "orange")
names(condition) = c("Dark", "Light")
ann_colors = list(condition = condition)
pheatmap(mat, color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(24), annotation_colors = ann_colors[1], border_color = "grey60", fontsize = 12, scale = "row")

создает эту тепловую карту: enter image description here

Но эта тепловая карта не имеет условий, помеченных над столбцами, как я хотел. Поэтому я попробовал этот код:

annotation <- data.frame(annotation)
    pheatmap(mat, annotation = annotation, color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(24), border_color = "grey60", fontsize = 12, scale = "row")

, который почти работает, но не использует цвета, которые я хочу пометить условиями (образцы 1-3 являются "темными" условиями и должны быть помечены как черные, а образцы - 4-6 являются «светлыми» условиями и должны быть помечены оранжевым). Этот график также включает в себя прикольную метку столбца при условии для образца, который является избыточным, и я не знаю, как от него избавиться. Кроме того, data.frame (аннотация) - это лист Excel, в который я импортировал образцы и соответствующие условия. enter image description here

Добавление обратно annotation_colors к коду:

 pheatmap(mat, annotation = annotation, color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(24), annotation_colors = ann_colors, border_color = "grey60", fontsize = 12, scale = "row")

приводит к этой ошибке: Error in convert_annotations(annotation_col, annotation_colors) : Factor levels on variable condition do not match with annotation_colors

Наконец, я попробовал это немного кода, который я нашел в посте переполнения стека, чтобы определить аннотацию, которая заставляет R использовать правильные цвета, но они не в правильном порядке для условий, потому что %% 2 == 0 заставляет его пометить каждый другой образец как «легкий», но я не могу думать ни о чем другом, чтобы сделать. Вот код:

annotation <- data.frame(condition = factor(1:6 %% 2==0, labels = c("Dark", "Light")))

Помощь с благодарностью!

1 Ответ

0 голосов
/ 02 апреля 2020

Это не так ясно в виньетке, но вы можете выполнить следующие шаги, чтобы сгенерировать правильный data.frame и список, без причины не работать:

Сначала я создаю матрицу, подобную вашей:

library(pheatmap)
M = cbind(matrix(runif(30,min=0,max=0.5),ncol=3),
matrix(runif(30,min=0.3,max=0.8),ncol=3))
rownames(M) = paste0("row",1:10)
colnames(M) = paste0("sample",1:6)

Допустим, первые 3 столбца «светлые», а последние 3 столбца «темные». Для этого мы создаем data.frame, важно, чтобы имена строк соответствовали столбцам вашей матрицы:

ann_column = data.frame(
condition = rep(c("light","dark"),each=3))
rownames(ann_col) = colnames(M)

ann_column
  condition
1     light
2     light
3     light
4      dark
5      dark
6      dark

Теперь для цветов вам нужен список, а имена должны соответствовать данным. В кадре выше и внутри источника света вы указываете, какой фактор соответствует какому цвету, поэтому:

ann_colors = list(condition = c(dark="black",light="orange"))

И мы его рисуем:

pheatmap(M,annotation_col=ann_col,annotation_colors=ann_colors)

enter image description here

...