Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show mean in the box plot in python?

Tags:

I am new to Matplotlib, and as I am learning how to draw box plot in python, I was wondering if there is a way to show mean in the box plots? Below is my code..

from pylab import * import matplotlib.pyplot as plt data1=np.random.rand(100,1) data2=np.random.rand(100,1) data_to_plot=[data1,data2] #Create a figure instance fig = plt.figure(1, figsize=(9, 6)) # Create an axes instance axes = fig.add_subplot(111)     # Create the boxplot bp = axes.boxplot(data_to_plot,**showmeans=True**) 

Even though I have showmean flag on, it gives me the following error.

TypeError: boxplot() got an unexpected keyword argument 'showmeans' 
like image 813
parth patel Avatar asked Apr 21 '15 15:04

parth patel


People also ask

Can you see the mean in a box plot?

Sometimes, the mean is also indicated by a dot or a cross on the box plot. The whiskers are the two lines outside the box, that go from the minimum to the lower quartile (the start of the box) and then from the upper quartile (the end of the box) to the maximum.

How do you add a mean to a Boxplot?

In order to show mean values in boxplot using ggplot2, we use the stat_summary() function to compute new summary statistics and add them to the plot. We use stat_summary() function with ggplot() function.


1 Answers

This is a minimal example and produces the desired result:

import matplotlib.pyplot as plt import numpy as np  data_to_plot = np.random.rand(100,5)  fig = plt.figure(1, figsize=(9, 6)) ax = fig.add_subplot(111)     bp = ax.boxplot(data_to_plot, showmeans=True)  plt.show() 

EDIT:

If you want to achieve the same with matplotlib version 1.3.1 you'll have to plot the means manually. This is an example of how to do it:

import matplotlib.pyplot as plt import numpy as np  data_to_plot = np.random.rand(100,5) positions = np.arange(5) + 1  fig, ax = plt.subplots(1,2, figsize=(9,4))  # matplotlib > 1.4 bp = ax[0].boxplot(data_to_plot, positions=positions, showmeans=True) ax[0].set_title("Using showmeans")  #matpltolib < 1.4 bp = ax[1].boxplot(data_to_plot, positions=positions) means = [np.mean(data) for data in data_to_plot.T] ax[1].plot(positions, means, 'rs') ax[1].set_title("Plotting means manually")  plt.show() 

Result:

enter image description here

like image 136
hitzg Avatar answered Sep 23 '22 22:09

hitzg