matplotlib savefig()绘图与show()不同

2024-04-27 04:01:32 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用show()绘制X中的图时,这些图看起来非常好。但是当我开始使用savefig()来生成大量的图时,savefig()生成的图 '字体、线条、多边形看起来都比show()生成的图形小。我的环境是Ubuntu,show()的后端是Qt4Agg。如何使show()图和savefig()图看起来一致?


Tags: 图形环境ubuntushow绘制字体多边形线条
3条回答

老问题,但显然谷歌喜欢它,所以我想我把答案放在这里后,对这个问题的一些研究。

如果从头开始创建地物,可以在创建时为其提供大小选项:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(3, 6))

plt.plot(range(10)) #plot example
plt.show() #for control

fig.savefig('temp.png', dpi=fig.dpi)

figsize(width,height)调整绘图的绝对尺寸,有助于确保两个绘图看起来相同。

如另一个答案中所述,dpi选项影响文本的相对大小和行上笔划的宽度等。使用选项dpi=fig.dpi确保show()savefig()的相对大小相同。

或者,可以在创建后使用以下命令更改图形大小:

fig.set_size_inches(3, 6, forward=True)

forward允许动态更改大小。

如果在创建的图像中遇到过大边框的问题,可以使用以下方法调整这些边框:

plt.tight_layout()
#or:
plt.tight_layout(pad=2)

或:

fig.savefig('temp.png', dpi=fig.dpi, bbox_inches='tight')
#or:
fig.savefig('temp.png', dpi=fig.dpi, bbox_inches='tight', pad_inches=0.5)

第一个选项只是最小化布局和边框,第二个选项允许手动调整边框一点。这些技巧至少帮助我解决了不同savefig()show()图像的问题。

savefig为保存的图形指定DPI(如果未在.matplotlibrc中指定,则默认值为100,请查看^{} kwarg to ^{})。它不是从原始人物的DPI中提取的。

DPI会影响文本的相对大小和行上笔划的宽度等。如果希望内容看起来相同,请将fig.dpi传递到fig.savefig

例如

import matplotlib.pyplot as plt

fig = plt.figure()
plt.plot(range(10))
fig.savefig('temp.png', dpi=fig.dpi)

您将matplotlib绘图呈现到不同的设备(例如,通过石英在屏幕上显示,而使用不同的函数(plotsavefig)通过pdf文件显示,它们的参数几乎相同,然而,对于这两个函数,这些参数的默认值并不相同。

换句话说,savefig默认参数与默认的显示参数不同。

如果在matplotlib配置文件中执行此操作,则对齐它们很简单。模板文件包含在源包中,名为matplotlibrc.template。如果在安装matplotlib时未创建模板,则可以从matplotlib源或matplotlib website获取此模板。

按照所需方式自定义此文件后,将其重命名为matplotlibrc(无扩展名),并将其保存到主目录中的目录.matplotlib(注意前导“.”)。

保存图形的配置参数从提供的matplotlibrc.template中的第314行开始(本节前面的第一行是:保存图形)。

特别是,您将需要查看以下内容:

savefig.dpi       : 100         # figure dots per inch
savefig.facecolor : white       # figure facecolor when saving
savefig.edgecolor : white       # figure edgecolor when saving
savefig.extension : auto        # what extension to use for savefig('foo'), or 'auto'

下面是字体类型和各种图像格式特定参数的设置。

对于display,即PLT.show(),这些相同的参数从matplotlibrc.template中的第277行a开始(本节前面有一行:####图):

figure.figsize   : 8, 6          
figure.dpi       : 80            
figure.facecolor : 0.75       
figure.edgecolor : white     

通过比较这两个参数块的值可以看到,对于savefig和display(show),同一图形属性的默认设置是不同的。

相关问题 更多 >