I am drawing a confusion matrix using matplotlib:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
conf_arr_hs = [[90, 74],
[33, 131]]
norm_conf_hs = []
for i in conf_arr_hs:
a = 0
tmp_arr = []
a = sum(i, 0)
for j in i:
tmp_arr.append(float(j)/float(a))
norm_conf_hs.append(tmp_arr)
confmatmap=cm.binary
fig = plt.figure()
plt.clf()
ax = fig.add_subplot(111)
res = ax.imshow(np.array(norm_conf_hs), cmap=confmatmap, interpolation='nearest')
for x in xrange(2):
for y in xrange(2):
textcolor = 'black'
if norm_conf_hs[x][y] > 0.5:
textcolor = 'white'
ax.annotate("%0.2f"%norm_conf_hs[x][y], xy=(y, x), horizontalalignment='center', verticalalignment='center', color=textcolor)]
But matplotlib seems to auto-resize the color change range: the bottom left grid should be light gray since its corresponding value is 0.2 instead of 0.0. Similarly, bottom right grid should be dark gray since it is 0.8 instead of 1.
I think I miss the step of appointing the dynamic range for color mapping. I did some research into the documentation of matplotlib but did not find what I want.
To explicitly set the color map range, you want to use the set_clim
command:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
plt.ion()
conf_arr_hs = [[90, 74],
[33, 131]]
norm_conf_hs = []
for i in conf_arr_hs:
a = 0
tmp_arr = []
a = sum(i, 0)
for j in i:
tmp_arr.append(float(j)/float(a))
norm_conf_hs.append(tmp_arr)
confmatmap=plt.cm.binary
fig = plt.figure()
plt.clf()
ax = fig.add_subplot(111)
res = ax.imshow(np.array(norm_conf_hs), cmap=confmatmap, interpolation='nearest')
res.set_clim(0,1) # set the limits for your color map
for x in xrange(2):
for y in xrange(2):
textcolor = 'black'
if norm_conf_hs[x][y] > 0.5:
textcolor = 'white'
ax.annotate("%0.2f"%norm_conf_hs[x][y], xy=(y, x), horizontalalignment='center', verticalalignment='center', color=textcolor)
check more our here: http://matplotlib.org/api/cm_api.html