如何在散景中使用“ DataRange1D”?

时间:2018-11-30 18:42:36

标签: python bokeh

大家!我想通过一个视频使用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 =“我的键值”。我不确定是否可行。还有什么建议吗?非常感谢你!

1 个答案:

答案 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