Подтвердить что ты не робот

Перемещение цветной клавиши в R heatmap.2 (функция пакета gplots)

Я читал справочную руководство по Heatmap.2 пару раз сейчас, а также в различных онлайн-учебниках, которые я не читал о том, как переместить цветной ключ в другую позицию. Теперь мне интересно, возможно ли это?

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

4b9b3361

Ответ 1

Положение каждого элемента на графике heatmap.2 можно контролировать с помощью параметров lmat, lhei и lwid. Они передаются командой heatmap.2 в команду layout как:

layout(mat = lmat, widths = lwid, heights = lhei)

lmat - это матрица, описывающая, как экран должен быть разбит. По умолчанию, heatmap.2 делит экран на четыре элемента сетки, поэтому lmat является матрицей 2x2. Число в каждом элементе матрицы описывает какой порядок для построения следующих четырех графиков. Heatmap.2 отображает его элементы в следующем порядке:

  • Heatmap,
  • Строка дендрограмма,
  • Дендрограмма столбцов,
  • Key

поэтому по умолчанию lmat:

> rbind(4:3,2:1)
     [,1] [,2]
[1,]    4    3
[2,]    2    1

Если, например, вы хотите поместить ключ под теплоизоляцией, которую вы укажете:

> lmat = rbind(c(0,3),c(2,1),c(0,4))
> lmat
     [,1] [,2]
[1,]    0    3
[2,]    2    1
[3,]    0    4

lwid и lhei - векторы, которые определяют высоту и ширину каждой строки и столбца. По умолчанию используется c(1.5,4) для обоих. Если вы измените lmat, вам придется либо изменить, либо, вероятно, изменить. В приведенном выше примере, если мы хотим сохранить все остальные элементы одинакового размера, но хотим, чтобы внизу был тонкий цветной ключ, мы могли бы установить

>lwid = c(1.5,4)
>lhei = c(1.5,4,1)

Затем мы готовы построить карту нагрева:

>heatmap.2(x,...,lmat = lmat, lwid = lwid, lhei = lhei)

Здесь будет построена карта тепла с дендрограммой столбца над тепловой картой, дендрограмма строки слева и ключ внизу. К сожалению, заголовки и метки для ключа жестко закодированы.

см. ?layout для более подробной информации о том, как работает layout.

Ответ 2

Определенные области, определенные парными вызовами в довольно длинном коде для heatmap.2, и я не видел его оригинального автора или любого из "ревизоров" вокруг этих частей, хотя иногда они посещают R-help. Размеры основного участка задаются с помощью двухэлементного вектора margins. Вот некоторые места, где вам может потребоваться внести изменения:

#1) 
if (!missing(RowSideColors)) {
    par(mar = c(margins[1], 0, 0, 0.5))
    image(rbind(1:nr), col = RowSideColors[rowInd], axes = FALSE)

#2)
if (!missing(ColSideColors)) {
    par(mar = c(0.5, 0, 0, margins[2]))
    image(cbind(1:nc), col = ColSideColors[colInd], axes = FALSE)

#3)
par(mar = c(margins[1], 0, 0, margins[2]))

#4)
par(mar = c(margins[1], 0, 0, 0))

#5)
par(mar = c(0, 0, if (!is.null(main)) 5 else 0, margins[2]))

#6
if (key) {
    par(mar = c(5, 4, 2, 1), cex = 0.75)