【问题标题】:how do you create sections/subsections and ggplot in knitr word document你如何在knitr word文档中创建部分/小节和ggplot
【发布时间】:2015-10-26 13:43:50
【问题描述】:

我有一个数据框,该数据框具有服务器对许多不同应用程序的 cpu 使用率。像这样的:

data

    App   Server   Date Cpu
    Web   web01    1/1/2015 10
    Web   web01    1/2/2015 10
    Web   web01    1/3/2015 20
    Web   web01    1/4/2015 30
    Web   web01    1/5/2015 4
    TomCat   tom01    1/1/2015 10
    TomCat   tom01    1/2/2015 10
    TomCat   tom01    1/3/2015 20
    TomCat   tom01    1/4/2015 30
    TomCat   tom01    1/5/2015 4

我需要能够使用带有部分的 knitr 创建 ggplot 图表。例如,第一个部分是 Web,接下来是 TomCat 等等。由于有数百个应用程序,我需要能够循环执行此操作。

我正在尝试这个,但我没有在 word 文档中看到图表:

{r qplot,fig.width=8, fig.height=5, message=FALSE}

library(ggplot2)

app<-unique(data$App, drop=TRUE)
app<-droplevels(app)

for (app in data){ 
 ggplot(subset(data, App %in% data), aes(Date, Cpu, group=Server, colour=server))+geom_line() + facet_wrap(~Server)

}

我有两个问题:

  1. 如何像 sweave 一样在 knitr 中自动创建部分?
  2. 如何在 for 循环中创建 ggplot 图表?

如果有任何见解,我将不胜感激。

【问题讨论】:

  • 为什么不把 App 和 Server 放在一起呢?另一种选择是构建一个 ggplot 对象列表并绘制它们,但是您希望它们与不同的 grid.arrange 调用分组。
  • @hrbrmstr,为了便于阅读,我需要每个应用程序位于不同的部分,否则,所有内容都将在一个图表中。
  • 拥有数百个应用程序,我认为app 的一个方面会使情节跑出页面。尝试将results='asis' 添加到您的块选项中,然后将cat("## section break") 放在ggplot 调用之后。您可以将分节符替换为 app 的值,或其他一些巧妙的命名方案。
  • @Benjamin,我在运行 Knit Word 后看不到 word 文档中的情节。有什么想法吗?

标签: r ggplot2 knitr


【解决方案1】:

看起来有几件事需要更改:

  1. 您的for 循环应以for(a in app){ 开头
  2. 您的子集调用应该是subset(data, App %in% a)
  3. 您的ggplot 需要包裹在print
  4. 其他几个小错别字。这是对我有用的代码。

---
title: "Untitled"
output: word_document
---

```{r}
data <- 
"App   Server   Date Cpu
Web   web01    1/1/2015 10
Web   web01    1/2/2015 10
Web   web01    1/3/2015 20
Web   web01    1/4/2015 30
Web   web01    1/5/2015 4
TomCat   tom01    1/1/2015 10
TomCat   tom01    1/2/2015 10
TomCat   tom01    1/3/2015 20
TomCat   tom01    1/4/2015 30
TomCat   tom01    1/5/2015 4"

data <- read.table(text = data, header = TRUE)
```

## Start the Plots

```{r qplot,fig.width=8, fig.height=5, message=FALSE, results = 'asis'}

library(ggplot2)

app<-unique(data$App, drop=TRUE)
app<-droplevels(app)

for (a in app){ 
 print(ggplot(subset(data, App %in% a), 
        aes(Date, Cpu, group=Server, colour=Server)) +
    geom_line() + 
    facet_wrap(~Server))
  cat("\n\n## New Plot\n\n")
}
```

【讨论】:

  • 谢谢你。另外,是否可以将带有页码的部分(如 sweave)放在文档中,以便文档易于阅读和浏览。
  • 如果你的意思是像一个目录,不。 RMarkdown 的 word 格式不支持该功能。您可以在本文档的第 5 页查看有关支持的功能的更多信息。 rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf
  • 如您所见,我对此并不陌生。是否有设置页面边距等的选项?
  • 我不知道......至少对于 Word 输出来说不是。我发现Word的输出非常有限,我自己也不经常使用。
  • 你有好的模板可以分享吗?我需要尽快整理一份文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多