多子图绘图 —— matplotlib设置子图间距
在Matplotlib中设置子图间距是一个常见的需求,可以通过多种方式来实现。以下是几种常用的方法,包括使用subplots_adjust函数和tight_layout函数。
- 使用subplots_adjust函数
subplots_adjust函数允许你手动调整子图在图形中的位置和间距。这个函数接受四个参数:top、bottom、left和right,它们分别表示子图上方、下方、左侧和右侧与整个图形边界之间的距离(以图形宽高的比例表示)。此外,还可以通过hspace和wspace参数来调整子图之间的垂直和水平间距。
以下是一个示例代码,演示如何使用subplots_adjust函数来调整2x2子图网格的间距:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
for i in range(2):
for j in range(2):
axes[i, j].text(0.5, 0.5, f'Subplot {i+1},{j+1}', ha='center', va='center')
# 调整子图间距
plt.subplots_adjust(hspace=0.5, wspace=0.5, top=0.9, bottom=0.1, left=0.1, right=0.9)
plt.show()
在这个示例中,hspace=0.5和wspace=0.5分别设置了子图之间的垂直和水平间距(以子图宽高的比例表示)。top、bottom、left和right参数则设置了子图与图形边界之间的距离。
- 使用tight_layout函数
对于简单的布局,tight_layout函数可以自动调整子图间距,以避免重叠和标签被截断的问题。这个函数不需要手动设置间距参数,而是会根据子图的大小和标签自动计算最佳的间距。
以下是一个示例代码,演示如何使用tight_layout函数来调整子图间距:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
for i in range(2):
for j in range(2):
axes[i, j].text(0.5, 0.5, f'Subplot {i+1},{j+1}', ha='center', va='center')
axes[i, j].set_title(f'Title {i+1},{j+1}')
# 使用tight_layout自动调整子图间距
plt.tight_layout()
plt.show()
在这个示例中,tight_layout函数会自动调整子图之间的间距和子图与标签之间的距离,以确保所有内容都能清晰地显示。
总结
subplots_adjust函数允许你手动调整子图在图形中的位置和间距,通过hspace、wspace、top、bottom、left和right参数来控制。
tight_layout函数可以自动调整子图间距,以避免重叠和标签被截断的问题,适用于简单的布局。
根据上面的代码的example,给出下面的具体图形绘制:
不对子图布局进行设置的默认情况:

adjust函数调整的子图布局:

tight_layout函数调整的子图布局:

PS:
一般情况下使用默认的就OK,如果想要边框空白更少的情况下可以使用tight_layout布局,但是如果对要求比较高,希望进行定制化的布局间隔设置,那么就需要使用adjust函数进行设置,不过使用adjust函数进行设置的难度也会更大,更麻烦。
如果可以满足需求要求的话,那么越简单的越好用,也就是说我们实际中可以从默认、tight_layout、adjust布局中依次进行选择,而不需要直接上来就选adjust这种hard模式,没必要,适合就好!!!
posted on 2025-02-03 12:51 Angry_Panda 阅读(617) 评论(0) 收藏 举报
浙公网安备 33010602011771号