BUG: Make xticks from _quarterly_finder() line up better by elidourado · Pull Request #47602 · pandas-dev/pandas (original) (raw)

Hey, I'm not too familiar with the project's test infrastructure, so I apologize if this isn't too convenient, but here's a standalone test that works for me.

import pandas as pd
import numpy as np
from pandas import Period
from pandas.plotting._matplotlib import converter


def test_quarterly_finder(data):
    vmin = data[0]
    vmax = data[-1]
    (vmin, vmax) = (int(vmin), int(vmax))
    if vmin > vmax:
        (vmin, vmax) = (vmax, vmin)
    span = vmax - vmin + 1
    if span < 45:  # the quarterly finder is only invoke if the span is >= 45
        return
    nyears = span / 4
    (min_anndef, maj_anndef) = converter._get_default_annual_spacing(nyears)
    result = converter._quarterly_finder(data[0], data[-1], 'Q')
    quarters = pd.PeriodIndex(pd.arrays.PeriodArray(
        np.array([x[0] for x in result]), freq='Q'))
    majors = np.array([x[1] for x in result])
    minors = np.array([x[2] for x in result])
    major_quarters = quarters[majors]
    minor_quarters = quarters[minors]
    check_major_years = major_quarters.year % maj_anndef == 0
    check_minor_years = minor_quarters.year % min_anndef == 0
    check_major_quarters = major_quarters.quarter == 1
    check_minor_quarters = minor_quarters.quarter == 1
    assert (np.all(check_major_years) and np.all(check_minor_years)
            and np.all(check_major_quarters) and np.all(check_minor_quarters))


start_date = pd.to_datetime('1947-01-01')
span15 = pd.date_range(start_date, periods=15*4,
                       freq='Q').to_period(freq='Q').asi8
span30 = pd.date_range(start_date, periods=30*4,
                       freq='Q').to_period(freq='Q').asi8
span80 = pd.date_range(start_date, periods=80*4,
                       freq='Q').to_period(freq='Q').asi8
span150 = pd.date_range(start_date, periods=150*4,
                        freq='Q').to_period(freq='Q').asi8

test_quarterly_finder(span15)
test_quarterly_finder(span30)
test_quarterly_finder(span80)
test_quarterly_finder(span150)