这是我的问题。
使用:
fig = plt.figure(figsize =(8,6))
ax = plt.gca()
map = Basemap(llcrnrlon=114.3,llcrnrlat=37.95,urcrnrlon=114.75,urcrnrlat=38.2)
map.readshapefile("xxx",'xxx',zorder =1,)
patches=[]
cs=plt.cm.Blues_r(np.arange(21)/21.)
for info, shape in zip(map.xxx_info, map.xxx):
x,y=zip(*shape)
patches.append( Polygon(np.array(shape), True) ) # facecolor= '#6582B3'
ax.add_collection(PatchCollection(patches, facecolor= cs,\
edgecolor='none', linewidths=1.5, zorder=2,alpha = 0.8))
http://i13.tietuku.com/a331edcbeec29d5e.png
但是,当我想描绘这四个不同区域的某些特征时(例如:人口; GDP )
### for example
pop = [1000,1500,2000,500] ## corresponding to 4 polygons.
如何为显示相对人口规模的每个多边形设置facecolor
。
另一方面,人口较高的地区的蓝色为
facecolor
,反之亦然。
我的项目有22个多边形(已上传here)和相应的功能
VALUE = np.array([6152.710436, 21077.95313, 1052.05006, 2891.89123, 5717.184961,
2431.608241, 502.12633, 28384.79976, 0., 73919.84013, 6242.307304,
1072.474419, 35222.73927, 146232.4488, 4703.720773, 4080.297812,
22897.91752, 2683.5972, 472.840926, 3367.341526,16628.64741 ,114564.1283 ])
norm = Normalize()
cmap = plt.get_cmap('Spectral_r')
norm = Normalize()
cs_set =pc.set_facecolor(cmap(norm(VALUE)))
ax.add_collection(pc)
http://i11.tietuku.com/256bce12e2716163.png
我的问题是如何根据VALUE添加颜色条?
我在答案中提到的post中尝试了这种方法,但它没有用。
cb = colorbar_index(ncolors=len(VALUE),cmap=cmap, shrink=0.5, labels=VALUE)
cb.ax.tick_params(labelsize=6)
http://i11.tietuku.com/fbfd19949c4ceddd.png
上图中的colorbar标签与真实数据不符?
如何解决这个问题?是否有更简单的方法来生成彩条?
答案 0 :(得分:0)
我找到了一个解决方案。感谢您post
如果有人有更微妙的方式,请在这里发帖!
### original
for info, shape in zip(map.shiqu_info, map.shiqu):
x,y=zip(*shape)
patches.append( Polygon(np.array(shape), True) )
pc = PatchCollection(patches, edgecolor='none', \
linewidths=1.5, zorder=2,alpha = 0.8)
## don't set facecolor here
## I add four sentences here!
cmap = plt.get_cmap('Blues')
norm = Normalize()
pop = np.array([1000,1500,2000,500])
pc.set_facecolor(cmap(norm(pop)))
ax.add_collection(pc)