状态颜色的Basemap Colorbar图例

2024-04-29 08:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基本地图地图,加载到美国各州的形状文件中,对于每个州,我将某种颜色映射到该州的形状的多边形上,然后将其添加到绘图中。添加这些多边形和颜色是成功的,但我的问题是,我想要一个图例,显示之间的最大颜色和最小颜色之间的梯度,但我似乎不知道如何。colorbar()方法需要一个可映射的,对于我的示例,我不确定是否可能实现,因为我使用多边形而不是imshow()或等高线为地图着色。下面是我写的代码。在

mapAx.set_title("# of votes for Trump")

mapVotes = Basemap(llcrnrlon=-119,llcrnrlat=22,urcrnrlon=-64,urcrnrlat=49,
        projection='lcc',lat_1=33,lat_2=45,lon_0=-95)     
mapVotes.readshapefile('states', name = 'states', drawbounds=True)

colorVotes = plt.get_cmap('Blues')

trump = {
'New Hampshire': 100406,
'Iowa': 45427,
'South Carolina' : 239851,
'Nevada' : 34531}

state_names = []
for shape_dict in mapVotes.states_info:
    state_names.append(shape_dict['STATE_NAME'])


for state, value in trump.items():
    #print("{} {}".format(state, value)
    try:
        seg = mapVotes.states[state_names.index('{}'.format(state))]
        color = colorVotes(value/float(trump[max(trump)]))
        poly= Polygon(seg, facecolor=color, edgecolor=color)
        mapAx.add_patch(poly)
    except ValueError:
        pass

plt.show()

Tags: fornamesvalue颜色地图多边形color形状
1条回答
网友
1楼 · 发布于 2024-04-29 08:31:52

patch_collection的api示例演示了如何执行colorbar。本质上,您将所有补丁添加到一个列表中,然后将其传递到PatchCollection,后者返回scalermappable。在您的具体案例中:

#empty lists for colors and polygons
colors = []
patches = []

for state, value in trump.items():
#print("{} {}".format(state, value)
try:
    seg = mapVotes.states[state_names.index('{}'.format(state))]
    color = colorVotes(value/float(trump[max(trump)]))
    colors.append(color) # add colors to colors list
    poly = Polygon(seg, facecolor=color, edgecolor=color)
    patches.append(poly) #add polygon to patches list
    mapAx.add_patch(poly)
except ValueError:
    pass

#new code
#patches collection is a scalermappable
p = PatchCollection(patches, cmap=colorVotes)
p.set_array(np.array(colors))
cb = fig.colorbar(p)

然后修改cb以显示正确的值。或者根据您的配色方案创建一个mcolor规范,并将其传递到PatchCollection或colorbar中。但是上面的代码产生了: enter image description here

相关问题 更多 >