你如何改变用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.]
两个注释:
-
模块注释和实际输出不同。
-
这个答案可以很容易地将所有三个图像结合在一个图像文件中,以查看尺寸的差异。
使用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之前的版本)