%load_ext watermark

%watermark -u -v -d -p matplotlib,numpy

"""
Explanation: Sebastian Raschka
back to the matplotlib-gallery at https://github.com/rasbt/matplotlib-gallery
End of explanation
"""


%matplotlib inline

"""
Explanation: <font size="1.5em">More info about the %watermark extension</font>
End of explanation
"""


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()

"""
Explanation: <br>
<br>
Boxplots in matplotlib
Sections


Simple Boxplot


Black and white Boxplot


Horizontal Boxplot


Filled and cylindrical boxplots


Boxplots with custom fill colors


Violin plots


<br>
<br>
<br>
<br>

<br>
<br>
Simple Boxplot
[back to top]
End of explanation
"""


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()

"""
Explanation: <br>
<br>
Black and white Boxplot
[back to top]
End of explanation
"""


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()

"""
Explanation: <br>
<br>
Horizontal Boxplot
[back to top]
End of explanation
"""


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()

"""
Explanation: <br>
<br>
Filled and cylindrical boxplots
[back to top]
End of explanation
"""


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()

"""
Explanation: <br>
<br>
Boxplots with custom fill colors
[back to top]
End of explanation
"""


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()

"""
Explanation: <br>
<br>
Violin plots
[back to top]
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.
End of explanation
"""


