In [47]:
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

In [48]:
# Load in excel file, divide up into separate dataframes
xls = pd.ExcelFile('./ch8.xlsx')
UF_Cavity = xls.parse(0)
Cavity_Cavity = xls.parse(1)
UF_UF = xls.parse(2)
Cavity_UF = xls.parse(3)
UFCavity_Cavity = xls.parse(4)

# Combine data into a list of data frames
all_data = [UF_Cavity, 
            Cavity_Cavity,
            UF_UF, 
            Cavity_UF,
           UFCavity_Cavity]
names = ["UF_Cavity", 
            "Cavity_Cavity",
            "UF_UF", 
            "Cavity_UF",
           "UFCavity_Cavity"]

In [49]:
# More descriptive column names
for df in all_data:
    df.columns = ['Test', 'Group', 'Threshold_Percentage',
              'AUROC', 'AUPR_0', 'AUPR',
              'True_Positive', 'False_Positive', 
              'True_Negative', 'False_Negative', 
              'True_Positive_Rate', 'True_Negative_Rate', 
              'Positive_Predictive_Value', 'Negative_Predictive_Value', 
              'False_Negative_Rate', 'False_Positive_Rate',
              'False_Discovery_Rate', 'False_Omission_Rate', 
              'Accuracy', 'F1',
              'Matthews_Correlation_Coefficient'
             ]

In [50]:
labels=UF_UF.columns.values[3:]
labels


Out[50]:
array(['AUROC', 'AUPR_0', 'AUPR', 'True_Positive', 'False_Positive',
       'True_Negative', 'False_Negative', 'True_Positive_Rate',
       'True_Negative_Rate', 'Positive_Predictive_Value',
       'Negative_Predictive_Value', 'False_Negative_Rate',
       'False_Positive_Rate', 'False_Discovery_Rate',
       'False_Omission_Rate', 'Accuracy', 'F1',
       'Matthews_Correlation_Coefficient'], dtype=object)

In [57]:
# Compare AUROC results for all 18 labels
#     based on their groupings
label = 'AUPR'
i = 0
for df in all_data:
    plt.figure(figsize=(14,8))
    auroc_ax = sns.barplot(x='Group', y=label, 
                           hue='Threshold_Percentage', data=df)
    auroc_ax.set(ylabel=label)
    auroc_ax.set(xlabel="Classifier Group")
    auroc_ax.legend(ncol=2, loc=0, bbox_to_anchor=(1.0, 1), frameon=True, title="Threshold Percentage")
    auroc_ax.set(title=names[i])
    auroc_ax.set(ylim=(0, 1))
    i+=1
    plt.xticks(rotation=15)
    plt.show()



In [52]:
# Compare TPR results for all 18 labels
#     based on their groupings
label = 'True_Positive_Rate'
sns.set_context("paper", font_scale=2)
sns.set_palette("Greys_r")
i = 0
for df in all_data:
    plt.figure(figsize=(12,8))
    auroc_ax = sns.barplot(x='Group', y=label, 
                           hue='Threshold_Percentage', data=df)
    auroc_ax.set(ylabel=label)
    auroc_ax.set(xlabel="Classifier Group")
    auroc_ax.legend(ncol=2, loc=0, frameon=True, title="Threshold Percentage")
    auroc_ax.set(title=names[i])
    auroc_ax.set(ylim=(0, 1))
    i+=1
    plt.xticks(rotation=15)
    plt.show()



In [53]:
# Compare TPR results for all 18 labels
#     based on their groupings
for lbl in labels:
    label = lbl
    sns.set_context("paper", font_scale=2.5)
    sns.set_palette("Greys_r", 6)
    plt.figure(figsize=(14,8))
    auroc_ax = sns.barplot(x='Group', y=label, 
                           hue='Threshold_Percentage', data=df)
    auroc_ax.set(ylabel=label)
    auroc_ax.set(xlabel="Classifier Group")
    auroc_ax.legend(ncol=2, bbox_to_anchor=(1.05, 1),loc=0, frameon=True, title="Threshold Percentage")
    #lgd = auroc_ax.legend(ncol=2, bbox_to_anchor=(1.05, 1),loc=0, frameon=True, title="Threshold Percentage")
    lgd = auroc_ax.legend(ncol=2, loc=0,frameon=True, title="Threshold Percentage")
    plt.xticks(rotation=15)
    plt.tight_layout()
    
    plt.savefig(label + '.png', bbox_extra_artists=(lgd,), bbox_inches='tight')
    plt.show()


---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-53-e6c38cb33f5f> in <module>()
     16     plt.tight_layout()
     17 
---> 18     plt.savefig(label + '.png', bbox_extra_artists=(lgd,), bbox_inches='tight')
     19     plt.show()
     20 

/usr/local/lib/python3.5/dist-packages/matplotlib/pyplot.py in savefig(*args, **kwargs)
    696     fig = gcf()
    697     res = fig.savefig(*args, **kwargs)
--> 698     fig.canvas.draw_idle()   # need this if 'transparent=True' to reset colors
    699     return res
    700 

/usr/local/lib/python3.5/dist-packages/matplotlib/backend_bases.py in draw_idle(self, *args, **kwargs)
   2030         if not self._is_idle_drawing:
   2031             with self._idle_draw_cntx():
-> 2032                 self.draw(*args, **kwargs)
   2033 
   2034     def draw_cursor(self, event):

/usr/local/lib/python3.5/dist-packages/matplotlib/backends/backend_agg.py in draw(self)
    462 
    463         try:
--> 464             self.figure.draw(self.renderer)
    465         finally:
    466             RendererAgg.lock.release()

/usr/local/lib/python3.5/dist-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     61     def draw_wrapper(artist, renderer, *args, **kwargs):
     62         before(artist, renderer)
---> 63         draw(artist, renderer, *args, **kwargs)
     64         after(artist, renderer)
     65 

/usr/local/lib/python3.5/dist-packages/matplotlib/figure.py in draw(self, renderer)
   1141 
   1142             mimage._draw_list_compositing_images(
-> 1143                 renderer, self, dsu, self.suppressComposite)
   1144 
   1145             renderer.close_group('figure')

/usr/local/lib/python3.5/dist-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, dsu, suppress_composite)
    137     if not_composite or not has_images:
    138         for zorder, a in dsu:
--> 139             a.draw(renderer)
    140     else:
    141         # Composite any adjacent images together

/usr/local/lib/python3.5/dist-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     61     def draw_wrapper(artist, renderer, *args, **kwargs):
     62         before(artist, renderer)
---> 63         draw(artist, renderer, *args, **kwargs)
     64         after(artist, renderer)
     65 

/usr/local/lib/python3.5/dist-packages/matplotlib/axes/_base.py in draw(self, renderer, inframe)
   2407             renderer.stop_rasterizing()
   2408 
-> 2409         mimage._draw_list_compositing_images(renderer, self, dsu)
   2410 
   2411         renderer.close_group('axes')

/usr/local/lib/python3.5/dist-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, dsu, suppress_composite)
    137     if not_composite or not has_images:
    138         for zorder, a in dsu:
--> 139             a.draw(renderer)
    140     else:
    141         # Composite any adjacent images together

/usr/local/lib/python3.5/dist-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     61     def draw_wrapper(artist, renderer, *args, **kwargs):
     62         before(artist, renderer)
---> 63         draw(artist, renderer, *args, **kwargs)
     64         after(artist, renderer)
     65 

/usr/local/lib/python3.5/dist-packages/matplotlib/legend.py in draw(self, renderer)
    481             self.legendPatch.draw(renderer)
    482 
--> 483         self._legend_box.draw(renderer)
    484 
    485         renderer.close_group('legend')

/usr/local/lib/python3.5/dist-packages/matplotlib/offsetbox.py in draw(self, renderer)
    284         for c, (ox, oy) in zip(self.get_visible_children(), offsets):
    285             c.set_offset((px + ox, py + oy))
--> 286             c.draw(renderer)
    287 
    288         bbox_artist(self, renderer, fill=False, props=dict(pad=0.))

/usr/local/lib/python3.5/dist-packages/matplotlib/offsetbox.py in draw(self, renderer)
    284         for c, (ox, oy) in zip(self.get_visible_children(), offsets):
    285             c.set_offset((px + ox, py + oy))
--> 286             c.draw(renderer)
    287 
    288         bbox_artist(self, renderer, fill=False, props=dict(pad=0.))

/usr/local/lib/python3.5/dist-packages/matplotlib/offsetbox.py in draw(self, renderer)
    284         for c, (ox, oy) in zip(self.get_visible_children(), offsets):
    285             c.set_offset((px + ox, py + oy))
--> 286             c.draw(renderer)
    287 
    288         bbox_artist(self, renderer, fill=False, props=dict(pad=0.))

/usr/local/lib/python3.5/dist-packages/matplotlib/offsetbox.py in draw(self, renderer)
    284         for c, (ox, oy) in zip(self.get_visible_children(), offsets):
    285             c.set_offset((px + ox, py + oy))
--> 286             c.draw(renderer)
    287 
    288         bbox_artist(self, renderer, fill=False, props=dict(pad=0.))

/usr/local/lib/python3.5/dist-packages/matplotlib/offsetbox.py in draw(self, renderer)
    698             if self._clip_children and not (c.clipbox or c._clippath):
    699                 c.set_clip_path(tpath)
--> 700             c.draw(renderer)
    701 
    702         bbox_artist(self, renderer, fill=False, props=dict(pad=0.))

/usr/local/lib/python3.5/dist-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     61     def draw_wrapper(artist, renderer, *args, **kwargs):
     62         before(artist, renderer)
---> 63         draw(artist, renderer, *args, **kwargs)
     64         after(artist, renderer)
     65 

/usr/local/lib/python3.5/dist-packages/matplotlib/patches.py in draw(self, renderer)
    551 
    552         path = self.get_path()
--> 553         transform = self.get_transform()
    554         tpath = transform.transform_path_non_affine(path)
    555         affine = transform.get_affine()

/usr/local/lib/python3.5/dist-packages/matplotlib/patches.py in get_transform(self)
    217         to the :class:`Patch`.
    218         """
--> 219         return self.get_patch_transform() + artist.Artist.get_transform(self)
    220 
    221     def get_data_transform(self):

/usr/local/lib/python3.5/dist-packages/matplotlib/patches.py in get_patch_transform(self)
    706 
    707     def get_patch_transform(self):
--> 708         self._update_patch_transform()
    709         return self._rect_transform
    710 

/usr/local/lib/python3.5/dist-packages/matplotlib/patches.py in _update_patch_transform(self)
    702         rot_trans = transforms.Affine2D()
    703         rot_trans.rotate_deg_around(x, y, self._angle)
--> 704         self._rect_transform = transforms.BboxTransformTo(bbox)
    705         self._rect_transform += rot_trans
    706 

/usr/local/lib/python3.5/dist-packages/matplotlib/transforms.py in __init__(self, boxout, **kwargs)
   2556             raise ValueError("'boxout' must be bbox")
   2557 
-> 2558         Affine2DBase.__init__(self, **kwargs)
   2559         self._boxout = boxout
   2560         self.set_children(boxout)

/usr/local/lib/python3.5/dist-packages/matplotlib/transforms.py in __init__(self, *args, **kwargs)
   1661 
   1662     def __init__(self, *args, **kwargs):
-> 1663         Transform.__init__(self, *args, **kwargs)
   1664         self._inverted = None
   1665 

/usr/local/lib/python3.5/dist-packages/matplotlib/transforms.py in __init__(self, shorthand_name)
     97         # parents are deleted, references from the children won't keep
     98         # them alive.
---> 99         self._parents = WeakValueDictionary()
    100 
    101         # TransformNodes start out as invalid until their values are

/usr/lib/python3.5/weakref.py in __init__(*args, **kw)
    106         if len(args) > 1:
    107             raise TypeError('expected at most 1 arguments, got %d' % len(args))
--> 108         def remove(wr, selfref=ref(self)):
    109             self = selfref()
    110             if self is not None:

KeyboardInterrupt: 

In [ ]: