TL;博士:这是不可能使用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
和使用参数just_one=FALSE
来抑制layout
内部tanglegram
的呼叫。
绘制几个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
和tanglegram.dendlist
添加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()'工作,'plot(dend51,horiz = TRUE); grid.echo()会抛出一个错误),这是将图像转换为网格对象所必需的。 –