题 你如何改变用matplotlib绘制的数字大小?


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


1107
2017-12-01 21:24


起源


plt.figure(figsize=(20,10)) - StackG
要么 fig, ax = plt.subplots(figsize=(20, 10)) - alexw
考虑到数字大小以像素为单位,我指定(800,600)并且程序崩溃了!请注意,单位是英寸。 - Raja
@alexw在文档中是这样的吗? - liang
fig = plt.gcf()  - > fig.set_size_inches(11,8) 一劳永逸地避免混淆。 - Ufos


答案:


数字 告诉你呼叫签名:

from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

figure(figsize=(1,1)) 除非你还提供不同的dpi参数,否则会创建一个80英寸到80像素的图像。


675
2018-03-12 12:41



如果你已经创建了这个数字,说它是'数字1'(这是你使用pyplot时的默认值),你可以使用数字(num = 1,figsize =(8,6),...)改变它的大小等。如果你正在使用pyplot / pylab和 show() 要创建弹出窗口,需要调用 figure(num=1,...)  之前 你绘制任何东西 - pyplot / pylab在你绘制东西时立即创建一个数字,并且此时弹出窗口的大小似乎是固定的。 - drevicko
如果删除默认参数,我觉得你的答案会更好。它不必要地降低了信噪比。 - frmsaul
这是否意味着如果将DPI设置为1,那么figsize会变成像素单位而不是英寸单位吗?在Web和GUI界面上使用matplotlib时,这将更有用。 - CMCDragonkai
使用figsize(1,1),图像中的比例为1:1?因为我的所有饼图都显示为椭圆形,而我发现使它们成为圆形的唯一方法是使用plot.axis(“equals”)。他们会有相同的效果,或者他们表现得不同? - Breno Baiardi
@BrenoBaiardi这个问题是关于数字大小的。即使图形整体为1:1,图形顶部的轴仍可具有不等长宽比,并且即使轴框为1:1,数据也可在x和y方向上不同地缩放。所以,不,该命令不能保证相等的宽高比。 - Jouni K. Seppänen


如果您已经创建了图形,则可以快速执行此操作:

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)

531
2017-11-29 17:30



解决了我的问题 imshow,现在我正在使用这个代码,因为消除了绘图区周围的空间 plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)。 - heltonbiker
同样,你可以运行 fig.set_dpi(100)。 - Erik Shilts
@drevicko你只需要添加 forward=True 到了 set_size_inches 呼叫。 - tacaswell


弃用说明:
  按照 官方Matplotlib指南,用法 pylab 不再推荐使用模块。请考虑使用 matplotlib.pyplot 相反,模块,如描述 这个答案

以下似乎有效:

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

这使得图形的宽度为5英寸,高度为10英寸 英寸

然后,Figure类将其用作其中一个参数的默认值。


259
2017-12-01 21:28



这也适用于iPython笔记本的顶部,它(给定--pylab = inline)已经在顶层导入了rcParams。 - nealmcb
这在我的Windows机器上不起作用,它具有对pyplot和Qt后端的OO接口。 fig.set_size_inches(18.5, 10.5, forward=True) 工作。 - Bennett Brown
目前正在讨论这个答案 元 - Mischa


请尝试以下简单代码:

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

您需要在绘图前设置图形大小。


154
2018-06-06 03:24



这个答案告诉我,它是matplotlib.pyplot.figure其他人没有说清楚。我一直在尝试这样的事情 matplotlib.figure 和 matplotlib.figure.Figure - Lyndon White
“_tkinter.TclError:没有足够的可用内存用于图像缓冲区” - Cerin
plt.figure(figsize=(1,1)) 是关键的举动。谢谢。 - ximiki
这对我有用 - xssChauhan


使用plt.rcParams

如果您想在不使用图形环境的情况下更改大小,还可以使用此解决方法。所以万一你正在使用 plt.plot() 例如。

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

当你内联绘图时(例如使用IPython Notebook),这非常有用。

转换为厘米

figsize 元组接受英寸,所以如果你想用厘米来设置它,你必须将它们除以2.54才能看到 这个问题


126
2018-01-18 10:55



优秀!也可用于设置一次并绘制多次。 - automorphic
由于某种原因,它似乎不再适用于Jupyter笔记本(但习惯)。 - Ray
@Ray你能写出你的Jupyter笔记本版本以及它的行为吗? - G M
@GM上次我测试过,它是来自Anaconda的Jupyter版本4.3.0和Python 3.6.2,在Windows 10和Google Chrome 63.0.3239.84上。 - Ray
为了使它工作,我需要打电话 plt.rcParams["figure.figsize"] = (20,3) 在一个额外的细胞。当我在与import语句相同的单元格中调用它时,它会被忽略。 - asmaier


谷歌的第一个链接 'matplotlib figure size' 是 AdjustingImageSize (页面的Google缓存)。

这是上一页的测试脚本。它创建 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 %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.

输出:

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. 这个答案 允许轻松地将所有三个图像组合在一个图像文件中,以查看大小的差异。


67
2017-12-02 16:01



每次我想回忆如何做到这一点我都会在这篇文章中结束。所以,这是我通常寻找的代码: fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) ) - yauheni_selivonchyk


如果您正在寻找一种方法来改变Pandas中的数字大小,您可以这样做:

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

哪里 df 是一个熊猫数据帧。如果要更改默认设置,可以执行以下操作:

import matplotlib

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

41
2017-09-29 12:54





你可以简单地使用(来自 matplotlib.figure.Figure):

fig.set_size_inches(width,height)

从Matplotlib 2.0.0开始,对画布的更改将立即显示为 forward 关键词 默认为 True

如果你想要 改变宽度 要么 高度 而不是两者,你可以使用

fig.set_figwidth(val) 要么 fig.set_figheight(val)

这些也会立即更新您的画布,但仅限于Matplotlib 2.2.0和更新版本。

适用于旧版本

你需要指定 forward=True 显式,以便在早于上面指定的版本中实时更新您的画布。请注意 set_figwidth 和 set_figheight 功能不支持 forward 早于Matplotlib 1.5.0的版本中的参数。


20
2017-10-30 15:23





尝试评论出来 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()

18
2018-03-14 08:22





要增加图形的大小N次,您需要在pl.show()之前插入它:

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

它也适用于ipython笔记本。


12
2017-10-30 10:38