How do you change the size of figures drawn with matplotlib?
如何更改使用matplotlib绘制的图形的大小?
图中显示了呼叫签名:
1 2 | from matplotlib.pyplot import figure figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k') |
如果已经创建了图形,可以快速执行此操作:
1 2 3 | fig = matplotlib.pyplot.gcf() fig.set_size_inches(18.5, 10.5) fig.savefig('test2png.png', dpi=100) |
要将大小更改传播到现有的GUI窗口,请添加
1 | fig.set_size_inches(18.5, 10.5, forward=True) |
Deprecation note:
As per the official Matplotlib guide, usage of thepylab module is no longer recommended. Please consider using thematplotlib.pyplot module instead, as described by this other answer.
以下内容似乎有效:
1 2 | from pylab import rcParams rcParams['figure.figsize'] = 5, 10 |
这使得这个数字的宽度为5英寸,高度为10英寸。
然后,figure类将其用作其中一个参数的默认值。
请尝试以下简单代码:
1 2 3 4 5 | from matplotlib import pyplot as plt plt.figure(figsize=(1,1)) x = [1,2,3] plt.plot(x, x) plt.show() |
您需要在绘图之前设置图形大小。
使用plt.rcparams
还有一个解决方法,以防您不使用图形环境而更改大小。因此,如果您使用
1 2 | import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = (20,3) |
这在您直接绘图(例如,使用IPython笔记本)时非常有用。正如@asmaier注意到的那样,最好不要将此语句放在imports语句的同一单元格中。
转换为厘米Google中针对
这是上面一页的测试脚本。它创建同一图像的不同大小的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #!/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[0], DPI*DefaultSize[1]) # 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[0]*2, DefaultSize[1]*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. |
输出:
1 2 3 4 5 6 | 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.] |
两个音符:
模块注释和实际输出不同。
这个答案可以很容易地将三个图像合并到一个图像文件中,以查看大小的差异。
如果您正在寻找一种方法来改变熊猫的体型,您可以这样做,例如:
1 | df['some_column'].plot(figsize=(10, 5)) |
其中,
1 2 3 | import matplotlib matplotlib.rc('figure', figsize=(10, 5)) |
您可以简单地使用(从matplotlib.figure.figure):
1 | fig.set_size_inches(width,height) |
从matplotlib 2.0.0开始,画布的更改将立即可见,因为
如果只想更改宽度或高度,而不是同时更改两者,则可以使用
这些也会立即更新你的画布,但只能在Matplotlib 2.2.0和更新版本中更新。
对于旧版本您需要显式地指定
试着评论一下
1 2 3 4 5 6 7 8 9 10 11 12 | %matplotlib inline import numpy as np import matplotlib.pyplot as plt N = 50 x = np.random.rand(N) y = np.random.rand(N) area = np.pi * (15 * np.random.rand(N))**2 fig = plt.figure(figsize=(18, 18)) plt.scatter(x, y, s=area, alpha=0.5) plt.show() |
要将图形的大小增加n倍,需要在pl.show()之前插入:
1 2 3 4 | N = 2 params = pl.gcf() plSize = params.get_size_inches() params.set_size_inches( (plSize[0]*N, plSize[1]*N) ) |
它也适用于ipython笔记本。
这对我很有效:
1 2 3 4 5 | from matplotlib import pyplot as plt F = gcf() Size = F.get_size_inches() F.set_size_inches(Size[0]*2, Size[1]*2, forward=True)#Set forward to True to resize window along with plot in figure. plt.show() #or plt.imshow(z_array) if using an animation, where z_array is a matrix or numpy array |
这也可能有帮助:http://matplotlib.1069221.n5.nabble.com/resizing-figure-windows-td11424.html
由于Matplotlib不能本机使用公制,如果要以合理的长度单位(如厘米)指定图形的大小,可以执行以下操作(GNS ANK提供的代码):
1 2 3 4 5 6 | def cm2inch(*tupl): inch = 2.54 if isinstance(tupl[0], tuple): return tuple(i/inch for i in tupl[0]) else: return tuple(i/inch for i in tupl) |
然后您可以使用:
1 | plt.figure(figsize=cm2inch(21, 29.7)) |
这将立即调整图形的大小,即使在绘制图形之后(至少使用qt4agg/tkagg-但不使用macosx-和matplotlib 1.4.0):
1 | matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px) |