макет внутри макета в R - PullRequest
       0

макет внутри макета в R

6 голосов
/ 04 декабря 2011

Я использую R, чтобы создать тепловую карту из матрицы, используя heatmap.2 - и я хочу сгруппировать эти изображения в одно большое изображение - что я обычно использую для достижения этой цели, так это layout () - но это не работает , как heatmap.2 использует макет, и, очевидно, макет не работает рекурсивно.

Есть ли у кого-нибудь предложения о том, как сгруппировать 2 изображения без макета или как сделать макет поддержкой рекурсивных вызовов?

mat = matrix(nrow=3,nrow=3,1:9)
layout(matrix(nrow=2,ncol=1))
heatmap.2(mat) ## overrides the layout and produces only one plot that takes whole screen
heatmap.2(mat) ## still only one image

спасибо.

Ответы [ 2 ]

6 голосов
/ 05 декабря 2011

Далее следует взлом, который почти наверняка не идеальное решение, но может помочь вам начать.

Создайте свою собственную версию функции heatmap.2 с именем hm3. В коде для hm3 закомментируйте все строки между:

 if (missing(lhei) || is.null(lhei))

и layout вызов:

layout(lmat, widths = lwid, heights = lhei, respect = FALSE)

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

x  <- as.matrix(mtcars) 
lhei <- c(1.5, 4,1.5,4)
lwid <- c(1.5, 4,1.5,4)
layout(rbind(c(4,3,8,7),c(2,1,6,5)), 
    widths = lwid, heights = lhei, respect = FALSE)
hm3(x)
hm3(x)

enter image description here

Очевидно, что это потребует значительных настроек, чтобы он выглядел красиво (и увеличил площадь заговора; я выложил все, чтобы получить разумный размер для публикации здесь).

Это полностью не проверено. Вполне вероятно, что использование любого из параметров в функции hm3, которые управляют внешним видом сюжета, приведет к тому, что все станет немного медленнее. Но это может быть хорошей отправной точкой для ваших собственных экспериментов по решению этих проблем.

1 голос
/ 07 декабря 2011

Что вы планируете делать с результатами?

Если вы просто хотите сравнить 2 тепловые карты рядом на экране, то вместо того, чтобы объединять их в один график, вы можете открыть 2 устройства построения графиков и расположить их рядом для сравнения (намного проще, чем создавать один график):

heatmap.2(mat1)
dev.new()
heatmap.2(mat2)

Теперь перетащите один из них в сторону другого с помощью мыши.

Если вы хотите включить объединенную графику в публикацию, то может быть проще всего создать 2 графика и просто установить их рядом в любой программе, которую вы используете для создания статьи. Если они вам нужны в одном файле, вы все равно можете сохранить 2 тепловые карты (или другие графики) как 2 файла, а затем использовать такие инструменты, как imagemagick, gimp или inkscape, чтобы объединить 2 файла в 1 с графиками рядом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...