第二个y轴标签被截断

56

我正在使用 matplotlib 绘制一个柱状图,需要同时展示两组数据,因此我使用了 twinx() 方法来绘制两个轴。但是,第二个 y 轴的标签被裁剪了。我尝试了几种不同的方法,如使用 tight_layout()、在 rcParams 中设置 major_pad 等,但没有成功。我感觉解决方案很简单,但是我还没有找到。

这里是一个最小化工作示例:

#!/usr/bin/env python
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

matplotlib.rcParams.update({'font.size': 21})
ax = plt.gca()
plt.ylabel('Data1') #Left side
ax2 = ax.twinx()
for i in range(10):
  if(i%2==0):
    ax.bar(i,np.random.randint(10))
  else:
    ax2.bar(i,np.random.randint(1000),color='k')


plt.ylabel('Data2') #Right

侧面

数据2被截断的示例图

plt.savefig("test.png")

2个回答

143

我刚才找到了解决方法:诀窍在于在savefig中使用bbox_inches='tight'

例如:plt.savefig("test.png",bbox_inches='tight')

现在已经修复


6
你也可以使用 tight_layout - tacaswell
4
在什么情况下?plt.tight_layout()对我来说行不通...谢谢! - zje
2
由于某种原因,plt.autoscale()也被裁剪了。我使用的是1.1.1版本,如果有帮助。 - zje
这对我很有帮助,与fig.tight_layout()一起使用,是个好建议。我相信我正在使用mpl1.5。 - jimh
3
plt.tight_layout()bbox_inches='tight' 对我都起了作用。 - Suzana

6
我遇到了相同的问题,即plt.tight_layout()不能自动解决。
取而代之的是,我使用ylabel/set_ylabel中的参数, 如下所示:

ax.set_ylabel('标签', rotation=270, color='黑色', labelpad=15)

我猜测这在你提出这个问题时还没有被实现,但由于它是谷歌搜索结果的首选,希望它能帮助当前matplotlib版本的用户。


对我没用。保存的图片中 y 标签仍然被裁剪了。 - Suzana
ax.set_xlabel('标签', fontsize='小', x=0.4) 您可以手动设置底层的ax.Text对象的x和y值,从而定义一个精确的位置。 - pds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接