3

我需要使用热图填充我的多边形。对于我使用的多边形来源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>。对此的任何帮助将不胜感激。

4

2 回答 2

0

只需将多边形设置为您想要的任何颜色:

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

然后PatchCollection使用 warg创建match_orginal

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

另请参阅为什么 matplotlib.PatchCollection 会弄乱补丁的颜色?

于 2013-09-23T15:11:05.217 回答
0

我不熟悉用于读取矢量数据/多边形的 shapefile API。我通常使用OGR来读取 GIS 矢量数据。每个多边形的颜色可以存储为每个要素的属性,也可以只是一个标量,使用颜色图分配颜色,就像您在此处所做的那样。

于 2013-09-24T06:13:27.343 回答