这是我第一次尝试构建世界地图并使用GeoJSONDataSource。 我试图根据国家在其属性中的“大陆”值为贴片指定不同的颜色。
是否可以按以下方式执行某些操作:
p.patches(... fill_color= colours['continent'])
其中colors是以大陆名称为键的字典,'continent'是JSON数据中国家/地区的大陆值。
这是我目前的代码:
from bokeh.plotting import figure, output_file, show
from bokeh.io import output_notebook
import numpy as np
from bokeh.models import GeoJSONDataSource
with open('data.geojson') as c:
countries = (c.read())
geo_source = GeoJSONDataSource(geojson=countries)
colours = {'Europe': 'red', 'Oceania': 'purple', 'Asia': 'blue', 'Africa': 'pink', "South America": 'green', "Antarctica": 'yellow', 'North America': 'orange', "Seven seas (open ocean)": 'red'}
p = figure(height=450, width=900, lod_threshold=1)
p.patches(xs='xs', ys='ys', fill_color='blue', source=geo_source)
p.multi_line(xs='xs', ys='ys', line_color='white', line_width=0.1, source=geo_source)
show(p)
修改
我尝试通过将补丁中的fill_color属性设置为颜色数组来尝试稍微接近这一点:
a =[colours[c['properties']['continent']] for c in json.loads(countries)['features']]
在Jupyter Notebook中运行此代码时,会出现以下错误:
添加输出的Javascript错误!错误:尝试检索属性 数组不存在的字段'fill_color'查看您的浏览器Javascript 控制台了解更多详情。
答案 0 :(得分:1)
我执行此功能是为了将geoJSON与另一个JSON中提供的数据对齐。
我的geoJSON拥有州的国际代码(ISO 3166-2);我的数据加入了它。
for state in geo['features']:
codState = str(state['properties']['ISO_3166-2'])
if codState in data.keys():
if data.values() != 0:
state['properties']['data'] = data[codState]
dataJson = json.dumps(geo,ensure_ascii=True)
return dataJson