大家!我想通过一个视频使用Bokeh在Google地图上创建圈子。有我的代码:
import pandas as pd
from bokeh.io import show, output_file
from bokeh.models import(GMapPlot,GMapOptions,ColumnDataSource,Circle,PanTool,WheelZoomTool,BoxSelectTool,DataRange1d)
df=pd.read_csv('bikes_October18.csv') #read data from the csv file
df1=pd.DataFrame({'stations':df.start_station_name,'lat':df.start_station_latitude,'long':df.start_station_longitude})
df2=df1.drop_duplicates(subset='stations')
df3=pd.concat([df.start_station_name,df.end_station_name],axis=0)
a=df3.value_counts()
df2['frequncy']=df2.stations.map(a)
GeoInfo=df2
map_options=GMapOptions(lat=55.95415,lng=-3.20277,map_type='roadmap',zoom=3)
api_key=Goole_APIKEY
plot=GMapPlot(x_range=DataRange1d(), y_range=DataRange1d(),
map_options=map_options,api_key=api_key)
plot.add_tool(PanTool(),WheelZoomTool(),BoxSelectTool())
baseline=GeoInfo['frequncy'].min()-1.0
scale=3
source=ColumnDataSource(data=dict(lat=GeoInfo['lat'].tolist(),
long=GeoInfo['long'].tolist(),
rad=[(i-baseline)/scale for i in GeoInfo['frequncy'].tolist()]))
circle=Circle(x="long",y='lat',size="rad",fill_color='orange',fill_alpha=0.3)
plot.add_glyph(source,circle)
output_file('Edinburgh_bike_stations.html')
show(plot)
但是,存在一个值错误,内容为“'x_range'的值无效,MapPlot范围只能是Range1d,而不是数据范围”。我不知道该如何纠正。有人能帮忙吗?顺便说一下,我不确定我是否正确使用了API密钥。我从Google获得了自己的API密钥,但没有将其存储为环境变量。我只是直接将其称为api_key =“我的键值”。我不确定是否可行。还有什么建议吗?非常感谢你!
答案 0 :(得分:0)
由于错误状态,DataRange1d
不能与GMapPlot
一起使用。这是因为与常规Bokeh图不同,Bokeh可以完全控制范围的开始/结束值,而Google Map图则不同。特别是,Google Maps绝对控制范围值的开始/结束,以便始终保留纵横比。这与DataRange1d
模型不兼容100%,这就是为什么GMapPlot
不允许使用它们。您应该配置Range1d
对象。
plot=GMapPlot(x_range=Range1d(), y_range=Range1d(),
map_options=map_options,api_key=api_key)
但是,实际上,如果您正在使用Bokejh的任何较新版本,则应使用较新的gmap
函数来为您解决所有这些问题。此处描述:
https://bokeh.pydata.org/en/latest/docs/user_guide/geo.html#google-maps