0

Vincent で影付きの世界地図を描画しようとしています (ここのマップ データ バインディング セクションの郡の例に似ています)。私のコードはエラーをスローしませんが、無地のカラー マップを生成します (つまり、すべての国が青色です)。

各国を説明する主題データがあります (国は 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 コードの 4 つが -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 の値に基づく主題の陰影がありません。

4

1 に答える 1

0

これを map_key に使用する必要があります:

map_key={'countries':'id'}

于 2015-03-13T08:53:40.700 に答える