from pandas.plotting import PlotAccessor as _PlotAccessor
from matplotlib.axes import Axes # TODO: remove this in version >= 2.1
def _process_docstring(doc):
i = doc.find(' ax')
e = (
" - 'hist_1d' : 1d histogram\n"
" - 'kde_1d' : 1d Kernel Density Estimation plot\n"
" - 'fastkde_1d' : 1d Kernel Density Estimation plot"
" with fastkde package\n"
" - 'hist_2d' : 2d histogram (DataFrame only)\n"
" - 'kde_2d' : 2d Kernel Density Estimation plot (DataFrame only)\n"
" - 'fastkde_2d' : 2d Kernel Density Estimation plot"
" with fastkde package (DataFrame only)\n"
" - 'scatter_2d' : 2d scatter plot (DataFrame only)\n"
)
return doc[:i] + e + doc[i:]
[docs]
class PlotAccessor(_PlotAccessor):
# noqa: disable=D101
__doc__ = _process_docstring(_PlotAccessor.__doc__)
_common_kinds = _PlotAccessor._common_kinds \
+ ("hist_1d", "kde_1d", "fastkde_1d")
_series_kinds = _PlotAccessor._series_kinds + ()
_dataframe_kinds = _PlotAccessor._dataframe_kinds \
+ ("hist_2d", "kde_2d", "fastkde_2d", "scatter_2d")
_all_kinds = _common_kinds + _series_kinds + _dataframe_kinds
[docs]
def hist_1d(self, **kwargs):
"""Histogram plot: See :func:`anesthetic.plot.hist_plot_1d`."""
return self(kind="hist_1d", **kwargs)
[docs]
def kde_1d(self, **kwargs):
"""KDE plot: See :func:`anesthetic.plot.kde_plot_1d`."""
return self(kind="kde_1d", **kwargs)
[docs]
def fastkde_1d(self, **kwargs):
"""KDE plot: See :func:`anesthetic.plot.fastkde_plot_1d`."""
return self(kind="fastkde_1d", **kwargs)
[docs]
def kde_2d(self, x, y, **kwargs):
"""KDE plot: See :func:`anesthetic.plot.kde_contour_plot_2d`."""
return self(kind="kde_2d", x=x, y=y, **kwargs)
[docs]
def fastkde_2d(self, x, y, **kwargs):
"""KDE plot: See :func:`anesthetic.plot.fastkde_contour_plot_2d`."""
return self(kind="fastkde_2d", x=x, y=y, **kwargs)
[docs]
def hist_2d(self, x, y, **kwargs):
"""Histogram plot: See :func:`anesthetic.plot.hist_plot_2d`."""
return self(kind="hist_2d", x=x, y=y, **kwargs)
[docs]
def scatter_2d(self, x, y, **kwargs):
"""Scatter plot: See :func:`anesthetic.plot.scatter_plot_2d`."""
return self(kind="scatter_2d", x=x, y=y, **kwargs)
# TODO: remove this in version >= 2.1
def __call__(self, *args, **kwargs):
# noqa: disable=D102
if len(args) > 0 and isinstance(args[0], Axes):
raise ValueError(
"This is anesthetic 1.0 syntax. anesthetic 2.0 now follows "
"pandas in its use of plot.\n"
"samples.plot(ax, x) # anesthetic 1.0\n"
"# anesthetic 2.0\n"
"samples.plot(x=x, ax=ax, kind='kde_1d')\n"
"samples.x.plot.kde_1d(ax=ax)\n"
"samples.plot.kde_1d(x=x, ax=ax)\n\n"
"samples.plot(ax, x, y) # anesthetic 1.0\n"
"# anesthetic 2.0\n"
"samples.plot(x=x, y=y, ax=ax, kind='kde_2d')\n"
"samples.plot.kde_2d(x=x, y=y, ax=ax)"
)
return super().__call__(*args, **kwargs)