假设我创建了一个情节:
import matplotlib.pyplot as plt
plt.clf()
import numpy as np
props = np.random.randint(0,100,(200,))
x=np.arange(1,201,1)
plt.plot(x,props,c='k')
plt.xlabel('blah blah blah blah blah blah\n blah blah blah blah blah')
plt.ylabel('blah blah blah blah blah blah blah blah blah')
fig=plt.gcf()
fig.set_size_inches(3.75,3.75)#14, 23)
plt.savefig('testfig.png',dpi=300)
使用 Ipython(通过 Spyder)时,绘图显示正常。然而,当我查看保存的图像时,它呈现如下:
正如您所看到的,文本被截断了。处理这个问题的建议做法是什么?
我通过增加图形大小并随后重新调整大小来解决这个问题。然而,我的目标是生成一组文本大小一致的图像(图形大小各不相同);所以这种方法并不理想。
Note. Whilst 类似的问题 https://stackoverflow.com/questions/6774086存在,这个问题的独特之处在于:
- 涉及两者
xlabel
and ylabel
.
- 结合
set_size_inches
function
- 力求确保文本大小与不同的图形大小保持一致。
- 试图找出 Ipython 输出不同的原因
来自保存图
Spyder 中的 Ipython 控制台使用inline
后端,将图形保存为 png 并显示输出图像。保存时,它使用该选项bbox_inches = "tight"
.
因此,为了获得与控制台中显示的相同的图形,您也可以决定使用此选项 - 它基本上会扩展或缩小边界框,以便显示画布中的所有对象。
plt.savefig('testfig.png',dpi=300, bbox_inches = "tight")
或者,您可以在保存或显示图窗之前确保所有对象都已位于图窗边界内。这可以通过使用来完成
plt.tight_layout()
它尝试自动执行此操作,或者您可以使用
plt.subplots_adjust(left=0.3, right=0.9, bottom=0.3, top=0.9)
其中参数表示每侧的边距,以图形大小的分数为单位(左侧 30% 空间,右侧 10% 空间等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)