Solving problem is about exposing yourself to as many situations as possible like How do you change the size of figures drawn with matplotlib? and practice these strategies over and over. With time, it becomes second nature and a natural way you approach any problems in general. Big or small, always start with a plan, use other strategies mentioned here till you are confident and ready to code the solution.
In this post, my aim is to share an overview the topic about How do you change the size of figures drawn with matplotlib?, which can be followed any time. Take easy to follow this discuss.
How do you change the size of figure drawn with matplotlib?
figure tells you the call signature:
from matplotlib.pyplot import figure figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
figure(figsize=(1,1)) would create an inch-by-inch image, which would be 80-by-80 pixels unless you also give a different dpi argument.
If you’ve already got the figure created you can quickly do this:
fig = matplotlib.pyplot.gcf() fig.set_size_inches(18.5, 10.5) fig.savefig('test2png.png', dpi=100)
To propagate the size change to an existing gui window add
fig.set_size_inches(18.5, 10.5, forward=True)
There is also this workaround in case you want to change the size without using the figure environment. So in case you are using
plt.plot() for example, you can set a tuple with width and height.
import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = (20,3)
This is very useful when you plot inline (e.g. with IPython Notebook). As @asamaier noticed is preferable to not put this statement in the same cell of the imports statements.
Conversion to cm
figsize tuple accepts inches so if you want to set it in centimetres you have to divide them by 2.54 have a look to this question.
As per the official Matplotlib guide, usage of the
pylabmodule is no longer recommended. Please consider using the
matplotlib.pyplotmodule instead, as described by this other answer.
The following seems to work:
from pylab import rcParams rcParams['figure.figsize'] = 5, 10
This makes the figure’s width 5 inches, and its height 10 inches.
The Figure class then uses this as the default value for one of its arguments.
Please try a simple code as following:
from matplotlib import pyplot as plt plt.figure(figsize=(1,1)) x = [1,2,3] plt.plot(x, x) plt.show()
You need to set the figure size before you plot.
In case you’re looking for a way to change the figure size in Pandas, you could do e.g.:
df is a Pandas dataframe. Or, to use existing figure or axes
fig, ax = plt.subplots(figsize=(10,5)) df['some_column'].plot(ax=ax)
If you want to change the default settings, you could do the following:
import matplotlib matplotlib.rc('figure', figsize=(10, 5))
Here’s a test script from the above page. It creates
test[1-3].png files of different sizes of the same image:
#!/usr/bin/env python """ This is a small demo file that helps teach how to adjust figure sizes for matplotlib """ import matplotlib print "using MPL version:", matplotlib.__version__ matplotlib.use("WXAgg") # do this before pylab so you don'tget the default back end. import pylab import numpy as np # Generate and plot some simple data: x = np.arange(0, 2*np.pi, 0.1) y = np.sin(x) pylab.plot(x,y) F = pylab.gcf() # Now check everything with the defaults: DPI = F.get_dpi() print "DPI:", DPI DefaultSize = F.get_size_inches() print "Default size in Inches", DefaultSize print "Which should result in a %i x %i Image"%(DPI*DefaultSize, DPI*DefaultSize) # the default is 100dpi for savefig: F.savefig("test1.png") # this gives me a 797 x 566 pixel image, which is about 100 DPI # Now make the image twice as big, while keeping the fonts and all the # same size F.set_size_inches( (DefaultSize*2, DefaultSize*2) ) Size = F.get_size_inches() print "Size in Inches", Size F.savefig("test2.png") # this results in a 1595x1132 image # Now make the image twice as big, making all the fonts and lines # bigger too. F.set_size_inches( DefaultSize )# resetthe size Size = F.get_size_inches() print "Size in Inches", Size F.savefig("test3.png", dpi = (200)) # change the dpi # this also results in a 1595x1132 image, but the fonts are larger.
using MPL version: 0.98.1 DPI: 80 Default size in Inches [ 8. 6.] Which should result in a 640 x 480 Image Size in Inches [ 16. 12.] Size in Inches [ 16. 12.]
The module comments and the actual output differ.
This answer allows easily to combine all three images in one image file to see the difference in sizes.
import matplotlib.pyplot as plt plt.figure(figsize=(20,10)) plt.plot(x,y) ## This is your plot plt.show()
You can also use:
fig, ax = plt.subplots(figsize=(20, 10))