你如何改变用matplotlib绘制的graphics的大小?

你如何改变用matplotlib绘制的graphics的大小?

数字告诉你呼叫签名:

 figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k') 

所以figure(figsize=(1,1))会创build一个每英寸的图像,这将是80 x 80像素,除非您也提供不同的dpi参数。

如果你已经创build了这个graphics,你可以快速的做到这一点:

 fig = matplotlib.pyplot.gcf() fig.set_size_inches(18.5, 10.5) fig.savefig('test2png.png', dpi=100) 

要将大小更改传播到现有的gui窗口,请添加forward=True

 fig.set_size_inches(18.5, 10.5, forward=True) 

弃用声明:
按照官方的Matplotlib指南 ,不再推荐使用pylab模块。 请考虑使用matplotlib.pyplot模块来代替,如其他答案所述 。

以下似乎工作:

 from pylab import rcParams rcParams['figure.figsize'] = 5, 10 

这使得人物的宽度是5英寸,高度是10 英寸

然后,图类使用这个作为它的一个参数的默认值。

请尝试一个简单的代码如下:

 from matplotlib import pyplot as plt plt.figure(figsize=(1,1)) x = [1,2,3] plt.plot(x, x) plt.show() 

在绘制之前,您需要设置graphics大小。

Google的第一个'matplotlib figure size'是AdjustingImageSize ( 页面的Googlecaching )。

这是上面的一个testing脚本。 它创build了不同大小的相同图像的test[1-3].png文件:

 #!/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 %ix %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. 

输出:

 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. 模块注释和实际输出不同。

  2. 这个答案可以很容易地将所有三个图像结合在一个图像文件中,以查看尺寸的差异。

使用plt.rcParams

如果您想在不使用graphics环境的情况下更改大小,也有这种解决方法。 所以如果你使用plt.plot()例如。

 import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = (20,3) 

当你内联(例如IPython Notebook)时,这是非常有用的。

如果你正在寻找一种方法来改变pandas的身材尺寸,你可以这样做:

 df['some_column'].plot(figsize=(10, 5)) 

其中df是一个pandas数据框。 如果您想更改默认设置,则可以执行以下操作:

 import matplotlib matplotlib.rc('figure', figsize=(10, 5)) 

尝试评论fig = ...线

 %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()之前插入它:

 N = 2 params = pl.gcf() plSize = params.get_size_inches() params.set_size_inches( (plSize[0]*N, plSize[1]*N) ) 

它也适用于ipython笔记本。

这适用于我:

 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 本身不能使用公制系统,所以如果你想以合理的单位长度(如厘米)来指定graphics的大小,可以执行以下操作( gns-ank中的代码):

 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) 

那么你可以使用:

 plt.figure(figsize=cm2inch(21, 29.7)) 

即使在绘制graphics之后(即至less使用Qt4Agg / TkAgg – 而不是MacOSX – 使用matplotlib 1.4.0),这会立即调整graphics大小:

 matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px) 

你可以简单地使用:

 set_size_inches(width,height) 

从Matplotlib 2.0.0开始,甚至会自动更新canvas,因为forward关键字现在默认为True 。 (对于早期版本,您需要明确指定forward=True 。)

如果您只想改变宽度高度而不是两者,可以使用

 set_figwidth 

要么

 set_figheight 

不幸的是,您需要指定forward=True来自动传播这些更改,因为这些function仍默认为False , 尽pipe这个问题正在解决。 (这些函数不支持Matplotlib 1.5.0之前的版本)