In [1]:
%load_ext watermark

In [2]:
%watermark -u -v -d -p matplotlib,numpy


Last updated: 26/08/2014 

CPython 3.4.1
IPython 2.1.0

matplotlib 1.4.0
numpy 1.8.2

[More info](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `%watermark` extension


In [3]:
%matplotlib inline



Boxplots in matplotlib

Sections







Simple Boxplot


In [7]:
import matplotlib.pyplot as plt
import numpy as np

all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]

fig = plt.figure(figsize=(8,6))

plt.boxplot(all_data, 
            notch=False, # box instead of notch shape 
            sym='rs',    # red squares for outliers
            vert=True)   # vertical box aligmnent

plt.xticks([y+1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])
plt.xlabel('measurement x')
t = plt.title('Box plot')
plt.show()




Black and white Boxplot


In [8]:
import matplotlib.pyplot as plt
import numpy as np

all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]

fig = plt.figure(figsize=(8,6))

bplot = plt.boxplot(all_data, 
            notch=False, # box instead of notch shape 
            sym='rs',    # red squares for outliers
            vert=True)   # vertical box aligmnent

plt.xticks([y+1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])
plt.xlabel('measurement x')

for components in bplot.keys():
    for line in bplot[components]:
        line.set_color('black')     # black lines

t = plt.title('Black and white box plot')

plt.show()




Horizontal Boxplot


In [13]:
import matplotlib.pyplot as plt
import numpy as np

all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]

fig = plt.figure(figsize=(8,6))

plt.boxplot(all_data, 
            notch=False,  # box instead of notch shape 
            sym='rs',     # red squares for outliers
            vert=False)   # horizontal box aligmnent

plt.yticks([y+1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])
plt.ylabel('measurement x')
t = plt.title('Horizontal Box plot')
plt.show()




Filled and cylindrical boxplots


In [10]:
import matplotlib.pyplot as plt
import numpy as np

all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]

fig = plt.figure(figsize=(8,6))

plt.boxplot(all_data, 
            notch=True,  # notch shape 
            sym='bs',     # blue squares for outliers
            vert=True,   # vertical box aligmnent
            patch_artist=True)   # fill with color

plt.xticks([y+1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])
plt.xlabel('measurement x')
t = plt.title('Box plot')
plt.show()




Boxplots with custom fill colors


In [31]:
import matplotlib.pyplot as plt
import numpy as np

all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]

fig = plt.figure(figsize=(8,6))

bplot = plt.boxplot(all_data, 
            notch=False,  # notch shape 
            vert=True,   # vertical box aligmnent
            patch_artist=True)   # fill with color

colors = ['pink', 'lightblue', 'lightgreen']
for patch, color in zip(bplot['boxes'], colors):
    patch.set_facecolor(color)

plt.xticks([y+1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])
plt.xlabel('measurement x')
t = plt.title('Box plot')
plt.show()




Violin plots

Violin plots are closely related to Tukey's (1977) box plots but add useful information such as the distribution of the sample data (density trace).

Violin plots were added in matplotlib 1.4.


In [9]:
import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=1,ncols=2, figsize=(12,5))

all_data = [np.random.normal(0, std, 100) for std in range(6, 10)]

#fig = plt.figure(figsize=(8,6))

axes[0].violinplot(all_data,
               showmeans=False,
               showmedians=True 
               )
axes[0].set_title('violin plot')

axes[1].boxplot(all_data,
               )
axes[1].set_title('box plot')

# adding horizontal grid lines 
for ax in axes:
    ax.yaxis.grid(True) 
    ax.set_xticks([y+1 for y in range(len(all_data))], )
    ax.set_xlabel('xlabel')
    ax.set_ylabel('ylabel')

plt.setp(axes, xticks=[y+1 for y in range(len(all_data))], 
        xticklabels=['x1', 'x2', 'x3', 'x4'],
        )    
    
plt.show()



In [ ]: