From: Andrew Straw <strawman@as...>  20091221 00:47:52

Robert Kern wrote: > On 20090914 13:49 PM, Gökhan Sever wrote: > >> On Mon, Sep 14, 2009 at 12:30 PM, <jasonsage@... >> <mailto:jasonsage@...>> wrote: >> >> I tried the following (most output text is deleted): >> >> In [1]: ob1=[1,1,2,2,1,2,4,3,2,2,2,3,4,5,6,7,8,9,7,6,4,5,5] >> In [2]: import matplotlib.pyplot as >> plt >> In [3]: >> plt.figure() >> In [4]: >> plt.boxplot(ob1) >> In [5]: >> plt.savefig('test.png') >> In [6]: import >> scipy.stats >> In [7]: >> scipy.stats.scoreatpercentile(ob1,75) >> Out[7]: 5.5 >> >> >> Note that the 75th percentile is 5.5. R agrees with this calculation. >> However, in the boxplot, the top of the box is around 6, not 5.5. Isn't >> the top of the box supposed to be at the 75th percentile? >> >> Thanks, >> >> Jason >> >>  >> Jason Grout >> >> >> From matplotlib/lib/matplotlib/axes.py >> >> You can see how matplotlib calculating percentiles. And yes it doesn't >> conform with scipy's scoreatpercentile() >> >> >> # get median and quartiles >> q1, med, q3 = mlab.prctile(d,[25,50,75]) >> >> I[36]: q1 >> O[36]: 2.0 >> >> I[37]: med >> O[37]: 4.0 >> >> I[38]: q3 >> O[38]: 6.0 >> >> >> Could this be due to a rounding? I don't know, but I am curious to hear >> the explanations for this discrepancy. >> > > prctile does not handle the case where the exact percentile lies between two > items. scoreatpercentile does. > Fixed in r8039. 