r - 使用命令行时无法通过 openxlsx 包将绘图插入 XLSX

标签 r excel ggplot2 openxlsx

我正在尝试使用 R 中的 openxlsx 包将绘图插入到 XLSX 文件中。 当我使用 R GUI 时,我能够完成此任务。

但是,使用批处理文件时,会创建绘图,但不会将其插入到 XLSX 文件中。相反,它被创建为与新创建的 XLSX 文件相邻的单独 PDF 文件(自动命名为“Rplots.pdf”)。数据帧写入 XLSX 文件就好了。

R 脚本(名为“insertPlot.R”):

library(ggplot2)
library(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "Data")
addWorksheet(wb, "Graph", gridLines=FALSE)
df <- data.frame(c(1:5), c(5:1))
names(df) <- c("x","y")
writeData(wb, "Data", df)
p <- ggplot(aes(x=x, y=y), data=df) + geom_line(size=1, colour="blue")
print(p)    #plot needs to be showing
insertPlot(wb, "Graph", width=11.18, height=7.82, fileType="png", units="in")
saveWorkbook(wb, "test.xlsx", overwrite=TRUE)

批处理文件脚本:

"C:\Program Files\R\R-3.1.3\bin\RScript.exe" --no-save --no-environ --no-init-file --no-restore --no-Rconsole "C:\temp\insertPlot.R"

R GUI (Desired) Result

R Batch Command Result

总之,我对如何让 RScript 批处理文件完成此任务感到困惑。

有人取得了成功或者可以指出我的错误吗?

最佳答案

我相信我已经找到了一种方法来无缝地完成此任务,方法是将绘图输出到 png 设备,然后利用 openxlsx 中的 insertImage包。

library(ggplot2)
library(openxlsx)

wb <- createWorkbook()
addWorksheet(wb, "Data")
addWorksheet(wb, "Graph", gridLines=FALSE)

df <- data.frame(c(1:5), c(5:1))
names(df) <- c("x","y")
writeData(wb, "Data", df)

png("graph.png", width=1024, height=768, units="px", res=144)  #output to png device
p <- ggplot(aes(x=x, y=y), data=df) + geom_line(size=1, colour="blue")
print(p)
dev.off()  #important to shut down the active png device
insertImage(wb, "Graph", "graph.png", width=11.18, height=7.82, units="in")

saveWorkbook(wb, "test.xlsx", overwrite=TRUE)

#unlink("graph.png")  #can optionally delete the original png file

希望这可以帮助任何可能面临同样问题的人。

关于r - 使用命令行时无法通过 openxlsx 包将绘图插入 XLSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534277/

相关文章:

r - 使用 ggplot 绘制气泡图的每组平均值

r - 为什么这个 for 循环会出现 46 个错误?

r - 如何将 ggplot 中的轴标签从数字日期更改为字符串?

VBA Dir 函数不适用于 Excel 2010

r - ggplot2 - 有没有办法在重用几何层的同时覆盖全局美学映射

r - 用向量值绘制图形

r - 以相反的方向创建水平条形图

javascript - 如何访问 AngularJS 中包含空格的 EXCEL 字段

Python Openpyxl,复制和粘贴单元格范围