2016-08-10 3 views
2

Étant donné le fichier de forme disponible here: Je voudrais tracer l'ensemble spécifié de comtés ci-dessous avec des couleurs personnalisées; «bleu» pour les comtés de Wayne et de Washtenaw et «gris» pour les autres.GeoPandas, MatPlotLib Plot Couleurs personnalisées

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() 

Je préfère attribuer les couleurs comme une colonne dans la trame de données, puis les invoquer lors du traçage en quelque sorte. Est-ce possible?

MISE À JOUR

J'ai essayé le passage d'une liste et de traçage dans une boucle comme je le ferais avec un nuage de points, mais il ne semble pas fonctionner de la même manière que il trace juste comté séparée des cartes au lieu de tous ensemble dans une intrigue.

Voici ce que j'ai essayé:

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]) 

Merci à l'avance!

Répondre

3

Geopandas veut colorier votre carte selon les données de votre geopandas. Donc, le schéma de coloration le plus simple que vous pourriez utiliser est d'ajouter une colonne 'color' à votre base de données et de la remplir avec des valeurs basées sur la façon dont vous voulez que vos comtés soient colorés.

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

Peut-être que ce n'est pas la solution la plus élégante, mais cela devrait au moins expliquer le concept de la façon dont la fonction colormaps dans geopandas et vous obtenez l'intrigue que vous cherchez. Consultez également cette page du geopandas docs pour un petit plus d'infos sur la carte de coloriage.

+0

@Ianery merci beaucoup! C'est exactement ce dont j'avais besoin. –

+0

@Ianery: Question connexe ici: http://stackoverflow.com/questions/38899190/geopandas-label-polygons –

+0

@ DanceParty2 heureux que cela a fonctionné pour vous! – lanery