gpt4 book ai didi

r - 如何在knitr中使用网格逐步构建分层图?

转载 作者:行者123 更新时间:2023-12-04 18:09:40 25 4
gpt4 key购买 nike

对于研讨会附带的在线教程,我想强调网格包的使用(尤其是如何使用视口(viewport))。为此,我想逐步构建一个情节(即逐 block )。在每个步骤/ block 之间,我想包含一些普通文本,以便更详细地解释每个步骤。

如何告诉 knitr 不要单独评估一个 block ,而是在前一个 block 结束的地方开始评估?基本上,我想要添加到前一个 block 的结果中,而不是对 block 的新评估。

在下面的代码中,当编织到 html 时,我在 .html 输出中得到 2 个图。第一个显示第一个 block 的结果(粉红色矩形和一些文本),第二个显示第二个 block 的结果(蓝色矩形)。我想要实现的是两个图 - 第一个显示第一个 block 的结果(如上),第二个显示第一个 block 的结果 + 第二个 block 的结果(粉红色矩形内的蓝色矩形)。
基本上,我想重现在 R 控制台中运行时这两个代码块的行为。蓝色矩形应放在粉色矩形中,不要单独绘制。

这是第一 block

```{r grid first vp, tidy = FALSE}
library(grid)
grid.newpage()

## draw a rectangle around the root vp and provide some text
grid.rect()
grid.text("this is the root vp", x = 0.5, y = 1, just = c("centre", "top"))

vp <- viewport(x = 0.5, y = 0.5,
height = 0.5, width = 0.5,
just = c("centre", "centre"))

pushViewport(vp)

grid.rect(gp = gpar(fill = "pink"))
grid.text("this is our first vp", x = 0.5, y = 1, just = c("centre", "top"))
```

然后是一些解释性文字:

“好的,所以现在我们在 root 视口(viewport)中间创建了一个视口(viewport),位于 x = 0.5y = 0.5 - just = c("centre", "centre"),它是原始视口(viewport)的一半高度和一半宽度—— height = 0.5width = 0.5

之后我们导航到这个视口(viewport) - pushViewport(vp),然后我们绘制了一个填充整个视口(viewport)的矩形并用粉红色填充它 - grid.rect(gp = gpar(fill = "pink"))
请注意,我们还没有离开视口(viewport)。这意味着,无论我们现在做什么,都将发生在当前事件的视口(viewport)(粉红色的视口(viewport))中。为了说明这一点,我们将再次重复上面完全相同的代码(我们只会更改填充颜色,以便更好地看到更改)。”

这是第二 block
```{r grid second vp, tidy = FALSE}

vp <- viewport(x = 0.5, y = 0.5,
height = 0.5, width = 0.5,
just = c("centre", "centre"))

pushViewport(vp)

grid.rect(gp = gpar(fill = "cornflowerblue"))
```

有什么想法可以告诉 knitr “保留”以前的 block 中所做的任何事情,并将其作为当前 block 评估的“起点”吗?

最佳答案

它没有记录,但这个功能已经存在了将近一年。要在整个编译过程中保持图形设备打开,您可以设置

opts_knit$set(global.device = TRUE)

我认为很少有人使用此功能,但似乎我错了。

关于r - 如何在knitr中使用网格逐步构建分层图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17502050/

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