@@ -61,30 +61,27 @@ def boxplot(vals, groupby=None, names=None, join_rm=False, order=None,
61
61
62
62
# Handle case where data is a wide DataFrame
63
63
if isinstance (vals , pd .DataFrame ):
64
- if names is None :
65
- names = vals .columns
66
64
if vals .columns .name is not None :
67
65
xlabel = vals .columns .name
68
66
else :
69
67
xlabel = None
70
68
if order is not None :
71
69
vals = vals [order ]
72
- names = order
70
+ if names is None :
71
+ names = vals .columns
73
72
vals = vals .values
74
73
ylabel = None
75
74
76
75
# Handle case where data is a long Series and there is a grouping object
77
76
elif isinstance (vals , pd .Series ) and groupby is not None :
78
77
if names is None :
79
78
names = np .sort (pd .unique (groupby ))
79
+ order = names if order is None else order
80
80
if hasattr (groupby , "name" ):
81
81
xlabel = groupby .name
82
82
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 ]
88
85
else :
89
86
xlabel = None
90
87
ylabel = None
@@ -242,30 +239,27 @@ def violinplot(vals, groupby=None, inner="box", color=None, positions=None,
242
239
243
240
# Find existing names
244
241
if isinstance (vals , pd .DataFrame ):
245
- if names is None :
246
- names = vals .columns
247
242
if vals .columns .name is not None :
248
243
xlabel = vals .columns .name
249
244
else :
250
245
xlabel = None
251
- ylabel = None
252
246
if order is not None :
253
247
vals = vals [order ]
254
- names = order
248
+ if names is None :
249
+ names = vals .columns
255
250
vals = vals .values
251
+ ylabel = None
256
252
257
253
# Possibly perform a group-by to get the batches
258
254
elif isinstance (vals , pd .Series ) and groupby is not None :
259
- if hasattr (groupby , "name" ):
260
- xlabel = groupby .name
261
255
if names is None :
262
256
names = np .sort (pd .unique (groupby ))
257
+ order = names if order is None else order
258
+ if hasattr (groupby , "name" ):
259
+ xlabel = groupby .name
263
260
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 ]
269
263
else :
270
264
xlabel = None
271
265
ylabel = None
0 commit comments