波基映射问题

2024-05-05 20:40:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个静态博克地图。我读过一本书的国家将用一种颜色标记,其他国家将用不同的颜色标记。下面的代码试图实现此任务,但是,当我运行它时,地图不会显示

#_______IMPORTS_________

import geopandas as gpd
import pandas as pd
import os
from bokeh.io import output_notebook, show, output_file
from bokeh.plotting import figure
from bokeh.models import GeoJSONDataSource, LinearColorMapper, ColorBar
from bokeh.palettes import brewer#Input GeoJSON source that contains features for plotting.
from bokeh.sampledata.sample_geojson import geojson

#______ LOADING THE SHAPEFILE ______

shapefile = '~/Desktop/WorldBookMap/ne_110m_admin_0_countries/ne_110m_admin_0_countries.shp'

#______  SIMPLIFY COLUMN NAMES IN SHAPEFILE ______ 

gdf = gpd.read_file(shapefile)[['ADMIN', 'ADM0_A3', 'geometry']]
gdf.columns = ['country', 'country_code', 'geometry']
print(gdf.head())

#______ LOADING THE BOOK DATA (1 = READ,0=DID NOT READ) ______ 

datafile = '~/Desktop/BookStats.csv'
df = pd.read_csv(datafile, names = ['entity', 'code', 'read'], skiprows = 1)
print(df.head())

#______ CHLOROPLETH MAP ______ 
merged = gdf.merge(df, left_on = 'country_code', right_on = 'code')

#______ READING DATA TO JSON ______ 
import json
merged_json = json.loads(merged.to_json())
json_data = json.dumps(merged_json)

#______ VISUALIZING ______ 
geosource = GeoJSONDataSource(geojson=json_data)
palette = brewer['YlGnBu'][8]
palette = palette[::-1]
color_mapper = LinearColorMapper(palette = palette, low = 0, high = 1)
tick_labels = {0: '0%', 1: '100%'}
color_bar = ColorBar(color_mapper=color_mapper, label_standoff=8,width = 500, height = 20,
border_line_color=None,location = (0,0), orientation = 'horizontal', major_label_overrides = tick_labels)

p = figure(title = 'Books from around the world', plot_height = 600 , plot_width = 950, toolbar_location = None)
p.xgrid.grid_line_color = None
p.ygrid.grid_line_color = None
p.patches('xs','ys', source = geosource,fill_color = {'field' :'Read', 'transform' : color_mapper},
          line_color = 'black', line_width = 0.25, fill_alpha = 1)
p.add_layout(color_bar, 'below')

output_file("geojson.html")
show(p)

Tags: fromimportnonejsonoutputgeojsonlinebokeh