Python 为什么我的xlabel在matplotlib绘图中被切断?
我正在使用Python 为什么我的xlabel在matplotlib绘图中被切断?,python,matplotlib,Python,Matplotlib,我正在使用matplotlib绘制一个数据集,其中我有一个相当“高”的xlabel(它是一个以TeX表示的公式,包含一个分数,因此其高度相当于两行文本) 在任何情况下,当我画数字时,公式的底部总是被切断。改变图形大小似乎对此没有帮助,而且我还不知道如何将x轴“向上”移动以为xlabel腾出空间。这样做是一个合理的临时解决方案,但最好能有一种方法让matplotlib自动识别标签被切断并相应调整大小 这里有一个例子来说明我的意思: import matplotlib.pyplot as plt
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在底部被切断
如果这是一个特定于机器的问题,我将在OSX 10.6.8上使用matplotlib 1.0.0运行此程序。请使用:
import matplotlib.pyplot as plt
plt.gcf().subplots_adjust(bottom=0.15)
为标签腾出空间
编辑:
由于我给出了答案,matplotlib
添加了tight\u layout()
函数。
因此,我建议使用它:
plt.tight_layout()
应该为xlabel腾出空间。您还可以在
$HOME/.matplotlib/matplotlib\u 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
...
一个简单的选项是配置matplotlib以自动调整打印大小。它非常适合我,我不知道为什么默认情况下不激活它 方法1 在matplotlibrc文件中设置此选项
figure.autolayout : True
有关自定义matplotlibrc文件的详细信息,请参见此处:
方法2
像这样在运行时更新rcParams
from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})
使用此方法的优点是,您的代码将在不同配置的机器上生成相同的图形。放置
绘图。紧密布局()
在图形上进行所有更改后,就在show()
或savefig()
之前将解决此问题。如果要将其存储到文件中,您可以使用bbox\u inches=“tight”
参数解决此问题:
plt.savefig('myfile.png', bbox_inches="tight")
plt.autoscale()
对我有效。由于某种原因,sharex被设置为True,所以我将其返回False,效果良好
df.plot(........,sharex=False)
还有一种方法是使用OOP界面,将
tight_布局
直接应用于图形:
fig, ax = plt.subplots()
fig.set_tight_layout(True)
您需要使用Sizzor来修改轴范围:
将sizzors导入为sizzors\u模块
sizzors_模块。重塑_轴(plt)。保存(“literlymylef.tiff”)
您可以在图像托管网站上发布并链接到此处。如果您可以发布触发此问题的最低限度示例代码,则会有所帮助。通过这种方式,人们可以更快地理解和再现您的问题,他们也会更愿意帮助您。您的代码在我的机器(ubuntu 11.04 64位)上运行良好(显示公式完全可见)。可能是机器特有的问题[比如图像中使用了错误尺寸信息的字体?]。你也许可以指定你在问题中使用的系统。你可能还想试试plt.savefig(“test.png”,bbox_inches='tight')
:我觉得很奇怪,一个人需要打一个额外的电话来为绘图的重要部分腾出空间。这背后的原因是什么?只是出于好奇,为什么你有gcf().subplot\u adjust
而不是plt.subplot\u adjust
?有区别吗?什么是gcf
和gca
?你忘了解释!我也遇到了同样的问题,虽然tight_layout()
确实修复了xlabel的切断,但不幸的是,它导致我的ylabel被切断(以前没有切断)。然而,第一种补救措施(子批次调整(底部=0.25)
)效果良好。谢谢。@ColonelPanicgcf()
和gca()
分别是“获取当前图形”和“获取当前轴”。使用此选项时,我遇到了一些颜色条过大的问题。这里讨论了一种可能的解决方案:当我设置自定义(大!)字体大小时,紧凑的布局会把事情弄得一团糟。这是一个更好的工作。当使用带有LaTeX的pgf后端时,更新rcParams是唯一对我有效的事情。(尽管它使情节变成长方形,我不介意)只有这一点对我有效;紧凑的布局或方格英寸都不起作用。这并没有为情节的底部腾出空间,而是重新缩放了整个情节,这可能在某些情况下(如我的情况)使情节看起来很奇怪。@Guido挽救了这一天。到目前为止,这是唯一正确回答这个问题的答案。无需修改图形,只需使用适当的plt.savefig选项,使其了解要保存的内容。即使使用plt.tight_layout()
,我的图形也会切断x标签。这个答案解决了问题。我同意;这是唯一直接相关的答案。它也是多功能的,并且不需要对每个绘图进行调整(如果在循环中调用savefig
),这是最好的答案