如何在knitr word文档中创建section / subsections和ggplot

时间:2015-10-26 13:43:51

标签: r ggplot2 knitr

我有一个数据框,服务器对许多不同的应用程序使用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创建gg​​plot图表。例如,第一部分将是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. 如何在knitr中自动创建部分,例如sweave会做什么?
  2. 如何在for循环中创建ggplot图表?
  3. 我真的很感激任何见解。

1 个答案:

答案 0 :(得分:5)

看起来你需要改变一些事情:

  1. 您的for循环应以for(a in app){
  2. 开头
  3. 您的子集调用应为subset(data, App %in% a)
  4. 您的ggplot需要包含在print
  5. 另外一些小错字。这是适用于我的代码。
  6. ---
    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")
    }
    ```