-
-
Notifications
You must be signed in to change notification settings - Fork 19.1k
Sharey keyword for boxplot #20968
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
Sharey keyword for boxplot #20968
Changes from 7 commits
cb80356
8d822b0
eb71a8e
dc7f3f5
9cb994c
849105a
64aac34
8dc0e9b
6bff510
cfc0a5f
6c0c324
e0a5515
6b4d371
c1d5cab
26ef598
42d7286
7a65d8a
fd76955
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 |
---|---|---|
|
@@ -927,6 +927,14 @@ yourself. To revert to the old setting, you can run this line: | |
|
||
pd.options.display.max_columns = 20 | ||
|
||
.. _whatsnew_0230.boxplot.sharexy: | ||
|
||
Optional sharing of x/y-axis by pandas.DataFrame().groupby().boxplot() | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
(:issue:`15184`) | ||
|
||
|
||
Optional sharing of x/y-axis by pandas.DataFrame().groupby().boxplot() | ||
|
||
.. _whatsnew_0230.api.datetimelike: | ||
|
||
Datetimelike API Changes | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2548,7 +2548,7 @@ def plot_group(group, ax): | |
|
||
def boxplot_frame_groupby(grouped, subplots=True, column=None, fontsize=None, | ||
rot=0, grid=True, ax=None, figsize=None, | ||
layout=None, **kwds): | ||
layout=None, sharex=False, sharey=True, **kwds): | ||
""" | ||
Make box plots from DataFrameGroupBy data. | ||
|
||
|
@@ -2567,6 +2567,12 @@ def boxplot_frame_groupby(grouped, subplots=True, column=None, fontsize=None, | |
figsize : A tuple (width, height) in inches | ||
layout : tuple (optional) | ||
(rows, columns) for the layout of the plot | ||
sharex : | ||
|
||
* ``True`` - x-axes will be shared among subplots | ||
* ``False`` - x-axes will not be shared | ||
sharey : | ||
* ``True`` - y-axes will be shared among subplots | ||
* ``False`` - y-axes will not be shared | ||
`**kwds` : Keyword Arguments | ||
All other plotting keyword arguments to be passed to | ||
matplotlib's boxplot function | ||
|
@@ -2598,7 +2604,7 @@ def boxplot_frame_groupby(grouped, subplots=True, column=None, fontsize=None, | |
if subplots is True: | ||
naxes = len(grouped) | ||
fig, axes = _subplots(naxes=naxes, squeeze=False, | ||
ax=ax, sharex=False, sharey=True, | ||
ax=ax, sharex=sharex, sharey=sharey, | ||
figsize=figsize, layout=layout) | ||
axes = _flatten(axes) | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -367,6 +367,64 @@ def test_subplots(self): | |
for ax in axes: | ||
assert ax.get_legend() is None | ||
|
||
def test_groupby_boxplot_sharey(self): | ||
# https://github.com/pandas-dev/pandas/issues/9737 using gridspec, | ||
# the axis in fig.get_axis() are sorted differently than pandas | ||
# expected them, so make sure that only the right ones are removed | ||
|
||
df = DataFrame({'a': [-1.43, -0.15, -3.70, -1.43, -0.14], | ||
'b': [0.56, 0.84, 0.29, 0.56, 0.85], | ||
'c': [0, 1, 2, 3, 1]}, | ||
index=[0, 1, 2, 3, 4]) | ||
|
||
# standart behavior | ||
|
||
axes = df.groupby('c').boxplot() | ||
self._check_visible(axes[0].get_yticklabels(), visible=True) | ||
|
||
self._check_visible(axes[1].get_yticklabels(), visible=False) | ||
self._check_visible(axes[2].get_yticklabels(), visible=True) | ||
self._check_visible(axes[3].get_yticklabels(), visible=False) | ||
# set sharey=True should be identical | ||
axes = df.groupby('c').boxplot(sharey=True) | ||
self._check_visible(axes[0].get_yticklabels(), visible=True) | ||
self._check_visible(axes[1].get_yticklabels(), visible=False) | ||
self._check_visible(axes[2].get_yticklabels(), visible=True) | ||
self._check_visible(axes[3].get_yticklabels(), visible=False) | ||
# sharey=False, all yticklabels should be visible | ||
axes = df.groupby('c').boxplot(sharey=False) | ||
self._check_visible(axes[0].get_yticklabels(), visible=True) | ||
self._check_visible(axes[1].get_yticklabels(), visible=True) | ||
self._check_visible(axes[2].get_yticklabels(), visible=True) | ||
self._check_visible(axes[3].get_yticklabels(), visible=True) | ||
|
||
def test_groupby_boxplot_sharex(self): | ||
# https://github.com/pandas-dev/pandas/issues/9737 using gridspec, | ||
# the axis in fig.get_axis() are sorted differently than pandas | ||
# expected them, so make sure that only the right ones are removed | ||
|
||
df = DataFrame({'a': [-1.43, -0.15, -3.70, -1.43, -0.14], | ||
'b': [0.56, 0.84, 0.29, 0.56, 0.85], | ||
'c': [0, 1, 2, 3, 1]}, | ||
index=[0, 1, 2, 3, 4]) | ||
|
||
# standart behavior | ||
axes = df.groupby('c').boxplot() | ||
self._check_visible(axes[0].get_xticklabels(), visible=True) | ||
self._check_visible(axes[1].get_xticklabels(), visible=True) | ||
self._check_visible(axes[2].get_xticklabels(), visible=True) | ||
self._check_visible(axes[3].get_xticklabels(), visible=True) | ||
# set sharex=False should be identical | ||
axes = df.groupby('c').boxplot(sharex=False) | ||
self._check_visible(axes[0].get_xticklabels(), visible=True) | ||
self._check_visible(axes[1].get_xticklabels(), visible=True) | ||
self._check_visible(axes[2].get_xticklabels(), visible=True) | ||
self._check_visible(axes[3].get_xticklabels(), visible=True) | ||
# sharex=True, yticklabels should be visible for bottom plots | ||
axes = df.groupby('c').boxplot(sharex=True) | ||
self._check_visible(axes[0].get_xticklabels(), visible=False) | ||
self._check_visible(axes[1].get_xticklabels(), visible=False) | ||
self._check_visible(axes[2].get_xticklabels(), visible=True) | ||
self._check_visible(axes[3].get_xticklabels(), visible=True) | ||
|
||
@pytest.mark.slow | ||
def test_subplots_timeseries(self): | ||
idx = date_range(start='2014-07-01', freq='M', periods=10) | ||
|
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.
This isn't an API change, so we don't need this long of a release note. Probably a single line saying that
boxplot
now accepts thesharey
keyword, and a link to a more detailed example in the docstring or plotting.rstThere 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 updated the docstring and the the part in v0.23.0.txt.
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.
Can you move this to 0.23.1.txt now?
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.
And I think the example can be trimmed down. I'd rather update the docstring for
DataFrame.plot.box
since that's a longer-term thing. The release note are for people checking changes. They'll see that it now supportssharey
, and click through if interested.