2016-08-10 236 views
2

鉴于可用的形状文件here: 我想用自定义颜色绘制下面指定的一组县; Wayne和Washtenaw县的'blue',其他县的'gray'。GeoPandas,MatPlotLib绘制自定义颜色

import geopandas as gpd 
import matplotlib.pyplot as plt 
%matplotlib inline 

shpfile=<Path to unzipped .shp file referenced and linked above> 
c=gpd.read_file(shpfile) 
c=c.loc[c['GEOID'].isin(['26161','26093','26049','26091','26075','26125','26163','26099','26115','26065'])] 
c.plot() 

我宁愿先将颜色指定为数据框中的列,然后在绘图时调用它们。这可能吗?

UPDATE

我试图传递一个列表,如我所用散点图在一个循环绘制,但它似乎并没有相同的方式工作,因为它只是单独绘制地图县代替所有这些都集中在一个情节中。

这里是我的尝试:

color=['b','b','b','b','b','c','c','c','c','c'] 
for i in range(10): 
    c.iloc[i:i+1].plot(c='white',linewidth=.5,color=color[i]) 

提前感谢!

回答

3

Geopandas想根据您的geopandasdataframe中的数据着色您的地图。因此,您可以使用的最简单的着色方案是将'color'列添加到您的数据框中,并根据您希望您的县的着色情况填充一些值。

import numpy as np 
import geopandas as gpd 
import matplotlib.pyplot as plt 
from matplotlib.colors import LinearSegmentedColormap 

shpfile = 'cb_2015_us_county_20m.shp' 
c = gpd.read_file(shpfile) 
c = c.loc[c['GEOID'].isin(['26161','26093','26049','26091','26075', 
          '26125','26163','26099','26115','26065'])] 

c['color'] = np.zeros(len(c)) 
# 23 is index for Washtenaw county and 1992 is index for Wayne county 
c.ix[23, 'color'] = 1.0 
c.ix[1992, 'color'] = 1.0 

# create simple linear colormap that maps grey to blue 
cmap = LinearSegmentedColormap.from_list(
    'mycmap', [(0, 'grey'), (1, 'blue')]) 

c.plot(column='color', cmap=cmap) 

enter image description here

也许不是最完美的解决方案,但至少应该说明的是如何在色彩映射功能geopandas的概念,让你你正在寻找的情节。同时查看geopandas docs的这一页有关地图着色的更多信息。

+0

@Ianery非常感谢你!这正是我需要的。 –

+0

@Ianery:相关的问题在这里:http://stackoverflow.com/questions/38899190/geopandas-label-polygons –

+0

@ DanceParty2很高兴它为你工作! – lanery

相关问题