-
-
Notifications
You must be signed in to change notification settings - Fork 8k
Closed
Milestone
Description
I've usually used np arrays, mostly out of habit, to construct my HourLocator and MinuteLocator objects, and today I was surprised to find that this did not work for MonthLocator objects. I also tested DayLocator and WeekdayLocator and found that they did not work with np arrays. The mpl docs suggest that the arguments can be "an int or sequence" -- not sure if this would include np arrays or not.
Not a big deal, but it did confuse me for a few minutes.
In [47]:
mpl.dates.DayLocator(np.arange(2,13,2))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-47-b23ea962d29f> in <module>()
----> 1 mpl.dates.DayLocator(np.arange(2,13,2))
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/matplotlib/dates.py in __init__(self, bymonthday, interval, tz)
1097 bymonthday = list(xrange(1, 32))
1098 o = rrulewrapper(DAILY, bymonthday=bymonthday,
-> 1099 interval=interval, **self.hms0d)
1100 RRuleLocator.__init__(self, o, tz)
1101
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/matplotlib/dates.py in __init__(self, freq, **kwargs)
593 self._construct = kwargs.copy()
594 self._construct["freq"] = freq
--> 595 self._rrule = rrule(**self._construct)
596
597 def set(self, **kwargs):
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/dateutil/rrule.py in __init__(self, freq, dtstart, interval, wkst, count, until, bysetpos, bymonth, bymonthday, byyearday, byeaster, byweekno, byweekday, byhour, byminute, bysecond, cache)
272 raise ValueError("bysetpos must be between 1 and 366, "
273 "or between -366 and -1")
--> 274 if not (byweekno or byyearday or bymonthday or
275 byweekday is not None or byeaster is not None):
276 if freq == YEARLY:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [48]:
mpl.dates.HourLocator(np.arange(2,13,2))
Out[48]:
<matplotlib.dates.HourLocator at 0x7f05a2149470>
In [49]:
mpl.dates.MinuteLocator(np.arange(2,13,2))
Out[49]:
<matplotlib.dates.MinuteLocator at 0x7f05a1e941d0>
In [50]:
mpl.dates.MonthLocator(np.arange(2,13,2))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-50-971e82a6be3a> in <module>()
----> 1 mpl.dates.MonthLocator(np.arange(2,13,2))
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/matplotlib/dates.py in __init__(self, bymonth, bymonthday, interval, tz)
1056 bymonth = list(xrange(1, 13))
1057 o = rrulewrapper(MONTHLY, bymonth=bymonth, bymonthday=bymonthday,
-> 1058 interval=interval, **self.hms0d)
1059 RRuleLocator.__init__(self, o, tz)
1060
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/matplotlib/dates.py in __init__(self, freq, **kwargs)
593 self._construct = kwargs.copy()
594 self._construct["freq"] = freq
--> 595 self._rrule = rrule(**self._construct)
596
597 def set(self, **kwargs):
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/dateutil/rrule.py in __init__(self, freq, dtstart, interval, wkst, count, until, bysetpos, bymonth, bymonthday, byyearday, byeaster, byweekno, byweekday, byhour, byminute, bysecond, cache)
283 byweekday = dtstart.weekday()
284 # bymonth
--> 285 if not bymonth:
286 self._bymonth = None
287 elif isinstance(bymonth, integer_types):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [51]:
mpl.dates.SecondLocator(np.arange(2,13,2))
Out[51]:
<matplotlib.dates.SecondLocator at 0x7f05a1f25d68>
In [52]:
mpl.dates.WeekdayLocator(np.arange(2,13,2))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-52-94aba8a8506e> in <module>()
----> 1 mpl.dates.WeekdayLocator(np.arange(2,13,2))
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/matplotlib/dates.py in __init__(self, byweekday, interval, tz)
1079 o = rrulewrapper(DAILY, byweekday=byweekday,
-> 1080 interval=interval, **self.hms0d)
1081 RRuleLocator.__init__(self, o, tz)
1082
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/matplotlib/dates.py in __init__(self, freq, **kwargs)
593 self._construct = kwargs.copy()
594 self._construct["freq"] = freq
--> 595 self._rrule = rrule(**self._construct)
596
597 def set(self, **kwargs):
/home/will/.virtualenvs/dev3/lib/python3.4/site-packages/dateutil/rrule.py in __init__(self, freq, dtstart, interval, wkst, count, until, bysetpos, bymonth, bymonthday, byyearday, byeaster, byweekno, byweekday, byhour, byminute, bysecond, cache)
347 if isinstance(wday, integer_types):
348 self._byweekday.append(wday)
--> 349 elif not wday.n or freq > MONTHLY:
350 self._byweekday.append(wday.weekday)
351 else:
AttributeError: 'numpy.int64' object has no attribute 'n'
In [53]:
mpl.dates.MonthLocator(np.arange(2,13,2).tolist())
Out[53]:
<matplotlib.dates.MonthLocator at 0x7f05a20a0ba8>