Как использовать «DataRange1D» в Bokeh? - PullRequest
0 голосов
/ 30 ноября 2018

все!Я хочу следить за видео, чтобы создать круги на карте Google с помощью Bokeh.Вот мой код:

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.Я получил свой собственный ключ API от Google, но я не хранил его как переменную среды.Я просто называю это как api_key = 'значение моего ключа'.Я не уверен, что это работает.Любой совет по этому поводу?Большое спасибо!

1 Ответ

0 голосов
/ 01 декабря 2018

Поскольку состояния ошибки, DataRange1d не может использоваться с GMapPlot.Это связано с тем, что, в отличие от обычных графиков Боке, где Боке полностью контролирует начальные / конечные значения диапазона, графики Google Map отличаются.В частности, карты Google полностью контролируют начало / конец значений диапазона, чтобы всегда сохранять соотношение сторон.Это на 100% несовместимо с DataRange1d моделями, поэтому они запрещены для 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

...