How to Save a Plot to a File Using Matplotlib?
Matplotlib is a popular Python library to create plots, charts, and graphs of different types. show() is used to plot a plot, but it doesn't save the plot to a file. In this article, we will see various methods through which a Matplotlib plot can be saved as an image file.
Methods to Save a Plot in Matplotlib
There are several ways to save plots in Matplotlib:
- Using
savefig()
- Using
matplotlib.pyplot.imsave()
- Using the Pillow Library
1. Using savefig()
Method
savefig() method is the most popular way of saving plots of Matplotlib. This function enables you to save a plot in the form of a file on your local system in different formats like PNG, JPEG, SVG, etc.
In this example, we are creating our own data list, and using Matplotlib we are plotting a bar graph and saving it to the same directory. To save generated graphs in a file on a storage disk, savefig() method is used.
import matplotlib.pyplot as plt
year = ['2010', '2002', '2004', '2006', '2008']
production = [25, 15, 35, 30, 10]
# Plotting bar chart
plt.bar(year, production)
# Saving the plot as a JPEG file
plt.savefig("output.jpg")
# Saving the plot with additional parameters (this is optional)
plt.savefig("output1.jpg", facecolor='yellow', bbox_inches="tight", pad_inches=0.3, transparent=True)
Output


2. Using matplotlib.pyplot.imsave()
imsave()
function is another method to save a plot as an image file. It’s commonly used to save 2D arrays as image files, making it especially useful for working with image data.
import matplotlib.pyplot as plt
import numpy as np
# Generate random image data
img = np.random.rand(100, 100)
# Save image
plt.imsave('sample_image.png', img, cmap='gray')
Output

3. Using the Pillow Library (PIL)
In certain instances, it could be helpful to transform a Matplotlib plot into a Pillow (PIL) Image object and save it. This is specifically useful when one is dealing with image processing operations that need Pillow.
BytesIO
: We use aBytesIO
buffer to store the plot image in memory, which can then be processed by PIL.fig.savefig()
: Instead of converting the canvas directly to a string, we save the plot to the buffer in PNG format.Image.open()
: We load the image from the buffer into a PIL image object.
import matplotlib.pyplot as plt
from PIL import Image
import io
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 2, 3])
# Save the plot to a BytesIO object
buf = io.BytesIO()
fig.savefig(buf, format='png')
# Convert the BytesIO object to a PIL Image
buf.seek(0)
img = Image.open(buf)
# Save the image
img.save('pil_image_save.png')
Output
