Skip to content

Commit 5fb6172

Browse files
committed
Refactor PeriodConverter to separate frequency handling.
Introduce `convert_from_freq` method and streamline the conversion process by passing `freq` directly instead of using `axis.freq`. This improves modularity and ensures clearer separation of concerns for frequency handling in Period conversion.
1 parent 97d0440 commit 5fb6172

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

pandas/plotting/_matplotlib/converter.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -225,16 +225,20 @@ def __call__(self, x, pos: int | None = 0) -> str:
225225
class PeriodConverter(mdates.DateConverter):
226226
@staticmethod
227227
def convert(values, units, axis):
228+
if not hasattr(axis, "freq"):
229+
raise TypeError("Axis must have `freq` set to convert to Periods")
230+
return PeriodConverter.convert_from_freq(values, axis.freq)
231+
232+
@staticmethod
233+
def convert_from_freq(values, freq):
228234
if is_nested_list_like(values):
229-
values = [PeriodConverter._convert_1d(v, units, axis) for v in values]
235+
values = [PeriodConverter._convert_1d(v, freq) for v in values]
230236
else:
231-
values = PeriodConverter._convert_1d(values, units, axis)
237+
values = PeriodConverter._convert_1d(values, freq)
232238
return values
233239

234240
@staticmethod
235-
def _convert_1d(values, units, axis):
236-
if not hasattr(axis, "freq"):
237-
raise TypeError("Axis must have `freq` set to convert to Periods")
241+
def _convert_1d(values, freq):
238242
valid_types = (str, datetime, Period, pydt.date, pydt.time, np.datetime64)
239243
with warnings.catch_warnings():
240244
warnings.filterwarnings(
@@ -248,17 +252,17 @@ def _convert_1d(values, units, axis):
248252
or is_integer(values)
249253
or is_float(values)
250254
):
251-
return get_datevalue(values, axis.freq)
255+
return get_datevalue(values, freq)
252256
elif isinstance(values, PeriodIndex):
253-
return values.asfreq(axis.freq).asi8
257+
return values.asfreq(freq).asi8
254258
elif isinstance(values, Index):
255-
return values.map(lambda x: get_datevalue(x, axis.freq))
259+
return values.map(lambda x: get_datevalue(x, freq))
256260
elif lib.infer_dtype(values, skipna=False) == "period":
257261
# https://github.com/pandas-dev/pandas/issues/24304
258262
# convert ndarray[period] -> PeriodIndex
259-
return PeriodIndex(values, freq=axis.freq).asi8
263+
return PeriodIndex(values, freq=freq).asi8
260264
elif isinstance(values, (list, tuple, np.ndarray, Index)):
261-
return [get_datevalue(x, axis.freq) for x in values]
265+
return [get_datevalue(x, freq) for x in values]
262266
return values
263267

264268

0 commit comments

Comments
 (0)