使用 matplotlib 底图绘制形状文件及其功能



这是我的问题。

  • 由四个多边形组成的形状文件就是一个例子

用:

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

但是当我想描绘这四个不同区域的某些特征时(例如:人口;国内生产总值

### for example
pop = [1000,1500,2000,500] ## corresponding to 4 polygons. 

如何设置显示相对人口大小的每个面的facecolor

换句话说,人口众多的地区以深蓝色作为其facecolor反之亦然

更新

我的项目有 22 个多边形(在此处上传)和相应的要素

 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

我的问题是如何根据值添加颜色条?

我在答案中提到的帖子中尝试了该方法,但它不起作用。

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

上图的色条标签与真实数据不符?

如何解决这个问题? 有没有更简单的方法来生成颜色条?

我已经想出了一个解决方案。感谢这篇文章

如果有人有更微妙的方式,请在这里发帖!

### 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)       

http://i11.tietuku.com/0a07095f88ba17ab.png

相关内容

  • 没有找到相关文章

最新更新