从Timeserie剧情中删除星期六(但不是星期日或其他无数据时段)

时间:2017-01-03 01:10:12

标签: python matplotlib

我正在策划一个金融时间表(见下文,这里有1个月的数据)

enter image description here

我想删除我用红十字等表示的时段,这是星期六。请注意,这些时段并非所有没有数据的时段,而只是星期六。

我知道有一些如何消除差距的例子,例如:http://matplotlib.org/examples/api/date_index_formatter.html。 这不是我所追求的,因为它们消除了所有的空白。 (不是我的意图!)。

我认为要走的路可能是为xaxis创建自定义值序列。由于日期是序数(即1天=值1),因此可能会创建一个序列,如1,2,3,4,5,6,8,9,10,11,12,13, 15,16等。每七天跳一次 - 当天跳过需要成为星期六。

每周六跳过我可以想象如何使用来自timeutil的rrule来做到这一点。这是在这里完成的(见下文),因为每个星期一都标有更强的垂直线。但是我如何将它传递给Tick定位器?实际上matplotlib API中有一个RRuleLocator类,但在doc:http://matplotlib.org/api/dates_api.html#matplotlib.dates.RRuleLocator中没有给出如何使用它的说明。 每个建议都欢迎。

这里是我用于当前图表的代码:

fig, axes = plt.subplots(2, figsize=(20, 6))
quotes = price_data.as_matrix() # as matrix() to remove the columns header of the df
mpf.candlestick_ohlc(axes[0], quotes, width=0.01) 
plt.bar(quotes[:,0] , quotes[:,5], width = 0.01)
for i , axes[i] in enumerate(axes):
    axes[i].xaxis.set_major_locator(mdates.DayLocator(interval=1) )
    axes[i].xaxis.set_major_formatter(mdates.DateFormatter('%a, %b %d'))
    axes[i].grid(True)

    # show night times with a grey shade
    majors=axes[i].xaxis.get_majorticklocs()
    chart_start, chart_end = (axes[i].xaxis.get_view_interval()[0], 
                              axes[i].xaxis.get_view_interval()[1])
    for major in majors:
        axes[i].axvspan(max (chart_start, major-(0.3333)),
                        min(chart_end, major+(0.3333)),color="0.95", zorder=-1 ) #0.33 corresponds to 1/3 of a day i.e. 8h

    # show mondays with a line
    mondays = list(rrule(WEEKLY, byweekday=MO, dtstart= mdates.num2date(chart_start),
               until=mdates.num2date(chart_end)))
    for j, monday in enumerate(mondays):
        axes[i].axvline(mdates.date2num(mondays[j]), linewidth=0.75, color='k', zorder=1)

1 个答案:

答案 0 :(得分:0)

如果您的日期为datetime个对象,或DateTimeIndex pandas中的DataFrame,您可以查看特定日期使用{0}}的工作日。然后,您只需将星期六的数据设置为.weekday。请参阅下面的示例。

代码

nan

结果

enter image description here