annotate src/breadcrumbs/src/PlotMatrix.py @ 0:2f4f6f08c8c4 draft

Uploaded
author george-weingart
date Tue, 13 May 2014 21:58:57 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
1 """
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
2 Author: Timothy Tickle
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
3 Description: Plots matrices.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
4 """
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
5
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
6 #####################################################################################
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
7 #Copyright (C) <2012>
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
8 #
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
9 #Permission is hereby granted, free of charge, to any person obtaining a copy of
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
10 #this software and associated documentation files (the "Software"), to deal in the
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
11 #Software without restriction, including without limitation the rights to use, copy,
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
12 #modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
13 #and to permit persons to whom the Software is furnished to do so, subject to
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
14 #the following conditions:
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
15 #
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
16 #The above copyright notice and this permission notice shall be included in all copies
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
17 #or substantial portions of the Software.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
18 #
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
19 #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
20 #INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
21 #PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
22 #HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
23 #OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
24 #SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
25 #####################################################################################
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
26
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
27 __author__ = "Timothy Tickle"
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
28 __copyright__ = "Copyright 2012"
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
29 __credits__ = ["Timothy Tickle"]
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
30 __license__ = "MIT"
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
31 __maintainer__ = "Timothy Tickle"
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
32 __email__ = "ttickle@sph.harvard.edu"
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
33 __status__ = "Development"
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
34
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
35 #External libraries
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
36 import matplotlib.pyplot as plt
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
37 import numpy as np
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
38 from pylab import *
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
39
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
40 #Plots a matrix
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
41 class PlotMatrix:
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
42
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
43 #Given a matrix and labels consistent to the matrix, plot a matrix
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
44 @staticmethod
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
45 def funcPlotMatrix(npMatrix, lsXLabels, strOutputFigurePath, strXTitle="X Axis", strYTitle="Y Axis", fFlipYLabels=False):
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
46 """
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
47 Given a matrix and labels consistent to the matrix, plot a matrix.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
48
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
49 :param npMatrix: Numpy Array (matrix) to plot.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
50 :type: Numpy Array
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
51 :param lsXLabels: X Labels
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
52 :type: List of strings
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
53 :param strOutputFigurePath: File to create the figure file.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
54 :type: String
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
55 :param strXTitle: X Axis label.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
56 :type: String
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
57 :param strYTitle: Y axis label.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
58 :type: String
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
59 :param fFlipYLabels: Flip the Y labels so they are opposite order of x axis.
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
60 :type: Boolean
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
61 """
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
62
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
63 #Get canvas/figure
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
64 plt.clf()
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
65 figConfusionMatrix = plt.figure()
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
66 objAxis = figConfusionMatrix.add_subplot(111)
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
67
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
68 #Get y labels
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
69 lNewYLabels = list(lsXLabels)
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
70 if fFlipYLabels:
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
71 lNewYLabels.reverse()
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
72
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
73 #Set x axis and position
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
74 objAxis.xaxis.set_ticklabels([""]+lsXLabels)
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
75 objAxis.xaxis.set_ticks_position('top')
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
76
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
77 #Set y axis
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
78 objAxis.yaxis.set_ticklabels([""]+lNewYLabels)
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
79
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
80 #Set axis titles
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
81 ylabel(strYTitle)
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
82 plt.suptitle(strXTitle)
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
83
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
84 #Plot matrix values
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
85 objPlot = objAxis.imshow(np.array(npMatrix), cmap=get_cmap("Blues"), interpolation='nearest')
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
86
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
87 #Plot text values
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
88 for yIndex, ldRow in enumerate(npMatrix):
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
89 for xIndex, dValue in enumerate(ldRow):
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
90 plt.text(xIndex, yIndex, dValue, fontdict = {'size':18,'weight':'bold'} )
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
91
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
92 #Add color bar
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
93 figConfusionMatrix.colorbar(objPlot, ticks=range(int(min(np.array(npMatrix).ravel())),int(max(np.array(npMatrix).ravel()))))
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
94
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
95 #Save to a file
2f4f6f08c8c4 Uploaded
george-weingart
parents:
diff changeset
96 savefig(strOutputFigurePath)