如何为ImageGrid中的每个子图添加标题,并为整个图形添加单一的xlabel/ylabel?

5 投票
1 回答
5022 浏览
提问于 2025-04-17 19:17

我用 mpl_toolkits.axes_grid1 创建了下面这个图:

在这里输入图片描述

不过,不知道为什么,我的子图标题没有显示出来。我该怎么解决这个问题呢?

代码:

# import 
from mpl_tookits.axes_grid1 import ImageGrid
from matplotlib.pyplot import *

fig = figure(figsize=(20, 12), dpi=300)
grid = ImageGrid(fig, 111, nrows_ncols=(3, 4), axes_pad=1, aspect=False)
for gridax, (i, sub) in zip(grid, enumerate(eyelink_data)):
    subnum = i + start_with

     # format data
    xdat = sub['x'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())]
    ydat = sub['y'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())]

    # plot
    gridax.hist2d(xdat, ydat, bins=[np.linspace(-.005, .005, num=1000), np.linspace(-.005, .005, num=1000)])
    gridax.plot(0, 0, 'ro')  # origin

    title('Subject {0} in-Trial Gaze'.format(subnum))
    xlabel('Horizontal Offset\n(degrees visual angle)')
    ylabel('Vertical Offset\n(degrees visual angle)')

show()

顺便说一下,享受一下这个 网格错觉吧!

1 个回答

7

如果你想给每个子图加个标题,可以直接用标题命令来设置那个轴的标题。比如你有:

title('Subject {0} in-Trial Gaze'.format(subnum))

那么只需要写:

gridax.set_title('Subject {0} in-Trial Gaze'.format(subnum))

如果你想要一个大的 xlabelylabel,你需要在你的网格周围创建一个大的 axes 对象。我不是专家,但这样做应该能帮到你:

多个子图共享一个轴标签

撰写回答