如何更改使用 Matplotlib 绘制的图形的大小?
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 中设置的数字太大,则图形只会最大化到屏幕边缘。这开启了水平最大化和垂直最大化的可能性。
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() 之前调用
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']
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)
任何人都知道为什么这在第一次运行单元格时不起作用?
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))。
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。
打造属于自己的副业,开启自由职业之旅,从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))
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) )
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+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
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()
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洞察每一个产品背后的需求与收益,从而捕获灵感