说我创建了一个情节:
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)时,情节显示正常。但是,当我查看保存的图像时,它显示出来:
正如您所看到的,文字已被切断。 处理此问题的建议做法是什么?
我已经通过增加数字大小来绕过它,然后重新调整大小。但是,我的目标是生成一组具有一致文本大小的图像(图形大小不同);所以这种方法并不理想。
注意。虽然存在a similar question,但这个问题的区别在于:
xlabel
和ylabel
。 set_size_inches
功能答案 0 :(得分:6)
matplotlib有一个名为tight_layout 的函数,会自动调整子图段参数,以便子图符合图形区域。
正如文档中所述,它被标记为 experimental ,但是常用。
根据我的经验,它应尽可能晚地调用(例如在使用savefig之前),也可能在调用更改几何体的调用之后调用(如fig.set_size_inches
)。
在plt.show()
gui窗口中,其中一个按钮也正在执行此调用。
(转换为之前评论的答案)
答案 1 :(得分:6)
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%空间等)。
答案 2 :(得分:1)
我认为答案是elsewhere on stackoverflow。 简而言之,您应该使用标签文本的字体大小:
plt.ylabel('Example', fontsize=40)
plt.xlabel('Example', fontsize=40)
当然,将数字40(试错)更改为更合适的值。
我不知道这是修复还是解决方法。 我也不知道这是否有帮助。