使用matplotlib tight_layout()时出现ValueError
好的,这是我第一次在这里提问,请大家耐心点哦 ;-)
我正在尝试用matplotlib创建一系列的子图,每个子图都有两个y轴,然后把这个图保存下来。我使用GridSpec来为子图创建一个网格,但我发现它们有点重叠,这样我不太喜欢。所以我想用tight_layout()来解决这个问题,按照matplotlib的文档,这个方法应该没问题。简单来说,我的代码大概是这样的:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure(num=None, facecolor='w', edgecolor='k')
grid = gridspec.GridSpec(2, numRows)
# numRows comes from the number of subplots required
# then I loop over all the data files I'm importing and create a subplot with two y-axes each time
ax1 = fig.add_subplot(grid[column, row])
# now I do all sorts of stuff with ax1...
ax2 = ax1.twinx()
# again doing some stuff here
在数据处理的循环结束后,我创建了所有的子图,最后我得到了
fig.tight_layout()
fig.savefig(str(location))
从我能理解的来看,这个应该是可以工作的,但当我调用tight_layout()时,我收到了一个ValueError,提示self.subplotpars: left不能大于或等于right。我的问题是:我该如何找出导致这个错误的原因,以及如何修复它呢?
2 个回答
0
我遇到过类似的问题,问题出在我的一个子图上(在我的例子中是 ax.text
),它绘制的位置远远超出了我设置的 xlim
和 ylim
范围。所以一定要检查这一点哦 :)
7
我之前也遇到过这个错误,我有一个对我有效的解决办法。不过我不确定这个方法对你是否也有效。在matplotlib中,
plt.fig.subplots_adjust()
这个命令可以用来“拉伸”图表。左边和底部的拉伸程度会随着数字变小而增加,而顶部和右边的拉伸程度则会随着数字变大而增加。所以如果左边的值大于或等于右边的值,或者底部的值大于或等于顶部的值,图表就会有点翻转。我把我的命令调整成了这样:
fig = plt.figure()
fig.subplots_adjust(bottom = 0)
fig.subplots_adjust(top = 1)
fig.subplots_adjust(right = 1)
fig.subplots_adjust(left = 0)
然后你可以填入自己的数字来调整,只要确保左边和底部的值比较小就可以了。希望这个方法能解决你的问题。