ТЛ; др: Это не представляется возможным использовать par(mfrow=...)
с функцией tanglegram
, но можно с помощью layout
.
Объяснение: Если присмотреться к функции tanglegram
, вы увидите (methods(tanglegram)
), что внизу, есть несколько методов, среди которых, dendextend:::tanglegram.dendrogram
, который призван привлечь tanglegram (как можно видеть внутри dendextend:::tanglegram.dendlist
функция).
Внутри этой функции есть вызов layout
:
layout(matrix(1:3, nrow = 1), widths = columns_width)
Это «стирает» предыдущие настройки из par(mfrow=c(2, 2))
и изменяет его c(1, 3)
(только для «времени» функции, хотя, потому что на конец функции, значение сбрасывается ...).
Действительно, на странице справки о layout
, он говорит:
Эти функции полностью несовместимы с другими механизмами для размещения участков на устройстве: PAR (mfrow), пар (mfcol) и раскол. экран.
Вывод: Если вы хотите построить несколько tanglegrams в том же «окне» Вы должны будете использовать layout
вызов (с 12 подразделы: 2 строк и 6 столбцов) перед призывами tanglegram
и подавить layout
вызов внутри tanglegram
с использованием аргумента just_one=FALSE
.
Пример рисования нескольких tanglegrams:
Используя код ниже, вы можете получить желаемый участок (я ставлю ширину функция по умолчанию для макета):
layout(matrix(1:12, nrow=2, byrow=TRUE), widths=rep(c(5, 3, 5), 2))
tanglegram.dendlist_mod(dends_15_51, just_one=FALSE)
tanglegram.dendlist_mod(dends_15_51, just_one=FALSE)
tanglegram.dendlist_mod(dends_15_51, just_one=FALSE)
tanglegram.dendlist_mod(dends_15_51, just_one=FALSE)
Это было сделано путем обновления пакета dendextend, в котором: я изменил 2 функции tanglegram.dendrogram
идобавить параметр just_one
, который по умолчанию TRUE
и изменил линию layout
в tanglegram.dendrogram
к:
if (just_one) layout(matrix(1:3, nrow = 1), widths = columns_width)
Я также подавлено сброс par
параметров и, конечно, изменил вызов в tanglegram.dendlist
(теперь называется tanglegram.dendlist_mod
) поэтому он вызывает новую измененную функцию, включает в себя параметр just_one
и передает его на измененную функцию tanglegram.dendrogram
.
как быстрая альтернатива, вы можете захватить изображение и преобразовать его в объект сетки, а затем объединить. Http://stackoverflow.com/questions/27929452/r-return-corrplot-as-object/#27948707 – user20650
@ user20650 Я думал об использовании 'grid', но не знал, что можно захватить изображение. Спасибо, я пропустил этот пакет, спасибо! – Cath
@ user20650 хорошая идея, но решение, к которому вы ссылаетесь, не работает с tanglegram, к сожалению. Проблема заключается в том, что «grid.echo» зажимает горизонтальные дендрограммы (например,'Участок (dend51); grid.echo() 'works,' plot (dend51, horiz = TRUE); grid.echo() 'выдает ошибку), и это необходимо для преобразования изображения в объект сетки. –