2017-02-28 8 views
1

私は多くのポリゴン座標を持ち、各ポリゴン領域はスコア値に関連付けられています。ヒートマップのような2Dプロットを使って、これらのポリゴンとその関連スコアを視覚化しようとしています。私のコードでは、このようなプロットが可能ですが、PatchCollectionに設定した色に基づいてカラーマップを表示する方法がわかりません。また、Polygonオブジェクトのエッジカラーを指定しましたが、表示されません。プロットに使用しているデータはhereです。カラーバーの作成とポリゴンパッチコレクションのエッジグリッドの設定Matplotlib

import shapely 
import pickle as pkl 
tiles = pkl.load(open("polygons.pkl",'r')) 
area_lst=[] 
for tile in tiles: 
    area_lst.append(shapely.geometry.Polygon(tile).area) 
sorted_ascend_tile_by_size= list(np.array(tiles)[np.argsort(area_lst)[::-1]]) 
gammas=np.random.random(len(tiles)) 
from matplotlib.collections import PatchCollection 
from matplotlib.patches import Polygon 

fig,ax = plt.subplots(1) 
patches = [] 
cmap = plt.get_cmap('cool') 
colors = cmap(gammas) 

for tile_idx in range(len(tiles)): 
    polygon = Polygon(sorted_ascend_tile_by_size[tile_idx],closed=True,alpha=0.8,linewidth=1,edgecolor='black',fill=False,zorder=1) 
    patches.append(polygon) 

collection = PatchCollection(patches) 
pcollection = ax.add_collection(collection) 
collection.set_color(colors) 

ax.autoscale_view() 

これは、プロット、そのコードの出力である:

enter image description here

私はScalarMappableオブジェクトを使用して、カラーバーを追加しようとしましたが、私はエラーTypeError: You must first set_array for mappableを得る:

​​

答えて

0

それは聞こえるほど面白いですが、エラーメッセージが実際にあなたに解決策を教えてくれます。 set_arrayメソッドを使用して、配列をScalarMappableに設定するだけです。配列は空にすることができます。

import matplotlib.pyplot as plt 
sm = plt.cm.ScalarMappable(cmap="jet", norm=plt.Normalize(vmin=0, vmax=1)) 
sm.set_array([]) 
plt.colorbar(sm) 
plt.show() 
関連する問題