【问题标题】:Unable to plot chloreopath worldmap with Vincent in iPython无法在 iPython 中使用 Vincent 绘制等值线世界地图
【发布时间】:2015-02-16 13:06:28
【问题描述】:

尝试在文森特绘制阴影世界地图(类似于地图数据绑定部分here 中的县示例)。我的代码不会抛出错误,但会生成纯色地图(即所有国家/地区都是蓝色的)。

我有描述每个国家的主题数据(国家被标识为 iso3 代码)。我的数据的玩具版本是:

import pandas as pd
import vincent
import numpy as np

iso3 = ['USA','CHN','BRA']
x = [50,100,150]

data = pd.DataFrame({'iso3': iso3, 'x': x})

我从 vincent 地图存储库中剥离了世界国家地图中的 id 代码,并创建了一个数据框,将数据中的信息与世界地图 json 中的 id 代码(即 iso3 代码)相匹配:

import json
with open('world-countries.topo.json', 'r') as f:
get_id = json.load(f)

new_geoms = []
for geom in get_id['objects']['world-countries']['geometries']:
    new_geoms.append(geom['id'])

amounts = np.zeros((shape(new_geoms)[0]))
j=0
for i in list(new_geoms):
    this_data = data[data.iso3==i]
    if shape(this_data)[0]>0:
        amounts[j] = np.asscalar(this_data['x'])
    else:
        amounts[j] = 0
    j=j+1

map_data = pd.DataFrame({'iso3' : new_geoms, 'x': amounts})

map_data 看起来不错,有 177 个条目(等于世界国家/地区中多边形(国家)的数量),x 没有 NaN 并且匹配它们应该在的位置,尽管其中四个 id 代码等于 -99(这些是像科索沃这样没有正式 iso3 代码的地方)。最后,我使用 Vincent 绘制数据:

world_topo = r'world-countries.topo.json'
geo_data = [{'name': 'countries',
             'url': world_topo,
            'feature': 'world-countries'}]

mapx = vincent.Map(data=map_data, geo_data=geo_data, projection='mercator',  scale=150, 
              data_bind='x', data_key='iso3',
              map_key={'world-countries':'geometries.id'}, brew='YlGnBu')
mapx.marks[0].properties.enter.stroke_opacity = vincent.ValueRef(value=.25)
mapx.display()

同样,这段代码运行没有错误,但地图没有基于 x 值的主题阴影。

【问题讨论】:

    标签: python ipython vega vincent


    【解决方案1】:

    map_key需要用到这个:

    map_key={'countries':'id'}

    【讨论】:

      猜你喜欢
      • 2014-07-19
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多