Skip to content
R for the Rest of Us Logo

Fundamentals of R

Save Plots

Transcript

Click on the transcript to go to that point in the video. Please note that transcripts are auto generated and may contain minor inaccuracies.

View code shown in video
# Load Packages -----------------------------------------------------------

library(tidyverse)

# Import Data -------------------------------------------------------------

penguins <- read_csv("penguins.csv")

# Save Plots --------------------------------------------------------------

# If you need to save a plot, you can use the ggsave() function.
# By default ggsave() will save the last plot you made.

# First we plot

ggplot(data = penguin_bill_length_by_island_and_sex,
       mapping = aes(x = island,
                     y = mean_bill_length,
                     fill = sex)) +
  geom_col(position = "dodge") +
  labs(title = "Males have longer bills than females",
       subtitle = "But they're all good penguins",
       caption = "Data from the palmerpenguins R package",
       x = NULL,
       y = "Mean Bill Length in Millimeters",
       fill = NULL) +
  theme_economist() +
  facet_grid(cols = vars(sex))

# Then we save

ggsave(filename = "plots/penguins-plot.png",
       height = 8,
       width = 11,
       units = "in",
       bg = "white",
       dpi = 300)

# We can save our plot to other formats as well. 
# PDF is a great option because it produces small file sizes 
# and high-quality plots. 
# You don't need to list dpi here as PDFs are vector based.

ggsave(filename = "plots/penguins-plot.pdf",
       height = 8,
       width = 11,
       units = "in")

# You can also save a plot and then use that within ggsave()

penguins_plot <- ggplot(data = penguin_bill_length_by_island_and_sex,
       mapping = aes(x = island,
                     y = mean_bill_length,
                     fill = sex)) +
  geom_col(position = "dodge") +
  labs(title = "Males have longer bills than females",
       subtitle = "But they're all good penguins",
       caption = "Data from the palmerpenguins R package",
       x = NULL,
       y = "Mean Bill Length in Millimeters",
       fill = NULL) +
  theme_economist() +
  facet_grid(cols = vars(sex))

penguins_plot

ggsave(plot = penguins_plot,
       filename = "plots/penguins-plot-2.pdf",
       height = 8,
       width = 11,
       units = "in")

Your Turn

# Load Packages -----------------------------------------------------------

library(tidyverse)

# Import Data -------------------------------------------------------------

penguins <- read_csv("penguins.csv")
			
penguin_weight_by_species_and_sex <- penguins |> 
  drop_na(sex) |> 
  group_by(species, sex) |> 
  summarize(mean_weight = mean(body_mass_g))
			
# Save Plots --------------------------------------------------------------

# Copy the code from your last plot
# Save it as 10cm wide by 20cm tall png file with a white background

# YOUR CODE HERE

Learn More

I have only showed you how to save plots by saving the last plot you made. You can also save a plot as an object and then use this object as an argument in your ggsave function. For more on doing that, see the relevant page from the Stat545 course by Jenny Bryan.

Have any questions? Put them below and we will help you out!

You need to be signed-in to comment on this post. Login.

Marisel Strand

Marisel Strand • March 8, 2024

Hello, why do I get this when trying to save my plot?--thanks!

ggsave(filename = "plots/penguins_by_weight_species.png",
       height = 20,
       width = 10,
       untis = "cm",
       bg = "white",
       dpi = 300)
Cannot find directory plots.
ℹ Would you like to create a new directory?

1: Yes
2: No

Selection:
David Keyes

David Keyes Founder • March 8, 2024

It sounds like you're missing the directory called plots. Do you have that directory? Also, make sure you've got units spelled correctly (your code says untis now). :)

Marisel Strand

Marisel Strand • March 8, 2024

Thanks for catching that!:) I'm not sure about that directory... Is that something that I have to create?

David Keyes

David Keyes Founder • March 8, 2024

Yes, if you don't already have the directory you will need to create it.

Leo Gutknecht-Gmeiner

Leo Gutknecht-Gmeiner • March 27, 2024

How can I save multiple plots at the same time? That would be handy.

David Keyes

David Keyes Founder • March 27, 2024

This gets a bit complicated because it involves creating a custom function and working with the purrr package for iteration, but if you want to see how it works, I've written a blog post on the topic.

Claire Hazbun

Claire Hazbun • August 12, 2024

Hi, similar question as Marisel below. I did this:

ggsave(filename = "penguins-by-weight-species.png",
       height = 10,
       width = 20,
       units = "cm",
       bg = "white",
       dpi = 300)

Which gave me this:

Enter an item from the menu, or 0 to exit
Selection:        height = 10,
Enter an item from the menu, or 0 to exit
Selection:        width = 20,
Enter an item from the menu, or 0 to exit
Selection:        units = "cm",
Enter an item from the menu, or 0 to exit
Selection:        bg = "white",
Enter an item from the menu, or 0 to exit
Selection:        dpi = 300)
Enter an item from the menu, or 0 to exit
Selection: 

I then entered 0. It then said:

Error in `ggsave()`:
! Cannot find directory plots.
ℹ Please supply an existing directory or use `create.dir = TRUE`.

I then put create.dir = TRUE and then ran the code again which successfully saved the image.

Can you explain to me what I just did/what just happened?

David Keyes

David Keyes Founder • August 14, 2024

To be honest, I'm not totally certain. Your code doesn't show you saving into the plots folder so I don't really know why it would give you a message about that folder. If you can recreate this and send me a video (here, I can take a look.

Tosan Okome

Tosan Okome • October 28, 2024

Hi. I ran the code below:

ggsave(plot = penguin_weight_by_species_and_sex, 
       filename = "Plots/penguin_plot.png",
       height = 20,
       width = 10,
       units = "cm",
       bg = "white",
       dpi = 300
       )

And I received the following error message and a blank png file saved to my "Plots" directory.

Error in UseMethod("grid.draw") : 
  no applicable method for 'grid.draw' applied to an object of class "c('grouped_df', 'tbl_df', 'tbl', 'data.frame')"

Can I get a hand?

Gracielle Higino

Gracielle Higino Coach • October 30, 2024

Hi Tosan! That's an interesting error. I was able to reproduce it, but still I got the plot saved despite of the error message (although it was saved with the wrong file name). The error in your code is the first line. You are asking R to save penguin_weight_by_species_and_sex as a plot, but this is a dataframe. If, instead, you assign this name to your plot too, then your code should work without errors. I recommend that you name your plot something else and replace penguin_weight_by_species_and_sex in your ggsave function, or just plot and save right after, so you don't need to specify which plot you want to save (R will save the last rendered plot by default). Let me know what other questions you have!

Tosan Okome

Tosan Okome • November 3, 2024

You were absolutely right! I've successfully saved my plot. Thanks you.