0

我已经捕获了一组图像,每列都带有时间戳。我同时采样了其他带有时间戳的信号(例如陀螺仪数据)。我想在共享时间轴的两个垂直对齐的子图上绘制这些信号。

据我了解,我不能在子图中调用 imshow() 两次并将每个图像定位在沿 x 的不同位置(它们都共享起始位置,因此重叠,并且似乎没有设置来克服这个):

import matplotlib.pyplot as plt

fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True)

ax[0].imshow(np.atleast_2d(I[0][0]).T, cmap=plt.cm.gray, \
                            interpolation='Nearest', aspect='auto')
ax[0].imshow(np.atleast_2d(I[0][1]).T, cmap=plt.cm.gray, \
                            interpolation='Nearest', aspect='auto')

经过一番谷歌搜索,我找到了一个潜在的解决方案,需要在顶部子图中创建额外的轴,在其中我可以绘制每一列:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True)

ax[0].set_ylabel('Rows')
imax = fig.add_axes(ax[0].get_position().min + \
                [ax[0].get_position().xmax - ax[0].get_position().xmin] + \
                [ax[0].get_position().ymax - ax[0].get_position().ymin], \
                                                                sharey=ax[0])
imax.set_ylim([I.shape[2], 0])
imax.set_axis_off()
imax.imshow(np.atleast_2d(I[0][0]).T, cmap=plt.cm.gray, \
                             interpolation='Nearest', aspect='equal')

尽管这将允许在我可以移动相关轴的任何位置灵活地定位每一列,但要在所有其他绘图显示的每个时间戳的图像中找到相对位置是一项相当艰巨的工作。

我错过了一种更简单的方法来完成这项工作吗?

4

1 回答 1

2

您可以extent用来控制在轴上绘制图像的位置:

ax = gca()
ax.imshow(rand(15,15), extent=[0, .5, 0, .5])
ax.imshow(rand(15,15), extent=[.5, 1,  .5, 1])

ax.set_xlim([0, 1])
ax.set_ylim([0, 1])

plt.draw()

范围单位是数据单位。

在此处输入图像描述

于 2013-04-05T02:43:21.893 回答