我正在使用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)]
但matplotlib似乎会自动调整颜色变化范围:左下方网格应为浅灰色,因为其对应值为0.2而不是0.0.同样,右下方网格应为深灰色,因为它是0.8而不是1.
我想我错过了任命颜色映射动态范围的步骤.我对matplotlib的文档进行了一些研究,但没有找到我想要的东西.
最佳答案 要显式设置颜色映射范围,您需要使用set_clim命令:
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)
点击这里查看更多信息:http://matplotlib.org/api/cm_api.html