与this question非常相似,但不同之处在于我的身材可以达到需要的大小 .
我需要在matplotlib中生成一堆垂直堆叠的图 . 结果将使用figsave保存并在网页上查看,因此我不关心最终图像的高度,只要子图间隔开,这样它们就不会重叠 .
无论我有多大的数字,子图总是似乎重叠 .
我的代码目前看起来像
import matplotlib.pyplot as plt
import my_other_module
titles, x_lists, y_lists = my_other_module.get_data()
fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
plt.subplot(len(titles), 1, i)
plt.xlabel("Some X label")
plt.ylabel("Some Y label")
plt.title(titles[i])
plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
6 回答
你可以试试subplot_tool()
您可以使用
plt.subplots_adjust
更改子图之间的间距(source)通话签名:
参数含义(和建议的默认值)是:
实际默认值由rc文件控制
类似于
tight_layout
matplotlib现在(从版本2.2开始)提供contrained_layout . 与tight_layout
(可能在代码中随时调用单个优化布局)相比,constrained_layout
是一个属性,可以处于活动状态,并在每个绘制步骤之前优化布局 .因此,需要在子图创建之前或期间激活它 . 这可能是
figure(contrained_layout=True)
或subplots(constrained_layout=True)
的参数 .例:
也可以通过
rcParams
设置constrained_layout见what's new entry和Contrained Layout Guide
plt.subplots_adjust 方法:
or
图片的大小很重要 .
“我已经尝试过使用hspace,但增加它似乎只会使所有图形更小而不解决重叠问题 . ”
因此,为了产生更多的空白区域并保持子图的大小,总图像需要更大 .
尝试使用plt.tight_layout
作为一个简单的例子:
没有紧密的布局
紧密布局
我发现subplots_adjust(hspace = 0.001)最终为我工作了 . 当我使用space = None时,每个绘图之间仍然有空白 . 将它设置为非常接近于零但似乎迫使它们排成一行 . 我在这里上传的不是最优雅的代码,但你可以看到hspace的工作原理 .