Python 2.7 Matplotlib离散色条标签未正确放置

Python 2.7 Matplotlib离散色条标签未正确放置,python-2.7,matplotlib,colorbar,Python 2.7,Matplotlib,Colorbar,我只是在matplotlib中绘制图像,但colorbar中的标签没有正确放置。我在colorbar中放置了12个类,但它只显示了其中的一部分。我将感谢你的帮助 from PIL import Image from scipy import misc import scipy import pylab as pl import numpy as np from sklearn import svm from sklearn import neighbors import matplotlib.p

我只是在matplotlib中绘制图像,但colorbar中的标签没有正确放置。我在colorbar中放置了12个类,但它只显示了其中的一部分。我将感谢你的帮助

from PIL import Image
from scipy import misc
import scipy
import pylab as pl
import numpy as np
from sklearn import svm
from sklearn import neighbors
import matplotlib.pyplot as plt
import matplotlib as mpl

def plotimage(labels,image,imname):#input - array of labels and image of 1..n classes
cmap = mpl.colors.ListedColormap(['r', 'g', 'b', 'c','k','y','m','w','#FFFF00','#FF8C00','#FF8EFC','#962404'])#only 12 classes at present  
#need to create pallate and labels later out of this def
bounds = [0,1, 2, 3,4, 5,6,7,8,9,10,11,12,13]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
img = plt.imshow(image, cmap=cmap )
cbar = plt.colorbar(img, cmap=cmap)  #norm=norm, boundaries=bounds, ticks=bounds
cbar.ax.set_yticklabels(labels)
plt.gcf().canvas.set_window_title("Classification")
#imsave("expr1_im", image.reshape(image.shape[0]/256,256), cmap=cmap)
#savefig(imname)
plt.title(imname)
plt.show()

b_imgarray = np.loadtxt("PlotData2001_Solar/SVM2001PixelArray.csv", delimiter=',')

labels = ['D','F','A','G','R','I','BS','ABG','W','BG','COAG','BSMIX']

a = np.reshape(b_imgarray, (1500,1500))
c = 'SVmimage'
plotimage(labels,a,c)
错误放置的条形图图例的图像。正如你所见,我定义了12个标签,从'D'到'BSMIX',但它显示的是ABG。
imshow
通常将cmap的范围限制为图像中显示的值。要强制
imshow
使用cmap的所有值,请使用
vmin
vmax

img = plt.imshow(image, cmap=cmap, vmin=0, vmax=13)

非常感谢@plosner。。。我对它做了一点调整,效果很好

def plotimage(标签、图像、imname):#输入-标签数组和1..n类的图像
“颜色”列表的颜色地图(['r,“g”、“g”、“b”、“b”、“c”、“c”、“c”和“y”、“k”、“k”和“k”,“FFFFFF00'、“00FFFF00'、“00FFFF00 00,”以及“00FFFF00'、“00FFFF00'、、'c”、“g”、“w”和“w”,“以及”FF8FF8EFC’,“00FFDD,”以及“3333ED3'、“FF3333333FF00'、“FFFFFFFFFF00,”以及“FFFFFF00'、、“00FFFFFFFF00,”以及“FF00他们他们他们他们,”以及“FFFFFF00,”他们他们,”他们,”他们,”以及“FFFFFF00'33333333333333'、、、“ADE112’、“ADE112’、、“12’、“ADE112’、、、、、“12’、、、、、“两两两两两两两#00FF00',#00FFDD'#962404'#FF8EFC',#962404'
#以后需要使用此def创建pallate和标签
#cmap=mpl.colors.ListedColormap([r'、'g'、'b'、'c'、'm'、'k'、'y'、'w'、'7FFF00'、'FF8C00'、'FFFFFF00'、'FE6D06'、'6E6E6E'、'04B4AE')#目前只有8个类、'FF8EFC'、'FF0000'、'FF604'、'FF964'#
界限=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
norm=mpl.colors.BoundaryNorm(bounds,cmap.N)
打印cmap.N
img=plt.imshow(图像,cmap=cmap,vmin=1,vmax=20)
cbar=plt.colorbar(img,cmap=cmap,norm=norm,bounds=bounds,ticks=bounds)#norm=norm,bounds=bounds,ticks=bounds
cbar.ax.set_yticklabels(标签)
plt.gcf().canvas.set\u window\u title(“分类”)
#imsave(“expr1_im”,image.reformate(image.shape[0]/256256),cmap=cmap)
#savefig(imname)
产品名称(imname)

plt.show()
为了使标签在离散色条字段的中心对齐,必须定义固定数量的刻度(以避免子单位)并使用
clim()

例如,如果要在颜色栏中显示
N
离散级别:

cbar = plt.colorbar(ticks=range(N))
plt.clim(-0.5, N - 0.5)

这是一个老问题,但仍然很难找到正确的答案,而且上面的任何一个都不适合我。

下面的答案有用吗?有进展吗?是的@plosner。。。谢谢你的帮助。。我已经稍微调整了一下。