gpt4 book ai didi

r - 如何在 Rmarkdown 中的 apply 循环中添加生成的 dygraph 之间的间距?

转载 作者:行者123 更新时间:2023-12-02 03:43:40 25 4
gpt4 key购买 nike

此问题与 For loop over dygraph does not work in R 相关

@Yihui 的这个答案很好地详细介绍了如何在 rmarkdown 中循环创建 dygraphs 绘图。但是,您会注意到,图之间没有间距。当它们很多时,这会变得很难阅读。

```{r}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)

res <- lapply(1:2, function(i) dygraph(lungDeaths[, i]))
htmltools::tagList(res)
```

有没有办法在自定义应用函数本身生成的每个绘图之间添加间距、文本、水平线等?

我当前的解决方法是传入 dyOptions titleHeight 参数,以及指向外部 CSS 的 dyCSS 参数,该外部 CSS 在标题顶部设置填充。例如,我可以将 titleHeight 参数设置为 50px,然后将标题本身设置为 25px,顶部填充高度为 25px。

---
title: "test"
author: "test"
date: "test"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

```{r}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)

res <- lapply(1:2, function(i) {
dygraph(lungDeaths[, i], main = "Lung Deaths") %>%
dyOptions(titleHeight = 50) %>%
dyCSS("dygraph.css")
})
htmltools::tagList(res)
```

还有 dygraphs.css 文件:

.dygraph-title {
font-size: 25px;
padding-top: 25px;
}

如果我不需要绘图标题,但仍希望在绘图之间进行分隔,我会传递一个换行符作为标题,如下所示:

```{r}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)

res <- lapply(1:2, function(i) {
dygraph(lungDeaths[, i], main = "<br>") %>%
dyOptions(titleHeight = 50) %>%
dyCSS("dygraph.css")
})
htmltools::tagList(res)
```

虽然这确实可以增加间距,但如果可能的话,我宁愿避免使用外部 CSS。更不用说,它不允许您在图本身之间添加任何其他对象(如文本或水平线)。有没有办法在函数调用的每次迭代之间手动添加这些对象?

编辑:因此,根据下面的答案,我们还可以在每次迭代之间添加中断,如下所示:

```{r}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)

res <- lapply(1:2, function(i) {
dygraph(lungDeaths[, i])

})

invisible(lapply(1:2, function(i) {
if (!exists("l")) {
l <<- list()
}

l[[i]] <<- htmltools::tags$br()
}))

out <- c(rbind(l, res))

htmltools::tagList(out)

```

这看起来相当不错,尽管我很想听听其他一些想法。

最佳答案

我对 tagList 不太熟悉,但似乎您可以将包含附加规则、间距、文本等的标记/标签与 dygraph 列表交错,例如:

space <- list(htmltools::tags$h1("Title"), 
htmltools::tags$h2("Header text"))
out <- c(rbind(space, res))
htmltools::tagList(out)

然后列表中的每组标签将依次渲染。

关于r - 如何在 Rmarkdown 中的 apply 循环中添加生成的 dygraph 之间的间距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38109020/

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