我想在同一个图表上绘制几个时间序列。在横向上,我想要一个ts说某事发生的点。垂直轴是系列的标签。因此,所有A ts点都处于相同的y值并标记为A.B点处于不同的y值,标记为B.等等。
我是一个熊猫新手,但我没有看到如何做到这一点,除了通过一些编程来制作散点图。这似乎我做错了。
这是一个例子。考虑这个数据,标签后跟时间:
cows 1416339311
cats 1416339312
dogs 1416339313
dogs 1416339314
cows 1416339330
cats 1416339339
cats 1416339340
然后情节就是这样:
一个更现实的情节就是这样,它向我们展示了奶牛早期活跃,猫早晚活动,而狗大部分时间都处于中期:
答案 0 :(得分:0)
在JD Long的上述帮助下,这是我最后写的函数:
def plot_times_by_club(df, live, zero):
"""Plot the times for each club.
If zero is True, then set first x-tick at 0 seconds (beginning of race)."""
times = df.loc[:, ['time', 'club']]
clubs = times.club.unique()
fig, ax = plt.subplots(len(clubs), sharex=True, sharey=True)
for index, club in enumerate(clubs):
these_times = times[times.club == club]
ax[index].plot(these_times.time.as_matrix(), np.ones(len(these_times)), 'o')
ax[index].set_ylabel(club, rotation='horizontal', labelpad=30)
ax[index].set_yticks([])
ax[index].set_ybound(0.5, 1.5)
ax[index].set_position([0.1, 0.1, 8.0, 1.0])
ax[index].set_yticks([])
ax[0].set_title('Temps vu par club')
min_tick = ax[0].get_xticks().min()
if zero:
min_tick = 0.0
ax[0].set_xbound(lower=0.0)
max_tick = ax[0].get_xticks().max()
ax[0].set_xticks(np.linspace(min_tick, max_tick, 6))
fig.subplots_adjust(hspace=0)
render_plot(8, 6, live, 'jn8-club-{0}.png'.format(zero))
def render_plot(xdim, ydim, live, filename):
"""Display or save the plot image.
If live is True, then display in a window.
If live is False, save to the named file."""
if live:
plt.show()
else:
gc = plt.gcf()
gc.set_size_inches(xdim, ydim)
gc.savefig(filename, dpi=100)