如何使用matplotlib绘制图像数据与时间的关系

时间:2013-04-05 02:33:07

标签: python matplotlib

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

据我了解,我无法在子图中调用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')

虽然这样可以灵活地将每一列定位在任何可以移动相关轴的位置,但是找到每个时间戳图像中的相对位置(如所有其他图所显示的那样)是非常繁琐的工作。

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

1 个答案:

答案 0 :(得分: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()

范围单位是数据单位。

enter image description here