问:

如何更改使用 Matplotlib 绘制的图形的大小?

答1:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

figure 告诉您调用签名:

from matplotlib.pyplot import figure

figure(figsize=(8, 6), dpi=80)

figure(figsize=(1,1)) 将创建一个 80×80 像素的逐英寸图像,除非您还提供不同的 dpi 参数。

如果您已经创建了图形,则说它是“图形 1”(这是您使用 pyplot 时的默认图形),您可以使用 figure(num=1, figsize=(8, 6), ...)更改它的大小等。如果您使用 pyplot/pylab 和 show() 创建一个弹出窗口,您需要调用 figure(num=1,...) before 您绘制任何东西 - pyplot/pylab 创建一个图为一旦你画了一些东西,弹出窗口的大小似乎在这一点上是固定的。

这是否意味着如果将 DPI 设置为 1,那么 figsize 将变为像素单位而不是英寸单位?这在 web 和 GUI 界面上使用 matplotlib 时会更有用。

使用 figsize(1,1) 您将在图像中获得 1:1 的比例?因为我所有的饼图都显示为椭圆形,而我发现使它们变圆的唯一方法是使用 plot.axis("equals")。它们会产生相同的效果还是表现不同?

@BrenoBaiardi 这个问题是关于图形大小的。即使整个图形是 1:1,图形顶部的轴仍可能具有不相等的纵横比,即使轴框是 1:1,数据在 x 和 y 方向上的缩放比例也可能不同。所以,不,该命令不能保证相等的纵横比。

请注意,如果您在 figsize 中设置的数字太大,则图形只会最大化到屏幕边缘。这开启了水平最大化和垂直最大化的可能性。

答2:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

如果您已经创建了图形,您可以使用 figure.set_size_inches 调整图形大小:

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)

此外,作为 Erik Shilts mentioned in the comments,您还可以使用 figure.set_dpi 来“[s]以每英寸点数为单位设置图形的分辨率”

fig.set_dpi(100)

解决了我使用 imshow 的问题,现在我在使用 plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0) 消除绘图区域周围的空间后使用此代码。

同样,您可以运行 fig.set_dpi(100)。

我在 ipython 3.7、matplotlib 3.0.3 下的 OS X 上使用它。我可以调整图形大小,但窗口不会调整大小(图形画布会调整,但窗口不会扩大或缩小以适应画布)。 forward=True 关键字参数在这个平台上似乎没有预期的效果。

窗口调整大小对我不起作用。看起来 forward=True 是关键,但它没有解决它。事实证明它确实修复了它,我只是要小心调用 set_size_inches 的顺序。它需要在调用tight_layout() 之后调用。我在axes.bar 图上遇到了这个问题,在常规图上我没有。

应该在 .show() 之前调用

答3:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

使用 plt.rcParams

如果您想在不使用图形环境的情况下更改大小,也可以使用此解决方法。因此,例如,如果您使用 plt.plot(),您可以设置一个具有宽度和高度的元组。

import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = (20,3)

这在您内联绘图时非常有用(例如,使用 IPython Notebook)。作为 asmaier noticed,最好不要将此语句放在导入语句的同一单元格中。

要将全局图形大小重置为后续绘图的默认值:

plt.rcParams["figure.figsize"] = plt.rcParamsDefault["figure.figsize"]

转换为厘米

figsize 元组接受英寸,所以如果你想以厘米为单位,你必须将它们除以 2.54。看看this question。

出色的!对于设置一次并多次绘制也很有用。

出于某种原因,这似乎不再适用于 Jupyter 笔记本(但曾经)。

@Ray 你能写出你的 Jupyter 笔记本的版本吗?它的行为对我有用吗

为了使它工作,我需要在一个额外的单元格中调用 plt.rcParams["figure.figsize"] = (20,3)。当我在与导入语句相同的单元格中调用它时,它会被忽略。

要将后续绘图的全局图形大小重置为默认值,请使用 plt.rcParams['figure.figsize'] = plt.rcParamsDefault['figure.figsize']

答4:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

弃用说明:根据官方 Matplotlib 指南,不再推荐使用 pylab 模块。请考虑改用 matplotlib.pyplot 模块,如其他答案所述。

以下似乎有效:

from pylab import rcParams

rcParams['figure.figsize'] = 5, 10

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

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

这在 iPython notebook 的顶部也能很好地工作,它(给定 --pylab=inline)已经在顶层导入了 rcParams。

这在我的带有 pyplot 和 Qt 后端的 OO 接口的 Windows 机器上不起作用。 fig.set_size_inches(18.5, 10.5, forward=True) 工作。

此答案目前在 Meta 上讨论

对于 Python 版本:3.6.4,matplotlib:2.2.3 我认为您需要传递一个列表或元组,例如 rcParams['figure.figsize'] = (5, 10)

任何人都知道为什么这在第一次运行单元格时不起作用?

答5:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

请尝试以下简单代码:

from matplotlib import pyplot as plt

plt.figure(figsize=(1,1))

x = [1,2,3]

plt.plot(x, x)

plt.show()

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

这个答案告诉我它是 matplotlib.pyplot.figure,其他人没有说清楚。我一直在尝试 matplotlib.figure 和 matplotlib.figure.Figure

“_tkinter.TclError:没有足够的可用内存用于图像缓冲区”

plt.figure(figsize=(1,1)) 是关键动作。谢谢你。

在 jupyter 笔记本中,这对我有用: plt.figure(figsize=(20,10))

对于那些使用 jupyter notebook 的人,请确保在其他 plt 命令之前使用 plt.figure(figsize=(15, 10))。

答6:

huntsbot.com – 高效赚钱,自由工作

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

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

其中 df 是 Pandas 数据框。或者,要使用现有图形或轴:

fig, ax = plt.subplots(figsize=(10, 5))

df['some_column'].plot(ax=ax)

如果要更改默认设置,可以执行以下操作:

import matplotlib

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

有关更多详细信息,请查看文档:pd.DataFrame.plot。

答7:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

import matplotlib.pyplot as plt

plt.figure(figsize=(20,10))

plt.plot(x,y) ## This is your plot

plt.show()

您还可以使用:

fig, ax = plt.subplots(figsize=(20, 10))

答8:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

‘matplotlib figure size’ 在 Google 中的第一个链接是 AdjustingImageSize (Google cache of the page)。

这是来自上述页面的测试脚本。它会创建同一图像的不同大小的 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.]

两个注意事项:

模块注释和实际输出不同。这个答案可以轻松地将所有三个图像组合在一个图像文件中,以查看大小的差异。

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

答9:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

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

fig.set_size_inches(width,height)

从 Matplotlib 2.0.0 开始,对画布的更改将立即可见,如 forward 关键字 defaults to True。

如果您只想 change the width or height 而不是两者,您可以使用

fig.set_figwidth(val) 或 fig.set_figheight(val)

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

对于旧版本

您需要明确指定 forward=True 以便在比上面指定的版本更旧的版本中实时更新您的画布。请注意,在 Matplotlib 1.5.0 之前的版本中,set_figwidth 和 set_figheight 函数不支持 forward 参数。

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

答10:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

尝试注释掉 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()

答11:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

这对我很有效:

from matplotlib import pyplot as plt

F = plt.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

此论坛帖子也可能有所帮助:Resizing figure windows

窗口调整大小对我不起作用。看起来 forward=True 是关键,但它没有解决它。事实证明它确实修复了它,我只是要小心调用 set_size_inches 的顺序。它需要在调用tight_layout() 之后调用。我在axes.bar 图上遇到了这个问题,在常规图上我没有。

原文链接:https://www.huntsbot.com/qa/6LlJ/how-do-i-change-the-size-of-figures-drawn-with-matplotlib?lang=zh_CN&from=csdn

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

查看原文