Цветовые метки (текст) в тепловой карте R

Я пытаюсь сделать тепловую карту в R, в которой текст метки окрашен (чтобы указать, из какой группы исходит точка данных).

В настоящее время я использую Heatmap.2, но был бы рад использовать другой пакет.

heatmap.2(data.matrix(data),trace = 'none', dendrogram='none',ColSideColors=col)

Этот вызов дает мне цветную полосу (ColSideColors) вдоль меток, но я хотел бы сделать сами метки цветными.

Большое спасибо!


person user1795995    schedule 03.11.2012    source источник


Ответы (3)


Вам нужно будет создать новую функцию, которая включает аргумент col.axis. Это строка функции для работы:

# there were four long pages of code before this section:

axis(1, 1:nc, labels = labCol, las = 2, line = -0.5, tick = 0, # original line
        col.axis="green",   # added argument
        cex.axis = cexCol)
if (!is.null(xlab)) 
        mtext(xlab, side = 1, line = margins[1] - 1.25)
axis(4, iy, labels = labRow, las = 2, line = -0.5, tick = 0, # original line
        col.axis="green",   # added argument
        cex.axis = cexRow)
person IRTFM    schedule 03.11.2012

Недавно у меня была такая же проблема, и в итоге я использовал mtext вместо оригинального axis. Предыдущие ответы показали оператор axis для построения меток. Однако col.axis мог указать только один цвет. Чтобы включить векторный цвет,

#    axis(1, 1:nc, labels = labCol, las = 2, line = -0.5, tick = 0, 
#        cex.axis = cexCol )
mtext(side = 1, text = labCol, at = 1:nc, las = 2, line = 0.5,col = ClabColor, cex = cexCol)


#    axis(4, iy, labels = labRow, las = 2, line = -0.5, tick = 0, 
#        cex.axis = cexRow )
mtext(side = 4, text = labRow, at = iy, las = 2, line = 0.5,col = RlabColor, cex = cexCol)

Также не забудьте добавить в функцию еще два аргумента, ClabColor = "black", RlabColor = "black". Цвета по умолчанию — черный.

Еще одна вещь, на которую вам нужно обратить внимание, это то, что цвет вектора должен следовать порядку меток, которые переставляются при вычислении дендрограмм.

person lwz0203    schedule 28.03.2013

Я не могу ответить lwz0203 из-за отсутствия прав на комментирование, но их код не совсем полон. Вам нужно добавить строки:

if(is.vector(RlabColor)) {
    RlabColor=RlabColor[rowInd]
}

(и аналогично для ClabColor)

if(is.vector(ClabColor)) {
    ClabColor=ClabColor[colInd]
}

в какой-то момент в коде, иначе вы получите раскраску, не совпадающую с метками, когда вы используете вектор цветов. Текст в векторе labRow или labCol переупорядочивается уже с кодом:

if (is.null(labRow))
    labRow <- if (is.null(rownames(x)))
        (1:nr)[rowInd]
        else rownames(x)
else labRow <- labRow[rowInd] 

Поэтому я добавляю переупорядочение RlabColor и ClabColor в одном месте.

person procrastinator    schedule 29.01.2014