2013-09-23 144 views
2

我需要使用热图填充我的多边形。对于多边形的来源,我使用shapefile。 这是我的代码:通过热图填充多边形

import shapefile 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.patches as patches 
import matplotlib.cm as mcm 
import matplotlib.image as mpimg 
from matplotlib.patches import Polygon 
from matplotlib.collections import PatchCollection 
import pylab as plb 


fig  = plt.figure() 
ax  = fig.add_subplot(111) 
ax.set_frame_on(False) 

sf = shapefile.Reader("./data/boundary-polygon") 
recs = sf.records() 
shapes = sf.shapes() 
print shapes[1].__dict__ 
Nshp = len(shapes) 
cns  = [] 
for nshp in xrange(Nshp): 
    cns.append(recs[nshp][1]) 
cns = np.array(cns) 
cm = mcm.get_cmap('Dark2') 
cccol = cm(1.*np.arange(Nshp)/Nshp) 
# facecolor=cccol[nshp,:], 

for nshp in xrange(Nshp): 
    ptchs = [] 
    pts  = np.array(shapes[nshp].points) 
    prt  = shapes[nshp].parts 
    par  = list(prt) + [pts.shape[0]] 
    for pij in xrange(len(prt)): 
     ptchs.append(Polygon(pts[par[pij]:par[pij+1]], alpha=1)) 
    ax.add_collection(PatchCollection(ptchs,facecolors=((1, 1, 1, 1),),alpha=0.1 ,linewidths=1)) 
ax.set_xlim(54,67) 
ax.set_ylim(50,57) 

我想改变facecolors=((1, 1, 1, 1),)facecolors=<image_of_my_heat_map>。任何有关这方面的帮助将深受赞赏。

+0

作为一个附注,如果你的代码更容易阅读,你会得到更好的答案。我认为你的问题可以降低到<10 LOC并且随机提供数据,以便任何人都可以复制/粘贴它来测试。 – tacaswell

回答

0

刚刚成立的多边形是你想他们是什么颜色:

ptchs=[] 
for pij in xrange(len(prt)): 
    ptchs.append(Polygon(pts[par[pij]:par[pij+1]], alpha=1, color=your_color)) 

,然后创建PatchCollection与座狼match_orginal

ax.add_collection(PatchCollection(ptchs, match_orginal=True, alpha=0.1 ,linewidths=1)) 

另见Why is matplotlib.PatchCollection messing with color of the patches?

0

我我不熟悉用于读取矢量数据/多边形的shapefile API。我通常使用OGR来读取GIS矢量数据。每个多边形的颜色可以作为每个特征的属性存储,或者像使用颜色映射为颜色指定颜色的标量一样存储,就像您在此处所做的一样。