-
-
Notifications
You must be signed in to change notification settings - Fork 18.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
API: Restore implicit converter registration #18307
Changes from 22 commits
220d554
fba98b1
ba88a04
16c33f1
3766b78
5be9793
9364f60
39602f9
eb6388e
444bc4d
ec7f7e1
58bf2f6
5ee385e
ca6c945
77f76d2
ecf4154
61fbdbb
5e16157
d6798d1
576d244
04d8aa5
f061148
1112b28
897c7ea
2cf0601
ee7b457
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,6 @@ | |
'ipython', | ||
'jinja2' | ||
'lxml', | ||
'matplotlib', | ||
'numexpr', | ||
'openpyxl', | ||
'py', | ||
|
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,6 +7,39 @@ This is a minor release from 0.21.1 and includes a number of deprecations, new | |
features, enhancements, and performance improvements along with a large number | ||
of bug fixes. We recommend that all users upgrade to this version. | ||
|
||
.. _whatsnew_0211.special: | ||
|
||
Restore Matplotlib datetime Converter Registration | ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
Pandas implements some matplotlib converters for nicely formatting the axis | ||
labels on plots with ``datetime`` or ``Period`` values. Prior to pandas 0.21.0, | ||
these were implicitly registered with matplotlib, as a side effect of | ||
``import pandas``. In pandas 0.21.0, we required users to explicitly register | ||
the converter. | ||
|
||
.. code-block:: python | ||
|
||
>>> from pandas.plotting import register_matplotlib_converters | ||
>>> register_matplotlib_converters() | ||
|
||
This caused problems for some users who relied on those converters being present | ||
for regular ``matplotlib.pyplot`` plotting methods, so we're temporarily | ||
reverting that change; pandas will again register the converters on import. | ||
Pandas plotting functions, such as ``Series.plot``, will continue to register | ||
them for you. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This sentence now feels a bit out of place, as the previous one already said that they are registered again on import. |
||
|
||
We've added a new option to control the converters, | ||
``pd.options.plotting.matplotlib.register_converters``. By default, they are | ||
registered. Toggling this to ``False`` removes pandas' formatters and restore | ||
any converters we overwrote when registering them (:issue:`18301`). | ||
|
||
We're working with the matplotlib developers to make this easier. We're trying | ||
to balance user convenience (automatically registering the converters) with | ||
import performance and best practices (importing pandas shouldn't have the side | ||
effect of overwriting any custom converters you've already set). Apologies for | ||
any bumps along the way. | ||
|
||
.. _whatsnew_0211.enhancements: | ||
|
||
New features | ||
|
@@ -30,9 +63,8 @@ Other Enhancements | |
Deprecations | ||
~~~~~~~~~~~~ | ||
|
||
- | ||
- | ||
- | ||
- ``pandas.tseries.register`` has been renamed to | ||
:func:`pandas.plotting.register_matplotlib_converters`` (:issue:`18301`) | ||
|
||
.. _whatsnew_0211.performance: | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,6 +11,7 @@ | |
|
||
from pandas.util._decorators import cache_readonly | ||
from pandas.core.base import PandasObject | ||
from pandas.core.config import get_option | ||
from pandas.core.dtypes.missing import isna, notna, remove_na_arraylike | ||
from pandas.core.dtypes.common import ( | ||
is_list_like, | ||
|
@@ -40,16 +41,13 @@ | |
_get_xlim, _set_ticks_props, | ||
format_date_labels) | ||
|
||
_registered = False | ||
|
||
|
||
def _setup(): | ||
# delay the import of matplotlib until nescessary | ||
global _registered | ||
if not _registered: | ||
from pandas.plotting import _converter | ||
_converter.register() | ||
_registered = True | ||
try: | ||
from pandas.plotting import _converter | ||
except ImportError: | ||
pass | ||
else: | ||
if get_option('plotting.matplotlib.register_converters'): | ||
_converter.register(explicit=True) | ||
|
||
|
||
def _get_standard_kind(kind): | ||
|
@@ -99,7 +97,7 @@ def __init__(self, data, kind=None, by=None, subplots=False, sharex=None, | |
secondary_y=False, colormap=None, | ||
table=False, layout=None, **kwds): | ||
|
||
_setup() | ||
_converter._WARN = False | ||
self.data = data | ||
self.by = by | ||
|
||
|
@@ -2064,7 +2062,7 @@ def boxplot_frame(self, column=None, by=None, ax=None, fontsize=None, rot=0, | |
grid=True, figsize=None, layout=None, | ||
return_type=None, **kwds): | ||
import matplotlib.pyplot as plt | ||
_setup() | ||
_converter._WARN = False | ||
ax = boxplot(self, column=column, by=by, ax=ax, fontsize=fontsize, | ||
grid=grid, rot=rot, figsize=figsize, layout=layout, | ||
return_type=return_type, **kwds) | ||
|
@@ -2160,7 +2158,7 @@ def hist_frame(data, column=None, by=None, grid=True, xlabelsize=None, | |
`**kwds` : other plotting keyword arguments | ||
To be passed to hist function | ||
""" | ||
_setup() | ||
_converter._WARN = False | ||
if by is not None: | ||
axes = grouped_hist(data, column=column, by=by, ax=ax, grid=grid, | ||
figsize=figsize, sharex=sharex, sharey=sharey, | ||
|
@@ -2294,6 +2292,8 @@ def grouped_hist(data, column=None, by=None, ax=None, bins=50, figsize=None, | |
------- | ||
axes: collection of Matplotlib Axes | ||
""" | ||
_converter._WARN = False | ||
|
||
def plot_group(group, ax): | ||
ax.hist(group.dropna().values, bins=bins, **kwargs) | ||
|
||
|
@@ -2358,7 +2358,7 @@ def boxplot_frame_groupby(grouped, subplots=True, column=None, fontsize=None, | |
>>> grouped = df.unstack(level='lvl1').groupby(level=0, axis=1) | ||
>>> boxplot_frame_groupby(grouped, subplots=False) | ||
""" | ||
_setup() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this one doesn't need to be replaced with _converter.WARN = False ? |
||
_converter._WARN = False | ||
if subplots is True: | ||
naxes = len(grouped) | ||
fig, axes = _subplots(naxes=naxes, squeeze=False, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure if I would show that here. Because people who glance over it might think they need to add that to their code, which is not the case.