离散的pyplot散布colobar

时间:2016-01-08 00:53:06

标签: python matplotlib ipython-notebook

我正在创建一个带有颜色条的散点图

plt.scatter(X, Y, c=Z)
plt.colorbar()
plt.show()
plt.close()

其中X和Y是浮点数组,Z是整数数组。 即使Z是整数数组(此处为1-14),颜色条也会显示浮点数。 enter image description here

如何显示离散色条1-14?

我发现了一些试图回答类似问题的问题here,但我不明白答案(包含一些使0为灰色的并发症)足以应用它。

2 个答案:

答案 0 :(得分:3)

查看关联问题的the second answer。如果您在调用scatter之前将您的colourmap离散化,它将自动按您的意愿运行:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

n = 14
X = np.random.rand(20)
Y = np.random.rand(20)
Z = np.random.randint(low=0,high=n,size=X.shape)

plt.figure()
plt.scatter(X,Y,c=Z,cmap=cm.hot)
plt.colorbar()

plt.figure()
plt.scatter(X,Y,c=Z,cmap=cm.get_cmap('hot',n))
plt.colorbar()

比较结果:

smooth discretized

请注意,默认的colourmap是jet。但只有viridis才会starting from version 2.0作为新的(和精彩的)默认值。{/ p>

如果困扰您的是数字是彩色条上的浮点数,您可以在其中设置手动ticks,无论颜色的离散化如何:

plt.figure()
plt.scatter(X,Y,c=Z,cmap=cm.jet)
plt.colorbar(ticks=np.unique(Z))
#or
#plt.colorbar(ticks=range(Z.min(),Z.max()+1))

结果:

integer ticks

请注意,由于我使用了一些随机生成的点,并非Z中存在每个数字,因此unique可能不是最佳方法(请参见上图中缺少的刻度)。这就是为什么我还添加了基于min/max的解决方案。您可以根据实际应用定制您的需求限制。

答案 1 :(得分:0)

这是我的土地使用类型的离散颜色栏,它看起来像你的工作,因为Z值也是1-14的整数数组。

我的方法

  

创建从here

手动学习的色彩映射和色条标签

我的代码

cMap = ListedColormap(['white', '#8dd3c7','#ffffb3','#bebada',  \               
                       '#b2182b','#80b1d3','#fdb462','#b3de69','#6a3d9a',\
                       '#b2df8a', '#1f78b4', '#ccebc5','#ffed6f'])

## If you want to use the colormap from plt.cm..., you can use(take 'jet' for example) 
cMap = plt.cm.get_cmap("jet",lut=13)  

### here you can change your data in    
lulc = plt.pcolormesh(lulc,cmap = cMap,alpha = 0.7)   

z_range = np.linspace(1,14,14)
list = z_range.astype('S10')

k = -0.05
for i in range(0,13,1):
    k = k + 1/13.0
   ax.annotate(list[i],xycoords='axes fraction',xy=(1.12,k),fontsize = 14, \
               fontstyle = 'italic',zorder =3)

cbar = plt.colorbar(lulc,ticks = [ ])
for label in cbar.ax.yaxis.get_ticklabels()[::-1]:
    label.set_visible(False)    

我的结果

http://i4.tietuku.com/7a7c522b918862ba.png

希望它可以提供帮助!