|
1 | 1 | # being a bit too dynamic
|
2 | 2 | # pylint: disable=E1101
|
3 | 3 | from itertools import izip
|
| 4 | +import datetime |
4 | 5 |
|
5 | 6 | import numpy as np
|
6 | 7 |
|
|
13 | 14 | from pandas.tseries.frequencies import get_period_alias, get_base_alias
|
14 | 15 | from pandas.tseries.offsets import DateOffset
|
15 | 16 | import pandas.tseries.tools as datetools
|
| 17 | +import pandas.lib as lib |
16 | 18 |
|
17 | 19 | def _get_standard_kind(kind):
|
18 | 20 | return {'density' : 'kde'}.get(kind, kind)
|
@@ -573,24 +575,39 @@ def _post_plot_logic(self):
|
573 | 575 | if self.subplots and self.legend:
|
574 | 576 | self.axes[0].legend(loc='best')
|
575 | 577 |
|
576 |
| -class DatetimeConverter(object): |
577 |
| - |
578 |
| - @classmethod |
579 |
| - def convert(cls, values, units, axis): |
580 |
| - def try_parse(values): |
581 |
| - try: |
582 |
| - return datetools.to_datetime(values).toordinal() |
583 |
| - except Exception: |
| 578 | +try: |
| 579 | + import matplotlib.units as units |
| 580 | + import matplotlib.dates as dates |
| 581 | + |
| 582 | + class DatetimeConverter(dates.DateConverter): |
| 583 | + |
| 584 | + @staticmethod |
| 585 | + def convert(values, unit, axis): |
| 586 | + def try_parse(values): |
| 587 | + try: |
| 588 | + return datetools.to_datetime(values).toordinal() |
| 589 | + except Exception: |
| 590 | + return values |
| 591 | + |
| 592 | + if isinstance(values, (datetime.datetime, datetime.date)): |
| 593 | + return values.toordinal() |
| 594 | + elif isinstance(values, (datetime.time)): |
| 595 | + return dates.date2num(values) |
| 596 | + elif (com.is_integer(values) or com.is_float(values)): |
584 | 597 | return values
|
585 |
| - |
586 |
| - if (com.is_integer(values) or |
587 |
| - com.is_float(values)): |
| 598 | + elif isinstance(values, str): |
| 599 | + return try_parse(values) |
| 600 | + elif isinstance(values, Index): |
| 601 | + return values.map(try_parse) |
| 602 | + elif isinstance(values, (list, tuple, np.ndarray)): |
| 603 | + return [try_parse(x) for x in values] |
588 | 604 | return values
|
589 |
| - elif isinstance(values, str): |
590 |
| - return try_parse(values) |
591 |
| - elif isinstance(values, Index): |
592 |
| - return values.map(try_parse) |
593 |
| - return map(try_parse, values) |
| 605 | + |
| 606 | + units.registry[lib.Timestamp] = DatetimeConverter() |
| 607 | + units.registry[datetime.date] = DatetimeConverter() |
| 608 | + units.registry[datetime.datetime] = DatetimeConverter() |
| 609 | +except ImportError: |
| 610 | + pass |
594 | 611 |
|
595 | 612 | class LinePlot(MPLPlot):
|
596 | 613 |
|
@@ -648,10 +665,6 @@ def _make_plot(self):
|
648 | 665 | y = np.ma.masked_where(mask, y)
|
649 | 666 | plotf(ax, x, y, style, label=label, **self.kwds)
|
650 | 667 | ax.grid(self.grid)
|
651 |
| - idx = getattr(self.data, 'index', None) |
652 |
| - if isinstance(idx, DatetimeIndex) or (idx is not None and |
653 |
| - idx.inferred_type == 'datetime'): |
654 |
| - ax.get_xaxis().converter = DatetimeConverter |
655 | 668 |
|
656 | 669 | def _maybe_convert_index(self, data):
|
657 | 670 | # tsplot converts automatically, but don't want to convert index
|
|
0 commit comments