Python 具有3个y轴的Bokeh服务器不';t绘图,但对2个y轴绘图。为什么?
我的目标是在多个y轴(不同范围)上绘制实时数据。以下代码使用2个y轴工作,但当我添加第3个y轴时,浏览器为空。早期使用4个y轴的基本bokeh绘图工作正常,但此服务器版本不工作。我不知道我犯了什么错误,请指导我 以下代码绘制2个临时点,然后绘制第3个永久点。使用ColumnDataSource中的“补丁”和“流”来实现这一点Python 具有3个y轴的Bokeh服务器不';t绘图,但对2个y轴绘图。为什么?,python,plot,bokeh,multiple-axes,Python,Plot,Bokeh,Multiple Axes,我的目标是在多个y轴(不同范围)上绘制实时数据。以下代码使用2个y轴工作,但当我添加第3个y轴时,浏览器为空。早期使用4个y轴的基本bokeh绘图工作正常,但此服务器版本不工作。我不知道我犯了什么错误,请指导我 以下代码绘制2个临时点,然后绘制第3个永久点。使用ColumnDataSource中的“补丁”和“流”来实现这一点 from bokeh.io import curdoc from bokeh.models import ColumnDataSource from bokeh.plott
from bokeh.io import curdoc
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.models import LinearAxis, Range1d
import numpy as np
def plotcharts(source,x,a,b,c):
fig=figure(y_range=(0, 500))
fig.circle(source=source, x=x,y=a,size=12,color='red')
fig.extra_y_ranges = {"foo1": Range1d(start=0, end=50)}
fig.circle(source=source,x=x, y=b, size=12, color="blue",
y_range_name="foo1")
fig.add_layout(LinearAxis(y_range_name="foo1"), 'left')
# configure 3rd axis
fig.extra_y_ranges = {"foo2": Range1d(start=0, end=25)}
fig.circle(source=source, x=x, y=c, color="magenta",
y_range_name="foo2")
fig.add_layout(LinearAxis(y_range_name="foo2"), 'right')
return fig
count=(-1)
dct=dict(x=[],a=[],b=[],c=[])
#Just a and b work fine but when 3rd axis c was added it doesnt !
source=ColumnDataSource(dct)
fig=plotcharts(source,'x','a','b','c') #c==3rd axis
def update_data():
global count
count=count+1
y1 = np.random.randint(low=0, high=500)
y2 = np.random.randint(low=0, high=50)
y3 = np.random.randint(low=0, high=25) #y3==3rd axis
if count%3==0:
new_data = {
'x': [count/3],
'a': [y1],
'b': [y2],
'c': [y3] #c==3rd axis
}
source.stream(new_data,rollover=20)
else:
l = len(df['a'])
new_data = {
'a': [(l - 1,y1)],
'b': [(l - 1, y2)],
'c': [(l - 1, y3)] #c==3rd axis
}
source.patch(new_data)
curdoc().add_root(fig)
curdoc().add_periodic_callback(update_data,1000)
您的代码中有以下两行:
fig.extra_y_ranges = {"foo1": Range1d(start=0, end=50)}
[...]
fig.extra_y_ranges = {"foo2": Range1d(start=0, end=25)}
Bokeh并没有尝试在设置这些字段时使用一些特殊的魔法,所以使用后一个语句,您只需覆盖前一个语句。相反,您应该只写一行:
fig.extra_y_ranges = {"foo1": Range1d(start=0, end=50), "foo2": Range1d(start=0, end=25)}