我需要使用热图来填充多边形。对于多边形源我使用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 :(得分:0)
只需将多边形设置为您想要的颜色即可:
ptchs=[]
for pij in xrange(len(prt)):
ptchs.append(Polygon(pts[par[pij]:par[pij+1]], alpha=1, color=your_color))
然后使用warg 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?
答案 1 :(得分:0)
我不熟悉用于读取矢量数据/多边形的shapefile API。我通常使用OGR来读取GIS矢量数据。每个多边形的颜色可以存储为每个要素的属性,也可以作为标量使用colourmap分配颜色,如此处所示。