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)