Function to save ggplot

2019-03-08 18:12发布

I would like to create a function to save plots (from ggplot). I have many such plots so this will help me to work more effectively.

Here is a data frame:

### creating data frame
music <- c("Blues", "Hip-hop", "Jazz", "Metal", "Rock")
number <- c(8, 7, 4, 6, 11)
df.music <- data.frame(music, number)
colnames(df.music) <- c("Music", "Amount")

Then I create a plot:

### creating bar graph (this part is OK)
myplot <- ggplot(data=df.music, aes(x=music, y=number)) +
 geom_bar(stat="identity") +
 xlab(colnames(df.music)[1]) +
 ylab(colnames(df.music)[2]) +
 ylim(c(0,11)) +
 ggtitle("Ulubiony typ muzyki wśród studentów")

Now I want to save this plot to .pdf.

This works:

pdf("Myplot.pdf", width=5, height=5)
plot.music.bad
dev.off()

However I would like to automate this with a function which takes as an argument the plot I want to save. I don't know exactly how to do it; here's what I have tried:

save <- function(myplot){
  plot<- myplot
  pdf("lol.pdf", width=5, height=5)
  plot
  dev.off()
}
### .pdf file is created but doesn't work
save(myplot) 

So, how can I do it?

3条回答
倾城 Initia
2楼-- · 2019-03-08 18:45

If you would like an image file instead of a pdf, also the following works

ggsave(filename="myPlot.jpg", plot=last_plot())

or with additional parameters, as follows.

ggsave(filename="myPlot.jpg", plot=lastplot(),
       width = 10, height = 5, 
       units = "cm", # other options are "in", "cm", "mm" 
       dpi = 200
       )

Also following file types are supported "eps", "ps", "tex" (pictex), "pdf", "jpeg", "tiff", "png", "bmp", "svg" or "wmf".

查看更多
对你真心纯属浪费
3楼-- · 2019-03-08 18:48

You can use print() to save plots produced from ggplot2 to a file.

First, define your function to save plots:

savePlot <- function(myPlot) {
        pdf("myPlot.pdf")
        print(myPlot)
        dev.off()
}

Create your plot:

 myPlot <- ggplot(ggplot(data=df.music, aes(x=music, y=number)) +
 geom_bar(stat="identity") +
 xlab(colnames(df.music)[1]) +
 ylab(colnames(df.music)[2]) +
 ylim(c(0,11)) +
 ggtitle("Ulubiony typ muzyki wśród studentów")

And finally call the function:

savePlot(myPlot)

Alternatively, you could just use ggsave() after creating your plot:

ggsave(filename="myPlot.pdf", plot=myPlot)
查看更多
看我几分像从前
4楼-- · 2019-03-08 18:56

Following was useful for me, may be for someone else as well. One can save the last plot without explicitly referring it as well.

ggsave("filename.pdf", 
 plot = last_plot(), # or give ggplot object name as in myPlot,
 width = 5, height = 5, 
 units = "in", # other options c("in", "cm", "mm"), 
 dpi = 300)
查看更多
登录 后发表回答