具有 3 个 y 轴的散景服务器不绘制,但是 2 y axes.Why?
Bokeh Server with 3 y axes doesn't plot,but does for 2 y axes.Why?
我的 objective 是在多个 y 轴(不同范围)上绘制实时数据。以下代码适用于 2 个 y 轴,但当我添加第 3 个时,浏览器只是 blank.An 较早的 4 个 y 轴的基本散景图工作正常但此服务器版本不是 working.I 不知道什么错误我在做,请指导。
以下代码绘制了 2 个临时点,然后是第 3 个永久点。使用 ColumnDataSource 中的 'patch' 和 'stream' 来实现这一点。
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)}
我的 objective 是在多个 y 轴(不同范围)上绘制实时数据。以下代码适用于 2 个 y 轴,但当我添加第 3 个时,浏览器只是 blank.An 较早的 4 个 y 轴的基本散景图工作正常但此服务器版本不是 working.I 不知道什么错误我在做,请指导。
以下代码绘制了 2 个临时点,然后是第 3 个永久点。使用 ColumnDataSource 中的 'patch' 和 'stream' 来实现这一点。
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)}