辅助 x 轴标签
Secondary x axis labels
我有两个 csv 文件,它们是在我记录期间按时间顺序生成的(它们都有一个基于一个时钟的时间戳列)。
我想在 matplotlib 中绘制我的数据(或其他地方使用 python,如果你有更好的建议)。
在我的主 x 轴上,我想要一般的连续时间戳(来自 csv 文件 1)。
在我的 y 轴上,我需要记录我想要的变量(来自 csv 文件 1)。
在我的辅助 x 轴上,我需要在实验事件或注释(来自 csv 文件 2)的时间戳(刻度)处显示它们发生的时间。
我尝试以这种方式绘制所有这些:
ticks = annotations_pd_frame['timestamp']
labels = annotations_pd_frame['label']
fig, ax1 = plt.subplots()
ax2 = ax1.twiny()
fig.set_figheight(5)
fig.set_figwidth(25)
ax1.yaxis.grid()
plt.xticks(ticks, labels)
plt.plot(pupil_data_in_trial_eye0['pupil_timestamp'].loc[pupil_data_in_trial_eye0['trial'] == trial_label], pupil_data_in_trial_eye0['diameter_3d'].loc[pupil_data_in_trial_eye0['trial'] == trial_label])
plt.plot(pupil_data_in_trial_eye1['pupil_timestamp'].loc[pupil_data_in_trial_eye1['trial'] == trial_label], pupil_data_in_trial_eye1['diameter_3d'].loc[pupil_data_in_trial_eye1['trial'] == trial_label])
plt.legend(['eye0', 'eye1'])
ax1.set_xlabel('Timestamps [s]')
ax1.set_ylabel('Diameter [mm]')
plt.title('Pupil Diameter in ' + str(label) )
plt.grid(b=True)
这里有一个 csv 文件的例子:
https://gist.github.com/Zahra-on-Github/aa67a3e309fa66582a118f5c08509f77
第一个图是我使用 plt.plot 绘制主要数据时的图
我得到了正确的刻度和标签(刻度和标签在这次数据试验中正确显示),
但主 x 轴上的时间戳不正确。
第二个图是我使用 ax1.plot 绘制主要数据时的图
我在主 x 轴上得到正确的时间戳,
但是不正确的刻度和标签(整个 运行 的刻度和标签都显示在这个数据试验中)。
知道我做错了什么吗?
我是这样解决的:
for (t, l) in zip(ticks, labels):
ax1.axvline(t, color='black', linestyle='--')
trans = mtransforms.blended_transform_factory(ax1.transData, ax1.transAxes)
ax1.text(t, 1.1, l, ha='center', transform=trans, rotation = 30)
我有两个 csv 文件,它们是在我记录期间按时间顺序生成的(它们都有一个基于一个时钟的时间戳列)。 我想在 matplotlib 中绘制我的数据(或其他地方使用 python,如果你有更好的建议)。
在我的主 x 轴上,我想要一般的连续时间戳(来自 csv 文件 1)。
在我的 y 轴上,我需要记录我想要的变量(来自 csv 文件 1)。
在我的辅助 x 轴上,我需要在实验事件或注释(来自 csv 文件 2)的时间戳(刻度)处显示它们发生的时间。
我尝试以这种方式绘制所有这些:
ticks = annotations_pd_frame['timestamp']
labels = annotations_pd_frame['label']
fig, ax1 = plt.subplots()
ax2 = ax1.twiny()
fig.set_figheight(5)
fig.set_figwidth(25)
ax1.yaxis.grid()
plt.xticks(ticks, labels)
plt.plot(pupil_data_in_trial_eye0['pupil_timestamp'].loc[pupil_data_in_trial_eye0['trial'] == trial_label], pupil_data_in_trial_eye0['diameter_3d'].loc[pupil_data_in_trial_eye0['trial'] == trial_label])
plt.plot(pupil_data_in_trial_eye1['pupil_timestamp'].loc[pupil_data_in_trial_eye1['trial'] == trial_label], pupil_data_in_trial_eye1['diameter_3d'].loc[pupil_data_in_trial_eye1['trial'] == trial_label])
plt.legend(['eye0', 'eye1'])
ax1.set_xlabel('Timestamps [s]')
ax1.set_ylabel('Diameter [mm]')
plt.title('Pupil Diameter in ' + str(label) )
plt.grid(b=True)
这里有一个 csv 文件的例子: https://gist.github.com/Zahra-on-Github/aa67a3e309fa66582a118f5c08509f77
第一个图是我使用 plt.plot 绘制主要数据时的图 我得到了正确的刻度和标签(刻度和标签在这次数据试验中正确显示), 但主 x 轴上的时间戳不正确。
第二个图是我使用 ax1.plot 绘制主要数据时的图 我在主 x 轴上得到正确的时间戳, 但是不正确的刻度和标签(整个 运行 的刻度和标签都显示在这个数据试验中)。
知道我做错了什么吗?
我是这样解决的:
for (t, l) in zip(ticks, labels):
ax1.axvline(t, color='black', linestyle='--')
trans = mtransforms.blended_transform_factory(ax1.transData, ax1.transAxes)
ax1.text(t, 1.1, l, ha='center', transform=trans, rotation = 30)