首页 文章

在R中绘制图形并在循环中将其导出到Excel

提问于
浏览
6

在我的数据中,我有多个国家,每个国家/地区有5个产品 . 我为每个组合执行了回归,现在我试图在每个组合上绘制预测值与同一图表上的实际值 .

我总共有10个国家/地区,每个国家/地区在Excel文件中都有自己的标签 . 由于共有5个产品,因此总共有50个图表 . 我想在R中绘制图形并将它们循环导出到Excel . 我正在使用 excel.linkggplot 而我遇到的问题是图表在Excel中显示为空白或者如果R中有一些图表 - 该图表出现而不是所需的图表 .

**注意:我曾经在第一个图表中显示“未找到rversion”时出错,但现在我更新了我的RStudio,我不再收到此错误 . 图表仍然会导出为空白,或者显示上一个图表

这是一个简化的循环,类似于我的代码中的循环 . 如果我手动运行循环,每次更改 i ,一切都会导出OK . 如果我运行 for loop ,就会出现上述问题:

require(excel.link)

set.seed(124)

for(i in 1:5){

# i <- 2
myseq <- seq(1,100, by=1)
norm <- rnorm(100)

mydata <- as.data.frame(cbind(myseq, norm))
colnames(mydata)
ggplot(data = mydata, aes(x=myseq, y=norm, group=1)) + geom_line(size=1, col="blue") +
  ggtitle(paste("My Plot ", i))

y.plot=current.graphics()
xl[a1] = list(y.plot)

}

1 回答

  • 0

    首先,你应该在循环中明确打印ggplot2图形 . 其次,您将excel中的绘图放在相同位置的同一张纸中 . 因此,您的图表彼此叠加,您将只看到Excel中的最后一个图 . 在单独的表格上显示图表的代码:

    library(excel.link)
    library(ggplot2)
    
    set.seed(124)
    xl.workbook.add() # open new workbook
    for(i in 1:5){
    
        myseq <- seq(1,100, by=1)
        norm <- rnorm(100)
    
        mydata <- as.data.frame(cbind(myseq, norm))
        colnames(mydata)
        p = ggplot(data = mydata, aes(x=myseq, y=norm, group=1)) +
            geom_line(size=1, col="blue") +
            ggtitle(paste("My Plot ", i))
    
        print(p) ## display ggplot graphics
        y.plot=current.graphics()
        xl.sheet.add() ## add new sheet in excel workbook
        xl[a1] = y.plot
    
    }
    

    从上到下在单张纸上显示图表的代码:

    library(excel.link)
    library(ggplot2)
    
    set.seed(124)
    xl.workbook.add() # open new workbook
    y.plot = lapply(1:5, function(i) {
    
        myseq <- seq(1,100, by=1)
        norm <- rnorm(100)
    
        mydata <- as.data.frame(cbind(myseq, norm))
        colnames(mydata)
        p = ggplot(data = mydata, aes(x=myseq, y=norm, group=1)) + 
            geom_line(size=1, col="blue") +
            ggtitle(paste("My Plot ", i))
    
        print(p) ## display ggplot graphics
        current.graphics()
    
    })
    
    xl[a1] = y.plot
    

相关问题