Changing what the ends of whiskers represent in matplotlib's boxplot function

Question:

I understand that the ends of whiskers in matplotlib’s box plot function extend to max value below 75% + 1.5 IQR and minimum value above 25% – 1.5 IQR. I would like to change it to represent max and minimum values of the data or the 5th and 95th quartile of the data. Is is possible to do this?

Asked By: JayKu12

||

Answers:

To get the whiskers to appear at the min and max of the data, set the whis parameter to an arbitrarily large number. In other words: boxplots = ax.boxplot(myData, whis=np.inf).

The whis kwarg is a scaling factor of the interquartile range. Whiskers are drawn to the outermost data points within whis * IQR away from the quartiles.

Now that v1.4 is out:

In matplotlib v1.4, you can say: boxplots = ax.boxplot(myData, whis=[5, 95]) to set the whiskers at the 5th and 95th percentiles. Similarly, you’ll be able to say boxplots = ax.boxplot(myData, whis=[0, 100]) to set the whiskers at the min and max.

Note: you could probably modify the artists contained in the boxplots dictionary returned by the ax.boxplot method, but that seems like a huge hassle

Answered By: Paul H

Set the boxplot option whisk=0 to hide the inbuilt whiskers. Then create the custom whiskers that show data from 5% to 95%.

#create markings that represent the ends of whiskers
low=data.quantile(0.05) 
high=data.quantile(0.95)
plt.scatter(range(1,len(low)+1),low,marker='_')
plt.scatter(range(1,len(low)+1),high,marker='_')
#connects low and high markers with a line
plt.vlines(range(1,len(low)+1),low,high)

That should create vertical lines with whisker markings behind the boxes at 5% at 95%.

Answered By: user3582605
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.