matplotlib破碎的酒吧系列在时间序列中遮盖星期日

时间:2013-04-18 22:59:53

标签: python matplotlib

我有一个约会时间列表,想要遮蔽所有星期天。我正在为时间跨度输入pandas.DateTimeIndex,这是np.datetime64个对象的列表

def ShadeSunday(subplot,timespan):
    timelist = [date2num(time) for time in timespan]
    dayofweek = [int(datetime.date.weekday(time.to_datetime())) for time in timespan]
    collection = collections.BrokenBarHCollection.span_where(Weekdates, ymin=0, ymax=80000, where=dayofweek>5, facecolor='b', alpha='.05')
    subplot.add_collection(collection)

datetime.date.weekday返回一个整数(例如6表示星期日),所以我有一个时间的x值列表和一周中某一天的相应的整数值列表。 BrokenBarHCollection.span_where会抛出类型错误:

"TypeError: 'bool' object is not iterable" for the arguement 'where=dayofweek>5'

我查看了一些示例,但无法弄清楚如何让'where ='起作用。

1 个答案:

答案 0 :(得分:0)

我认为这应该可以解决您遇到的错误(很难说,因为我知道您的输入时无法测试您发布的代码)

def ShadeSunday(subplot,timespan):
    timelist = [date2num(time) for time in timespan]
    dayofweek_bool = [int(datetime.date.weekday(time.to_datetime())) > 5 for time in timespan]
    collection = collections.BrokenBarHCollection.span_where(Weekdates, ymin=0, ymax=80000, where=dayofweek_bool, facecolor='b', alpha='.05')
    subplot.add_collection(collection)

您遇到的问题是列表不会广播布尔比较(但numpy.array会这样做)。在REPL环境中运行[1, 2, 3] > 322