我有许多多边形坐标,每个多边形区域都与一个分数值相关联。我试图通过类似热图的2D图来可视化这些多边形及其相关分数。我的代码能够绘制这样的东西,但是,我无法根据我为PatchCollection设置的颜色来计算如何显示色彩图。另外,我为Polygon对象指定了一个edgecolor,但它没有显示出来。我用于绘图的数据附有here。
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()
这是代码输出的图:
我已尝试使用ScalarMappable对象添加颜色栏,但收到错误TypeError: You must first set_array for mappable
:
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=0, vmax=1))
plt.colorbar(sm)
答案 0 :(得分:0)
听起来很有趣,但错误信息实际上已经告诉你解决方案。只需使用ScalarMappable
方法将数组设置为set_array
即可。该数组可以为空。
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()