【发布时间】:2021-10-20 17:53:06
【问题描述】:
我是散景图的新手,我正在尝试使用滑块绘制地图,但它没有更新。
我尝试了很多方法,但仍然没有更新剧情。
我正在使用散景服务器和非地理图我已经掌握了...
我正在做的是:
def get_dataset(dataframe,column,geometry_column,val):
g = geodataframe[geodataframe[column] == val]
g_gdf = gpd.GeoDataFrame(g, geometry=geometry_column)
g_gdf.crs = 'EPSG:3857'
return g_gdf
(此函数接收数据帧并返回按时间值过滤的地理数据帧
def plot_area(geodataframe ,title_name,w ,h ,hovertool=None, tile = None, cmp_colum = None ,palette_name = None,
cmp = False,ax =False):
from bokeh.plotting import figure
from bokeh.tile_providers import get_provider
from bokeh.models import GeoJSONDataSource,ColumnDataSource,ColorBar,BasicTicker,LinearColorMapper
poligonos = GeoJSONDataSource(geojson=geodataframe.to_json())
tile_provider = get_provider(tile)
p = figure(title=title_name,plot_width=w, plot_height=h,tooltips=hovertool)
p.add_tile(tile_provider)
p.axis.visible = ax
if cmp:
color_mapper = LinearColorMapper(palette = palette_name , low = geodataframe[cmp_colum].min(),
high = geodataframe[cmp_colum].max())
color_bar = ColorBar(color_mapper=color_mapper, ticker=BasicTicker(),location=(0,0),
label_standoff=12)
p.patches('xs','ys', source=poligonos, fill_alpha=1, line_width=0.5, line_color='black',
fill_color={'field' :cmp_colum, 'transform': color_mapper})
p.add_layout(color_bar, 'left')
else :
pass
return p
这个函数绘制一个区域。
所以...
from bokeh.application import Application
from bokeh.application.handlers import FunctionHandler
from bokeh.models.widgets import DataTable,Paragraph
from bokeh.layouts import row, widgetbox
from bokeh.layouts import layout
from bokeh.models.widgets import Slider
import panel as pn
from bokeh.io import curdoc
from bokeh.io import show
g = get_dataset(precipitacao_por_bacia,'datahora','st_astext',dias[0])
g.reset_index(drop=True,inplace=True)
g['datahora'] = g['datahora'].apply(lambda x: str(x))
p = plot_area(g ,'Precipitação ',w = 500 ,h = 500, hovertool=[('Bacia','@bacia_nome'),
('precipitação','@val')],tile = 'CARTODBPOSITRON_RETINA', cmp_colum = 'val' ,
palette_name = 'Viridis256',cmp = True,ax =False)
def update_map(attrname, old, new):
g = get_dataset(precipitacao_por_bacia,'datahora','st_astext',dias[slider.value])
g.reset_index(drop=True,inplace=True)
plot_area(g ,'Precipitação ',w = 500 ,h = 500, hovertool=[('Bacia','@bacia_nome'),
('precipitação','@val')],tile = 'CARTODBPOSITRON_RETINA', cmp_colum = 'val' ,
palette_name = 'Viridis256',cmp = True,ax =False)
g['datahora'] = g['datahora'].apply(lambda x: str(x))
output.text= str(g['datahora'][0])
slider = Slider(title="Day", value=0, start=0, end=409)
output=Paragraph()[enter image description here][1]
slider.on_change('value', update_map)
layout = row(p,widgetbox(slider,output))
curdoc().add_root(layout)
【问题讨论】:
标签: python pandas bokeh pandas-bokeh