我正在使用matplotlib绘制数据集,其中我的xlabel非常“高”(这是在TeX中渲染的公式,其中包含一个分数,因此其高度等于几行文本)。

无论如何,在绘制数字时,公式的底部总是被切除。更改图形大小似乎无济于事,而且我还无法弄清楚如何将x轴“向上”移动以为xlabel腾出空间。这样的东西是一个合理的临时解决方案,但是最好的办法是使matplotlib自动识别标签被切开并相应地调整大小。

这是我的一个示例意思是:

import matplotlib.pyplot as plt

plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()


虽然可以看到整个ylabel,但xlabel在底部被切除了。

如果这是机器特定的问题,我将在带有matplotlib 1.0.0的OSX 10.6.8上运行此问题。

评论

您可以在图像托管网站上发布并在此处链接。

如果您可以发布触发此问题的简约示例代码,则将有帮助。这样,人们可以更快地理解和重现您的问题,他们将更有可能为您提供帮助。

您的代码在我的机器(ubuntu 11.04 64bit)上运行正常(显示完全可见的公式)。也许是机器特定的问题(例如,图像中使用了带有错误尺寸信息的字体?)。您也许可以指定问题中使用的系统。

您可能还需要尝试plt.savefig(“ test.png”,bbox_inches ='tight'):stackoverflow.com/questions/21288062/…

#1 楼

使用:

import matplotlib.pyplot as plt

plt.gcf().subplots_adjust(bottom=0.15)


为标签腾出空间。

编辑:

由于我给出了答案, matplotlib添加了tight_layout()函数。
所以我建议使用它:

plt.tight_layout()


应该为xlabel腾出空间。

评论


我觉得很奇怪,一个人需要打个电话,为情节的重要部分腾出空间。这背后的原因是什么?

–另一本
2012年4月9日在8:09

出于好奇,为什么要使用gcf()。subplots_adjust而不是plt.subplots_adjust?有区别吗?

–瞻博网络-
2013年6月6日14:25



什么是gcf和gca?您忽略了解释!

–上校恐慌
2014年6月6日11:21

我遇到了同样的问题,尽管tight_layout()确实修复了xlabels的截止点,但不幸的是,它导致了我的ylabel被截止(之前没有被截止)。但是,第一个方法(subplots_adjust(bottom = 0.25))效果很好。谢谢。

– Scott H
2014年9月19日下午16:20

@ColonelPanic gcf()和gca()分别是“获取当前图形”和“获取当前轴”。

– DrMisha
15年6月8日在18:23

#2 楼

一个简单的选项是将matplotlib配置为自动调整绘图大小。它对我来说效果很好,我不确定为什么默认情况下未激活它。

方法1

在您的matplotlibrc文件中设置它

figure.autolayout : True


有关自定义matplotlibrc文件的更多信息,请参见此处:http://matplotlib.org/users/customizing.html

方法2

在运行时像这样更新rcParams

from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})


使用此方法的优点是,您的代码将在配置不同的计算机上生成相同的图形。

评论


使用此选项时,我对色条太大有一些问题。此处讨论一种可能的解决方案:matplotlib.org/users/tight_layout_guide.html

– PiQuer
13年7月22日在14:47

当我设置自定义(大字体!)字体大小时,tight_layout使事情变得一团糟。这做得更好。

– BenB
16年9月9日在21:17

在pgf后端和LaTeX一起使用时,更新rcParams确实是唯一对我有用的方法。 (即使它使图呈矩形,我也不介意)

– h4nek
20年5月14日在22:18

只有这个对我有用;没有tight_layout或box_inches有效

–zed111
20年6月16日在21:17

#3 楼

如果要将其存储到文件中,请使用bbox_inches="tight"参数解决它:

plt.savefig('myfile.png', bbox_inches = "tight")


评论


@Guido保存了一天

– pcko1
20年4月6日在21:06

到目前为止,这是适当解决问题的唯一答案。无需修改数字,只是用plt.savefig的一个合适的选项,使其明白保存。

–纪尧姆·加里戈斯(Guillaume Garrigos)
20/07/23在12:55

#4 楼

plt.autoscale()为我工作。

#5 楼

plot.tight_layout()放在图形上的所有更改之后,show()savefig()之前即可解决此问题。

评论


这不会为图的底部留出空间,而是会重新缩放整个图,这在某些情况下(例如我的情况)可能会使图看起来很奇怪。

– 89f3a1c
19年9月24日在13:16

#6 楼

您还可以在$HOME/.matplotlib/matplotlib_rc中将自定义填充设置为默认值,如下所示。在下面的示例中,我修改了底部和左侧的空白框:

# The figure subplot parameters.  All dimensions are a fraction of the
# figure width or height
figure.subplot.left  : 0.1 #left side of the subplots of the figure
#figure.subplot.right : 0.9 
figure.subplot.bottom : 0.15
...


#7 楼

由于某种原因,sharex设置为True,所以我将其重新设置为False,它可以正常工作。
df.plot(........,sharex=False)