Python Basemap-状态颜色的颜色栏图例

Python Basemap-状态颜色的颜色栏图例,python,matplotlib,matplotlib-basemap,Python,Matplotlib,Matplotlib Basemap,我有一个基本地图,它加载在美国各州的一个形状文件中,对于每个州,我都将一种特定的颜色映射到一个多边形,该多边形是该州的形状,然后将其添加到绘图中。添加这些多边形和颜色是成功的,但我的问题是,我想要一个图例,显示最大颜色和最小颜色之间的渐变,但我似乎不知道如何添加。colorbar()方法需要一个可映射的,我不确定在我的示例中是否可行,因为我使用多边形来为地图上色,而不是imshow()或轮廓。下面是我写的代码 mapAx.set_title("# of votes for Trump") ma

我有一个基本地图,它加载在美国各州的一个形状文件中,对于每个州,我都将一种特定的颜色映射到一个多边形,该多边形是该州的形状,然后将其添加到绘图中。添加这些多边形和颜色是成功的,但我的问题是,我想要一个图例,显示最大颜色和最小颜色之间的渐变,但我似乎不知道如何添加。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()
的api示例演示了如何创建颜色栏。本质上,您将所有补丁添加到一个列表中,然后将其传递到PatchCollection,PatchCollection返回一个ScalerMapable。在您的具体情况下:

#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中。但上述代码产生: 的api示例演示了如何创建颜色条。本质上,您将所有补丁添加到一个列表中,然后将其传递到PatchCollection,PatchCollection返回一个ScalerMapable。在您的具体情况下:

#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中。但上述代码产生:

您能提供一个指向shapefile的链接,以便我可以重新创建您的代码吗?抱歉,耽搁了!是从哪里下载我的shapefile的?你能提供一个指向shapefile的链接吗?这样我就可以重新创建你的代码了?很抱歉耽搁了!是我下载shapefile的地方