gpt4 book ai didi

r - 使用网格修改 vcd::马赛克图

转载 作者:行者123 更新时间:2023-12-02 04:55:13 25 4
gpt4 key购买 nike

我想使用grid 修改我使用vcd 包创建的马赛克图。具体来说,我想添加精确定位的线段。这是一个最小的例子:

library(vcd)
myDF <- expand.grid(fac1 = c('a', 'b', 'c', 'a'), fac2 = c('y', 'z'))
mosaic(fac2 ~ fac1, data = myDF, pop = FALSE)

结果是这样的:

minimal mosaic plot

我想使用grid.segments()在“fac2”标签下绘制一个水平线段,其宽度与绘制的单元格一样宽。如果我可以使用 seekViewport() 导航到包含“fac2”标签的视口(viewport),这会很简单。但我不能。问题是这样的:

> 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 视口(viewport)命名方案的一部分。相比之下,像 seekViewport("cell:fac1=a,fac2=y") 这样的命令 工作完美。)

有没有办法导航到包含“fac2”标签的视口(viewport)?如果没有,精确地将线段定位在该标签下方的最佳方法是什么?

最佳答案

在上面的评论中,@user20650提供必要的信息。除此之外,我原来的帖子中的代码是有问题的,因为 getNames() 返回 grob 名称,而不是视口(viewport)名称。

绘制线段最简单的方法就是像上图一样画出图形,然后

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]

结果是这样的:

mosaic plot with line segment between x–axis labels

关于r - 使用网格修改 vcd::马赛克图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29571691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com