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?
2 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

- 65,268
- 20
- 159
- 136
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%.

- 21
- 1