@@ -1499,7 +1499,8 @@ def violin_stats(X, method=("GaussianKDE", "scott"), points=100, quantiles=None)
14991499 ----------
15001500 X : 1D array or sequence of 1D arrays or 2D array
15011501 Sample data that will be used to produce the gaussian kernel density
1502- estimates. Possible values:
1502+ estimates. Non-finite and masked values are ignored.
1503+ Possible values:
15031504
15041505 - 1D array: Statistics are computed for that array.
15051506 - sequence of 1D arrays: Statistics are computed for each array in the sequence.
@@ -1586,29 +1587,34 @@ def _kde_method(x, coords):
15861587 " must have the same length" )
15871588
15881589 # Zip x and quantiles
1589- for (x , q ) in zip (X , quantiles ):
1590- # Dictionary of results for this distribution
1591- stats = {}
1592-
1593- # Calculate basic stats for the distribution
1594- min_val = np .min (x )
1595- max_val = np .max (x )
1596- quantile_val = np .percentile (x , 100 * q )
1590+ for (x , quantile ) in zip (X , quantiles ):
1591+ x = np .asarray (x )
1592+ x , = delete_masked_points (x )
15971593
1598- # Evaluate the kernel density estimate
1599- coords = np .linspace (min_val , max_val , points )
1600- stats ['vals' ] = method (x , coords )
1601- stats ['coords' ] = coords
1602-
1603- # Store additional statistics for this distribution
1604- stats ['mean' ] = np .mean (x )
1605- stats ['median' ] = np .median (x )
1606- stats ['min' ] = min_val
1607- stats ['max' ] = max_val
1608- stats ['quantiles' ] = np .atleast_1d (quantile_val )
1609-
1610- # Append to output
1611- vpstats .append (stats )
1594+ if len (x ) == 0 :
1595+ vpstats .append ({
1596+ 'vals' : np .array ([]),
1597+ 'coords' : np .array ([]),
1598+ 'mean' : np .nan ,
1599+ 'median' : np .nan ,
1600+ 'min' : np .nan ,
1601+ 'max' : np .nan ,
1602+ 'quantiles' : np .array ([]),
1603+ })
1604+ else :
1605+ min_val = np .min (x )
1606+ max_val = np .max (x )
1607+ coords = np .linspace (min_val , max_val , points )
1608+
1609+ vpstats .append ({
1610+ 'vals' : method (x , coords ),
1611+ 'coords' : coords ,
1612+ 'mean' : np .mean (x ),
1613+ 'median' : np .median (x ),
1614+ 'min' : min_val ,
1615+ 'max' : max_val ,
1616+ 'quantiles' : np .atleast_1d (np .percentile (x , 100 * quantile ))
1617+ })
16121618
16131619 return vpstats
16141620
0 commit comments