|
From: Jeffrey B. <jbl...@al...> - 2012-08-22 15:29:43
|
On Aug 22, 2012, at 10:04 AM, Virgil Stokes wrote:
> On 21-Aug-2012 17:52, Jeffrey Blackburne wrote:
>>
>> On Aug 21, 2012, at 10:58 AM, Virgil Stokes wrote:
>>
>>> In reference to my previous email.
>>>
>>> How can I find the outliers (samples points beyond the whiskers)
>>> in the data
>>> used for the boxplot?
>>>
>>> Here is a code snippet that shows how it was used for the timings
>>> data (a list
>>> of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data
>>> values),
>>> ...
>>> ...
>>> ...
>>> # Box Plots
>>> plt.subplot(2,1,2)
>>> timings = [y1,y2,y3,y4]
>>> pos = np.array(range(len(timings)))+1
>>> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
>>> positions=pos, notch=1, bootstrap=5000 )
>>>
>>> plt.xlabel('Algorithm')
>>> plt.ylabel('Exection time (sec)')
>>> plt.ylim(0.9*ymin,1.1*ymax)
>>>
>>> plt.setp(bp['whiskers'], color='k', linestyle='-' )
>>> plt.setp(bp['fliers'], markersize=3.0)
>>> plt.title('Box plots (%4d trials)' %(n))
>>> plt.show()
>>> ...
>>> ...
>>> ...
>>>
>>> Again my questions:
>>> 1) How to get the value of the median?
>>
>> This is easily calculated from your data. Numpy will even do it
>> for you: np.median(timings)
>>
>>> 2) How to find the outliers (outside the whiskers)?
>>
>> From the boxplot documentation: the whiskers extend to the most
>> extreme data point within distance X of the bottom or top of the
>> box, where X is 1.5 times the extent of the box. Any points more
>> extreme than that are the outliers. The box itself of course
>> extends from the 25th percentile to the 75th percentile of your
>> data. Again, you can easily calculate these values from your data.
>>
>>> 3) How to find the width of the notch?
>>
>> Again, from the docs: with bootstrap=5000, it calculates the width
>> of the notch by bootstrap resampling your data (the timings array)
>> 5000 times and finding the 95% confidence interval of the median,
>> and uses that as the notch width. You can redo that yourself
>> pretty easily. Here is some bootstrap code for you to adapt:
>> http://mail.scipy.org/pipermail/scipy-user/2009-July/021704.html
>>
>> I encourage you to read the documentation! This page is very
>> useful for reference:
>> http://matplotlib.sourceforge.net/api/pyplot_api.html
>>
>> -Jeff
>>
> Yes Jeff,
> These are very useful links; however, box plots have a parameter
> called the "adjacent value" (from the McGill reference),
>
> "The plotted whisker extends to the adjacent value, which is the
> most extreme data value that is not an outlier."
>
> It seems there should be one for the lower and one for the upper
> whisker --- how can one get these two values from boxplot?
Look at bp['whiskers']
For those who got here by searching: bp is the object returned by
plt.boxplot()
> Also, is there anyway to directly get the indices of the outliers?
Look into np.where()
|