使用Python Bokeh从同一数据集中绘制多行

问题描述

是否有可能使用bokeh获得诸如sample1的图? Sample1是使用Matplotlib创建的。我的目标是在地图上绘制多条彼此分离的短线。但是这些线共享相同的来源,而与内部的来源只是不同的部分。

我已经写了一个小脚本,但是效果不是很好(请参阅Sample2)。我的skript在地图上绘制了3条不同的线。不幸的是,这些线是链接在一起的。

在Matplotlib中,它用于for循环。但是在bokeh中,我尝试使用滑块交互式地选择我希望查看的数据。

Sample1

样本1

Sample2

样本2

这是我的代码

from bokeh.io import output_file,show
from bokeh.models import ColumnDataSource,GMapOptions,CustomJS
from bokeh.plotting import gmap,ColumnDataSource,figure
from bokeh.layouts import column,row
from bokeh.models.widgets import RangeSlider 
import numpy as np

# data set
lon = [[48.7886,48.7887,48.7888,48.7889,48.789],[48.7876,48.7877,48.78878,48.7879,48.787],[48.7866,48.7867,48.7868,48.7869,48.786]]
lat = [[8.92,8.921,8.922,8.923,8.924],[8.91,8.911,8.912,8.913,8.914],[8.90,8.901,8.902,8.903,8.904]]

# convert data set in 1D for callback function (JS slice)
lat1D = []
lon1D = []
for k in range(len(lon)):
    lat1D += lat[k]
    lon1D += lon[k]

# define source and map
source = ColumnDataSource(data = {'x': lon1D,'y': lat1D})

map_options = GMapOptions(lat=48.7886,lng=8.92,map_type="satellite",zoom=13)

p = gmap("MY_API_KEY",map_options,title="Trajectory Map")

# plot lines on map
# for loops do not work like in matplotlib...
for j in range(0,len(lon1D),len(lon)):
    for i in range(j,j + len(lon)):
        p.line('y','x',source=source,line_width=0.4)

# slider to limit plotted data
range_slider = RangeSlider(title="Data Range Slider: ",start=0,end=len(lon1D),value=(0,len(lon1D)),step=1) 

callback = CustomJS(args=dict(source=source,slider=range_slider,long=lon1D,lati=lat1D,lenght=len(lon)),code="""
    var data = source.data;
    const start = slider.value[0];
    const end = slider.value[1];
    
    data['x'] = long.slice(start,end)
    data['y'] = lati.slice(start,end)

    source.change.emit();
    """)

range_slider.js_on_change('value',callback)

# Layout to plot and output
layout = row(
    p,range_slider)

output_file("diag_plot_bike_data.html")

show(layout)

解决方法

任何可以用Matplotlib绘制的图形,都可以用Bokeh绘制的图形。有时代码更多,有时代码更少。

您的代码中发生了太多事情,所以我将以纯文本形式回答:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...