[英]Separate range sliders for multiple y axes in bokeh
我有多個線圖可以繪制在一個圖形上,我正在使用 bokeh.plotting 進行此操作。 使用
p0.line(),
p0.extra_y_ranges(),
和
p0.add_layout(LinearAxes())
p0 是 1 個散景圖。
我想在右側分別為每個 y 軸設置 range_sliders。 這可以使用散景嗎?
對於主要 y 軸,范圍 slider 可以正常使用
# set up RangeSlider y_counts
range_slider_c = RangeSlider(
title="c",
start=-10,
end=400,
step=1,
value=(-1, 300),
height = 250,
orientation='vertical',
show_value= False,
direction = 'rtl'
)
range_slider_c.js_link("value", p0.y_range, "start", attr_selector=0)
range_slider_c.js_link("value", p0.y_range, "end", attr_selector=1)
但我不清楚如何調用附加 y 軸的范圍,就像我在 js.link 中為 p0.y_range 所做的那樣。
我希望我能夠正確解釋我的要求。
這個答案是基於你上一個問題的答案。
正如那里提到的那樣,額外的 y 范圍保存在帶有關鍵字extra_y_ranges
的字典中。 因此,您只需使用具有有效名稱的extra_y_ranges
更改js_link
。 例如range_slider_c.js_link("value", p0.extra_y_ranges["c", "start", attr_selector=0)
。
from bokeh.layouts import column
from bokeh.models import LinearAxis, Range1d, CustomJS, RangeSlider
from bokeh.plotting import figure, show, output_notebook
output_notebook()
data_x = [1,2,3,4,5]
data_y = [1,2,3,4,5]
color = ['red', 'green', 'magenta', 'black']
p = figure(plot_width=500, plot_height=300)
p.line(data_x, data_y, color='blue')
range_sliders = []
for i, c in enumerate(color, start=1):
name = f'extra_range_{i}'
lable = f'extra range {i}'
p.extra_y_ranges[name] = Range1d(start=0, end=10*i)
p.add_layout(LinearAxis(axis_label=lable, y_range_name=name), 'right')
p.line(data_x, data_y, color=c, y_range_name=name)
range_slider = RangeSlider(start=0, end=10*i, value=(1,9*i), step=1, title=f"Slider {lable}")
range_slider.js_link("value", p.extra_y_ranges[name] , "start", attr_selector=0)
range_slider.js_link("value", p.extra_y_ranges[name] , "end", attr_selector=1)
range_sliders.append(range_slider)
show(column(range_sliders+[p]))
為了堆疊滑塊和圖形,我使用column
布局,它采用散景對象列表。 其他布局可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.