Skip to content

Commit 057a72f

Browse files
committed
Fix boxplot/violinplot brokenness on Pandas 0.13
1 parent da9cf6d commit 057a72f

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

seaborn/distributions.py

+13-19
Original file line numberDiff line numberDiff line change
@@ -61,30 +61,27 @@ def boxplot(vals, groupby=None, names=None, join_rm=False, order=None,
6161

6262
# Handle case where data is a wide DataFrame
6363
if isinstance(vals, pd.DataFrame):
64-
if names is None:
65-
names = vals.columns
6664
if vals.columns.name is not None:
6765
xlabel = vals.columns.name
6866
else:
6967
xlabel = None
7068
if order is not None:
7169
vals = vals[order]
72-
names = order
70+
if names is None:
71+
names = vals.columns
7372
vals = vals.values
7473
ylabel = None
7574

7675
# Handle case where data is a long Series and there is a grouping object
7776
elif isinstance(vals, pd.Series) and groupby is not None:
7877
if names is None:
7978
names = np.sort(pd.unique(groupby))
79+
order = names if order is None else order
8080
if hasattr(groupby, "name"):
8181
xlabel = groupby.name
8282
ylabel = vals.name
83-
grouped_vals = pd.groupby(vals, groupby).values
84-
if order is not None:
85-
grouped_vals = grouped_vals[order]
86-
names = order
87-
vals = grouped_vals.values
83+
groups = pd.groupby(vals, groupby).groups
84+
vals = [vals.reindex(groups[name]) for name in order]
8885
else:
8986
xlabel = None
9087
ylabel = None
@@ -242,30 +239,27 @@ def violinplot(vals, groupby=None, inner="box", color=None, positions=None,
242239

243240
# Find existing names
244241
if isinstance(vals, pd.DataFrame):
245-
if names is None:
246-
names = vals.columns
247242
if vals.columns.name is not None:
248243
xlabel = vals.columns.name
249244
else:
250245
xlabel = None
251-
ylabel = None
252246
if order is not None:
253247
vals = vals[order]
254-
names = order
248+
if names is None:
249+
names = vals.columns
255250
vals = vals.values
251+
ylabel = None
256252

257253
# Possibly perform a group-by to get the batches
258254
elif isinstance(vals, pd.Series) and groupby is not None:
259-
if hasattr(groupby, "name"):
260-
xlabel = groupby.name
261255
if names is None:
262256
names = np.sort(pd.unique(groupby))
257+
order = names if order is None else order
258+
if hasattr(groupby, "name"):
259+
xlabel = groupby.name
263260
ylabel = vals.name
264-
grouped_vals = pd.groupby(vals, groupby).values
265-
if order is not None:
266-
grouped_vals = grouped_vals[order]
267-
names = order
268-
vals = grouped_vals.values
261+
groups = pd.groupby(vals, groupby).groups
262+
vals = [vals.reindex(groups[name]) for name in order]
269263
else:
270264
xlabel = None
271265
ylabel = None

0 commit comments

Comments
 (0)