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

use*_*611 6 excel plot r graph ggplot2

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

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

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

这是一个简化的循环,类似于我的代码中的循环.如果我手动运行循环,通过i每次更改,一切都可以导出.如果我运行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)
Run Code Online (Sandbox Code Playgroud)

}

Gre*_*min 3

首先,您应该在循环中显式打印 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

}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)