R gplots: тепловая карта с боковыми цветами

Я хочу создать тепловую карту с помощью функции heatmap.2 из пакета gplots. Это минимальный пример.

require(gplots)

# create symmetric matrix
x = matrix(rnorm(100), nrow=10)
diag(x)         <- 1
x[upper.tri(x)] <-  t(x)[upper.tri(x)]
colnames(x)     <- rownames(x) <- letters[1:nrow(x)]

# create side colours
varcols = setNames(rainbow(nrow(x)), rownames(x))

# create heatmap
heatmap.2(x,
          symm = TRUE,             
          trace = "none",          
          revC=TRUE, # <-- THIS IS THE PROBLEM
          ColSideColors = varcols,
          RowSideColors = varcols
          )  

Проблема в боковых цветах. x — симметричная матрица, поэтому столбцы и строки должны иметь одинаковые боковые цвета. Это нормально, пока revC = FALSE. Однако, когда я использую revC = TRUE, порядок цветов искажается. Иногда — в небольших примерах — помогает обратить ColSideColors, но это не всегда работает.

Я что-то не так делаю или это баг gplots?


person Jonas    schedule 07.12.2015    source источник


Ответы (1)


Для всех, кто сталкивается с этой проблемой, вот как я ее решил:

thing = heatmap.2(my_matrix,...RowSideColors=row_cols, revC=F)
ordinary_order = thing$rowInd
reversal = cbind(ordinary_order, rev(ordinary_order))
rev_col = row_cols[reversal[,2]]; rev_col = rev_col[order(reversal[,1])];

heatmap.2(my_matrix, RowSideColors=rev_col, revC=T)

person TAndrews    schedule 11.07.2016