使用网格修改 vcd::mosaic 个图
Using grid to modify vcd::mosaic plots
我想使用 grid
修改我使用 vcd
包创建的马赛克图。具体来说,我想添加精确定位的线段。这是一个最小的例子:
library(vcd)
myDF <- expand.grid(fac1 = c('a', 'b', 'c', 'a'), fac2 = c('y', 'z'))
mosaic(fac2 ~ fac1, data = myDF, pop = FALSE)
结果是这个情节:
我想使用 grid.segments()
在 "fac2" 标签下绘制一条水平线段,其宽度与绘制的单元格一样宽。如果我可以使用 seekViewport()
导航到包含 "fac2" 标签的视口,这将很简单。但我不能。问题是:
> getNames()
> [1] "rect:fac1=a,fac2=y" "rect:fac1=a,fac2=z" "rect:fac1=b,fac2=y" "rect:fac1=b,fac2=z"
[5] "rect:fac1=c,fac2=y" "rect:fac1=c,fac2=z" "GRID.text.1" "GRID.text.2"
[9] "GRID.text.3" "GRID.text.4" "GRID.text.5" "GRID.text.6"
[13] "GRID.text.7"
当我 运行 seekViewport("cell:GRID.text.2")
或类似的东西时,我收到一条错误消息:
Error in grid.Call.graphics(L_downviewport, name$name, strict) :
Viewport 'cell:GRID.text.2' was not found
("cell:" 前缀是 vcd
视口命名方案的一部分。相比之下,像 seekViewport("cell:fac1=a,fac2=y")
这样的命令工作得很好。)
有没有办法导航到包含 "fac2" 标签的视口?如果不是,将线段精确定位在该标签下方的最佳方法是什么?
在上面的评论中,@user20650 提供了必要的信息。除其他外,我原来 post 中的代码有问题,因为 getNames()
returns grob 名称,而不是视口名称。
画线段最简单的方法就是画图如上,然后
nn <- seekViewport("margin_top") ## Drill down to the viewport[margin_top]
grid.segments(0, .5, 1, .5)
upViewport(nn) ## Return to top level viewport, here viewport[ROOT]
结果是这个情节:
我想使用 grid
修改我使用 vcd
包创建的马赛克图。具体来说,我想添加精确定位的线段。这是一个最小的例子:
library(vcd)
myDF <- expand.grid(fac1 = c('a', 'b', 'c', 'a'), fac2 = c('y', 'z'))
mosaic(fac2 ~ fac1, data = myDF, pop = FALSE)
结果是这个情节:
我想使用 grid.segments()
在 "fac2" 标签下绘制一条水平线段,其宽度与绘制的单元格一样宽。如果我可以使用 seekViewport()
导航到包含 "fac2" 标签的视口,这将很简单。但我不能。问题是:
> getNames()
> [1] "rect:fac1=a,fac2=y" "rect:fac1=a,fac2=z" "rect:fac1=b,fac2=y" "rect:fac1=b,fac2=z"
[5] "rect:fac1=c,fac2=y" "rect:fac1=c,fac2=z" "GRID.text.1" "GRID.text.2"
[9] "GRID.text.3" "GRID.text.4" "GRID.text.5" "GRID.text.6"
[13] "GRID.text.7"
当我 运行 seekViewport("cell:GRID.text.2")
或类似的东西时,我收到一条错误消息:
Error in grid.Call.graphics(L_downviewport, name$name, strict) :
Viewport 'cell:GRID.text.2' was not found
("cell:" 前缀是 vcd
视口命名方案的一部分。相比之下,像 seekViewport("cell:fac1=a,fac2=y")
这样的命令工作得很好。)
有没有办法导航到包含 "fac2" 标签的视口?如果不是,将线段精确定位在该标签下方的最佳方法是什么?
在上面的评论中,@user20650 提供了必要的信息。除其他外,我原来 post 中的代码有问题,因为 getNames()
returns grob 名称,而不是视口名称。
画线段最简单的方法就是画图如上,然后
nn <- seekViewport("margin_top") ## Drill down to the viewport[margin_top]
grid.segments(0, .5, 1, .5)
upViewport(nn) ## Return to top level viewport, here viewport[ROOT]
结果是这个情节: