在熊猫中绘制标记的时间序列

时间:2014-11-18 18:12:06

标签: python matplotlib pandas

我想在同一个图表上绘制几个时间序列。在横向上,我想要一个ts说某事发生的点。垂直轴是系列的标签。因此,所有A ts点都处于相同的y值并标记为A.B点处于不同的y值,标记为B.等等。

我是一个熊猫新手,但我没有看到如何做到这一点,除了通过一些编程来制作散点图。这似乎我做错了。

这是一个例子。考虑这个数据,标签后跟时间:

cows 1416339311
cats 1416339312
dogs 1416339313
dogs 1416339314
cows 1416339330
cats 1416339339
cats 1416339340

然后情节就是这样:

something about animals over time

一个更现实的情节就是这样,它向我们展示了奶牛早期活跃,猫早晚活动,而狗大部分时间都处于中期:

lots of animals over time

1 个答案:

答案 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)