¿Por qué la visualización de mapas de Python Vincent no mapea datos de Data Frame?

Estoy usando la visualización del mapa de Python vincent con el uso de los ejemplos introductorios de este paquete. Yo trabajo en ipython notebook .

DataFrame pandas simples DataFrame con códigos FIPS de países (tomados de aquí ). Luego traté de mapear los datos de DataFrame con el mapa de vincent mediante estos códigos FIPS, pero la visualización resultante no logra colorear los países de ninguna manera . ¿Cómo puedo hacer que funcione?

 country_data_tmp = pd.DataFrame({'country_names' : np.array(['Argentina', 'Armenia', 'Australia', 'Austria']), 'country_FIPS' : np.array(['032', '051', '036', '040']), 'my_rate' : np.array([0.254, 0.3456, 0.26, 0.357])}) country_data_tmp.head() 

introduzca la descripción de la imagen aquí

 world_topo = r'world-countries.topo.json' geo_data = [{'name': 'countries', 'url': world_topo, 'feature': 'world-countries'}] vis = vincent.Map(data=country_data_tmp, geo_data=geo_data, scale=1100, data_bind='my_rate', data_key='country_FIPS', map_key={'counties': 'properties.FIPS'}) vis.display() 

introduzca la descripción de la imagen aquí

    No se muestran porque no has configurado la map_key correctamente. El archivo world_countries.topo.json identifica los países por un código de 3 letras, denominado id en ese archivo (esto corresponde al campo llamado alpha-3 en la página a la que se vinculó ). Puede ver esto si observa los datos sin procesar en ese archivo json .

    Además, establece 'name': 'countries' en geo_data , pero en map_key intenta referenciarlo como counties (tenga en cuenta la r falta). Es fácil cometer un error, ya que se trata de los counties en la página de ejemplo donde están mapeando los condados de EE. UU.

    Si cambia los nombres de las variables para que hagan referencia a los campos que no están vacíos, obtendrá un hermoso mapa, ya que country_alpha3 en su tabla de datos coincide con id en los countries variable JSON.

    NB Como está su código, solo se trazarán los países para los que tiene datos. Puede agregar una capa con todos los esquemas de país según el segundo ejemplo aquí, si quiere que todos estén delineados, pero solo aquellos con datos en color. He proporcionado cambios en el código para hacer eso en la segunda sección de código / salida a continuación.

    NB 2 Con sus valores actuales de my_rate el contraste de color no es muy notable. Pruébelo con [0,0.3,0.7,1.0] para convencerse de que los está coloreando de manera diferente.

    Código

     #Data setup bit - Input[1] from your notebook #Note new name for country code country_alpha3 import pandas as pd import numpy as np country_data_tmp = pd.DataFrame({'country_names' : np.array(['Argentina', 'Armenia', 'Australia', 'Austria']), 'country_alpha3' : np.array(['ARG','ARM','AUS','AUT']), 'my_rate' : np.array([0.254, 0.3456, 0.26, 0.357])}) country_data_tmp.head() #map drawing bit Input[2] from your notebook #Note the changes in variable names world_topo = r'world-countries.topo.json' geo_data = [{'name': 'countries', 'url': world_topo, 'feature': 'world-countries'}] vis = vincent.Map(data=country_data_tmp, geo_data=geo_data, scale=1100, data_bind='my_rate', data_key='country_alpha3', map_key={'countries': 'id'}) vis.display() 

    Salida

    Salida de script con datos de muestra.

    Código con capa de esquema más capa de datos (en color para aquellos con datos):

     #Replace input[2] with this to add a layer with outline only world_topo = r'world-countries.topo.json' geo_data = [{'name': 'countries', 'url': world_topo, 'feature': 'world-countries'}, {'name': 'countries_outline', 'url': world_topo, 'feature': 'world-countries'}] vis = vincent.Map(data=country_data_tmp, geo_data=geo_data, scale=100, data_bind='my_rate', data_key='country_alpha3', map_key={'countries': 'id'}) del vis.marks[1].properties.update vis.marks[1].properties.enter.stroke.value = '#000' vis.display() 

    Salida (capa de salida más capa de datos)

    Imagen con los países resaltados - aquellos con datos coloreados