leo*_*on 51 python plot graph matplotlib
当我使用show()
绘制图表时X
,图表看起来非常好.但是,当我开始使用savefig()
生成大量图形时,savefig()
生成的图形的字体,线条,多边形看起来都比show()
生成的图形小.我的环境是Ubuntu,后端show()
是Qt4Agg
.如何使show()
情节和savefig()
情节看起来一致?
Joe*_*ton 60
savefig
指定已保存图形的DPI(如果未在.matplotlibrc中指定,则默认为100,请查看dpi
kwargsavefig
).它并没有从原始数字的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)
Run Code Online (Sandbox Code Playgroud)
dou*_*oug 28
您将matplotlib图表渲染到不同的设备(例如,通过石英在屏幕上使用不同的函数(plot vs savefig)通过pdf 渲染到参数几乎相同,但这些参数的默认值不相同两个功能.
换句话说,在savefig默认参数是从不同的默认的显示参数.
如果你在matplotlib配置文件中执行它们,那么对齐它们很简单.模板文件包含在源包中,名为matplotlibrc.template.如果您在安装matplotlib时没有创建一个,则可以从matplotlib源或matplotlib网站获取此模板.
按照自己的方式自定义此文件后,将其重命名为matplotlibrc(无扩展名)并将其保存到目录.matplotlib(请注意前导'.'),该目录应位于您的主目录中.
用于保存数字的配置参数从提供的matplotlibrc.template中的第314行开始(本节前面的第一行是:### SAVING FIGURES).
特别是,您需要查看以下内容:
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'
Run Code Online (Sandbox Code Playgroud)
这些行下面是字体类型和各种图像格式特定参数的设置.
这些相同的参数进行显示,即PLT.show() ,开始在约线277一个在matplotlibrc.template(本节前面有线:###图):
figure.figsize : 8, 6
figure.dpi : 80
figure.facecolor : 0.75
figure.edgecolor : white
Run Code Online (Sandbox Code Playgroud)
正如你可以通过比较参数这两个块的值看,对于相同的人物的属性的默认设置是不同的用于savefig与显示(显示).
老问题,但显然谷歌喜欢它,所以我想我在对这个问题进行一些研究之后给出了答案.
如果您从头开始创建一个图形,则可以在创建时为其指定尺寸选项:
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)
Run Code Online (Sandbox Code Playgroud)
figsize(width,height)调整绘图的绝对尺寸,有助于确保两个绘图看起来相同.
如另一个答案中所述,dpi选项会影响文本的相对大小和行上行程的宽度等.使用dpi = fig.dpi选项可确保show()和savefig的相对大小相同().
或者,可以在创建后使用以下内容更改图形大小:
fig.set_size_inches(3, 6, forward=True)
Run Code Online (Sandbox Code Playgroud)
forward允许动态改变大小.
如果在创建的图像中有太大的边框时遇到问题,可以使用以下方法调整这些边框:
plt.tight_layout()
#or:
plt.tight_layout(pad=2)
Run Code Online (Sandbox Code Playgroud)
要么:
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)
Run Code Online (Sandbox Code Playgroud)
第一个选项只是最小化布局和边框,第二个选项允许手动调整边框.这些提示至少帮助我解决了我的不同savefig()和show()图像的问题.