如何将两个'vcd'网格图形放在一个图中?

时间:2015-06-26 16:28:58

标签: r plot data-visualization r-grid

我想在R的单个图中放置两个(有点非标准的)网格图形。

尝试:

require(vcd)
mosaic(Titanic)
assoc(Titanic)

问题是这些不是lattice图形,据我所知,没有layout参数或类似参数。由于这些是grid图表,因此它们不受base图形技巧par(mfrow=c(1,2))的影响。

如何将上面的两张图放在一张图中,两张图在同一条线上?

我已经尝试了How to plot grid plots on a same page?中的建议,但它们似乎不适用于vcd图。最终我想获得类似的东西:

enter image description here

3 个答案:

答案 0 :(得分:3)

两个情节似乎都没有返回任何对象,我无法看到如何从grid.ls()看到凹凸。所以使用this answer

中的想法
library(vcd) 
library(gridGraphics)
library(gridExtra)

mosaic(Titanic)  
m <- grid.grab()  

assoc(Titanic)  
a <- grid.grab()

grid.newpage()
grid.arrange(m, a, ncol=2)

enter image description here

我相信会有更多类似网格的方法,但是......

答案 1 :(得分:3)

How to plot grid plots on a same page?中的解决方案类似的内容也可用于vcd显示。不同之处在于您需要设置newpage = FALSE(以防止打开新显示)并且您需要自己推送和弹出视口(在更复杂的显示中重复使用vcd图形时这很方便例如partykit树)。

Titanic数据的马赛克和关联显示可以显示为:

grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))

pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 1))
mosaic(Titanic, newpage = FALSE)
popViewport()

pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 2))
assoc(Titanic, newpage = FALSE)
popViewport()

产生

Mosaic and association display

答案 2 :(得分:1)

另一个选项是vcd的{​​{1}}功能(有关详细信息,请参阅mplot()):

?vcd::mplot

output