|
11 | 11 | import matplotlib.pyplot as plt
|
12 | 12 | from matplotlib.cbook import MatplotlibDeprecationWarning
|
13 | 13 | import matplotlib.dates as mdates
|
| 14 | +import matplotlib.ticker as mticker |
| 15 | +from matplotlib import rc_context |
14 | 16 |
|
15 | 17 |
|
16 | 18 | def __has_pytz():
|
@@ -406,7 +408,6 @@ def _create_auto_date_locator(date1, date2):
|
406 | 408 | mdates.date2num(date2))
|
407 | 409 | return locator
|
408 | 410 |
|
409 |
| - d1 = datetime.datetime(1997, 1, 1) |
410 | 411 | results = ([datetime.timedelta(weeks=52 * 200),
|
411 | 412 | ['1980-01-01 00:00:00+00:00', '2000-01-01 00:00:00+00:00',
|
412 | 413 | '2020-01-01 00:00:00+00:00', '2040-01-01 00:00:00+00:00',
|
@@ -467,12 +468,84 @@ def _create_auto_date_locator(date1, date2):
|
467 | 468 | ],
|
468 | 469 | )
|
469 | 470 |
|
| 471 | + d1 = datetime.datetime(1997, 1, 1) |
470 | 472 | for t_delta, expected in results:
|
471 | 473 | d2 = d1 + t_delta
|
472 | 474 | locator = _create_auto_date_locator(d1, d2)
|
473 | 475 | assert list(map(str, mdates.num2date(locator()))) == expected
|
474 | 476 |
|
475 | 477 |
|
| 478 | +def test_auto_date_locator_intmult_tz(): |
| 479 | + def _create_auto_date_locator(date1, date2, tz): |
| 480 | + locator = mdates.AutoDateLocator(interval_multiples=True, tz=tz) |
| 481 | + locator.create_dummy_axis() |
| 482 | + locator.set_view_interval(mdates.date2num(date1), |
| 483 | + mdates.date2num(date2)) |
| 484 | + return locator |
| 485 | + |
| 486 | + results = ([datetime.timedelta(weeks=52*200), |
| 487 | + ['1980-01-01 00:00:00-08:00', '2000-01-01 00:00:00-08:00', |
| 488 | + '2020-01-01 00:00:00-08:00', '2040-01-01 00:00:00-08:00', |
| 489 | + '2060-01-01 00:00:00-08:00', '2080-01-01 00:00:00-08:00', |
| 490 | + '2100-01-01 00:00:00-08:00', '2120-01-01 00:00:00-08:00', |
| 491 | + '2140-01-01 00:00:00-08:00', '2160-01-01 00:00:00-08:00', |
| 492 | + '2180-01-01 00:00:00-08:00', '2200-01-01 00:00:00-08:00'] |
| 493 | + ], |
| 494 | + [datetime.timedelta(weeks=52), |
| 495 | + ['1997-01-01 00:00:00-08:00', '1997-02-01 00:00:00-08:00', |
| 496 | + '1997-03-01 00:00:00-08:00', '1997-04-01 00:00:00-08:00', |
| 497 | + '1997-05-01 00:00:00-07:00', '1997-06-01 00:00:00-07:00', |
| 498 | + '1997-07-01 00:00:00-07:00', '1997-08-01 00:00:00-07:00', |
| 499 | + '1997-09-01 00:00:00-07:00', '1997-10-01 00:00:00-07:00', |
| 500 | + '1997-11-01 00:00:00-08:00', '1997-12-01 00:00:00-08:00'] |
| 501 | + ], |
| 502 | + [datetime.timedelta(days=141), |
| 503 | + ['1997-01-01 00:00:00-08:00', '1997-01-22 00:00:00-08:00', |
| 504 | + '1997-02-01 00:00:00-08:00', '1997-02-22 00:00:00-08:00', |
| 505 | + '1997-03-01 00:00:00-08:00', '1997-03-22 00:00:00-08:00', |
| 506 | + '1997-04-01 00:00:00-08:00', '1997-04-22 00:00:00-07:00', |
| 507 | + '1997-05-01 00:00:00-07:00', '1997-05-22 00:00:00-07:00'] |
| 508 | + ], |
| 509 | + [datetime.timedelta(days=40), |
| 510 | + ['1997-01-01 00:00:00-08:00', '1997-01-05 00:00:00-08:00', |
| 511 | + '1997-01-09 00:00:00-08:00', '1997-01-13 00:00:00-08:00', |
| 512 | + '1997-01-17 00:00:00-08:00', '1997-01-21 00:00:00-08:00', |
| 513 | + '1997-01-25 00:00:00-08:00', '1997-01-29 00:00:00-08:00', |
| 514 | + '1997-02-01 00:00:00-08:00', '1997-02-05 00:00:00-08:00', |
| 515 | + '1997-02-09 00:00:00-08:00'] |
| 516 | + ], |
| 517 | + [datetime.timedelta(hours=40), |
| 518 | + ['1997-01-01 00:00:00-08:00', '1997-01-01 04:00:00-08:00', |
| 519 | + '1997-01-01 08:00:00-08:00', '1997-01-01 12:00:00-08:00', |
| 520 | + '1997-01-01 16:00:00-08:00', '1997-01-01 20:00:00-08:00', |
| 521 | + '1997-01-02 00:00:00-08:00', '1997-01-02 04:00:00-08:00', |
| 522 | + '1997-01-02 08:00:00-08:00', '1997-01-02 12:00:00-08:00', |
| 523 | + '1997-01-02 16:00:00-08:00'] |
| 524 | + ], |
| 525 | + [datetime.timedelta(minutes=20), |
| 526 | + ['1997-01-01 00:00:00-08:00', '1997-01-01 00:05:00-08:00', |
| 527 | + '1997-01-01 00:10:00-08:00', '1997-01-01 00:15:00-08:00', |
| 528 | + '1997-01-01 00:20:00-08:00'] |
| 529 | + ], |
| 530 | + [datetime.timedelta(seconds=40), |
| 531 | + ['1997-01-01 00:00:00-08:00', '1997-01-01 00:00:05-08:00', |
| 532 | + '1997-01-01 00:00:10-08:00', '1997-01-01 00:00:15-08:00', |
| 533 | + '1997-01-01 00:00:20-08:00', '1997-01-01 00:00:25-08:00', |
| 534 | + '1997-01-01 00:00:30-08:00', '1997-01-01 00:00:35-08:00', |
| 535 | + '1997-01-01 00:00:40-08:00'] |
| 536 | + ] |
| 537 | + ) |
| 538 | + |
| 539 | + tz = dateutil.tz.gettz('Canada/Pacific') |
| 540 | + d1 = datetime.datetime(1997, 1, 1, tzinfo=tz) |
| 541 | + for t_delta, expected in results: |
| 542 | + with rc_context({'_internal.classic_mode': False}): |
| 543 | + d2 = d1 + t_delta |
| 544 | + locator = _create_auto_date_locator(d1, d2, tz) |
| 545 | + st = list(map(str, mdates.num2date(locator(), tz=tz))) |
| 546 | + assert st == expected |
| 547 | + |
| 548 | + |
476 | 549 | @image_comparison(baseline_images=['date_inverted_limit'],
|
477 | 550 | extensions=['png'])
|
478 | 551 | def test_date_inverted_limit():
|
@@ -617,6 +690,30 @@ def attach_tz(dt, zi):
|
617 | 690 | _test_rrulewrapper(attach_tz, pytz.timezone)
|
618 | 691 |
|
619 | 692 |
|
| 693 | +@pytest.mark.pytz |
| 694 | +@pytest.mark.skipif(not __has_pytz(), reason="Requires pytz") |
| 695 | +def test_yearlocator_pytz(): |
| 696 | + import pytz |
| 697 | + |
| 698 | + tz = pytz.timezone('America/New_York') |
| 699 | + x = [tz.localize(datetime.datetime(2010, 1, 1)) |
| 700 | + + datetime.timedelta(i) for i in range(2000)] |
| 701 | + locator = mdates.AutoDateLocator(interval_multiples=True, tz=tz) |
| 702 | + locator.create_dummy_axis() |
| 703 | + locator.set_view_interval(mdates.date2num(x[0])-1.0, |
| 704 | + mdates.date2num(x[-1])+1.0) |
| 705 | + |
| 706 | + np.testing.assert_allclose([733408.208333, 733773.208333, 734138.208333, |
| 707 | + 734503.208333, 734869.208333, |
| 708 | + 735234.208333, 735599.208333], locator()) |
| 709 | + expected = ['2009-01-01 00:00:00-05:00', |
| 710 | + '2010-01-01 00:00:00-05:00', '2011-01-01 00:00:00-05:00', |
| 711 | + '2012-01-01 00:00:00-05:00', '2013-01-01 00:00:00-05:00', |
| 712 | + '2014-01-01 00:00:00-05:00', '2015-01-01 00:00:00-05:00'] |
| 713 | + st = list(map(str, mdates.num2date(locator(), tz=tz))) |
| 714 | + assert st == expected |
| 715 | + |
| 716 | + |
620 | 717 | def test_DayLocator():
|
621 | 718 | with pytest.raises(ValueError):
|
622 | 719 | mdates.DayLocator(interval=-1)
|
|
0 commit comments