2013-09-23 5 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 с Warg 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

I я не знаком с API шейпинга для чтения векторных данных/полигонов. Обычно я использую OGR для чтения векторных данных ГИС. Цвет на многоугольник может быть сохранен как атрибут для каждой функции или точно так же, как скаляр, которому присвоен цвет с помощью цветовой карты, как вы это делали здесь.

Смежные вопросы