2015-11-04 14 views
5

Sto tentando di inserire un grafico in un file XLSX utilizzando il pacchetto openxlsx in R. Quando utilizzo la GUI R, sono in grado di farlo.Impossibile inserire il grafico in XLSX tramite il pacchetto openxlsx quando si utilizza la riga di comando

Tuttavia, quando si utilizza un file batch, il grafico viene creato ma non inserito nel file XLSX. Invece, viene creato come un file PDF separato adiacente al file XLSX appena creato (chiamato automaticamente "Rplots.pdf"). Il frame di dati è scritto nel file XLSX bene.

Lo script R (denominata "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) 

Lo script file batch:

"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

In sintesi, ho' m confuso su come avere un file batch RScript realizzare questo.

Qualcuno ha avuto successo o può segnalare il mio errore?

+0

Dopo ulteriori ricerche, credo di aver trovato [una risposta] (https://stackoverflow.com/questions/7024486/rscript-is-plotting-to-pdf). La chiave è usare 'x11()' o 'windows()' prima di eseguire il plot per farlo funzionare. Tuttavia, questo non sta usando Rscript nel suo modo progettato. Sembra che devo tornare al tavolo da disegno. –

risposta

4

Credo di aver trovato un modo per ottenere questo risultato senza interruzioni, stampando il grafico su un dispositivo png e quindi utilizzando insertImage dal pacchetto openxlsx.

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 

Spero che questo aiuti chiunque potrebbe affrontare lo stesso problema.

Problemi correlati