2015-12-04 38 views
4

類似於matplotlib ax.set_navigate(False)命令可能?背景虛化,二y軸/禁用一個軸用於變焦平移

下面是使用IPython的筆記本最小例子。

from bokeh.plotting import figure 
from bokeh.models import LinearAxis, Range1d 
from bokeh.io import output_notebook, show 
output_notebook() 

s1=figure(width=250, plot_height=250, title=None, tools="pan, wheel_zoom") 
s1.line([1, 2, 3], [300, 300, 400], color="navy", alpha=0.5) 
s1.extra_y_ranges = {"foo": Range1d(start=1, end=9)} 
s1.add_layout(LinearAxis(y_range_name="foo"), 'right') 
s1.line([1, 2, 3], [4, 4, 1], color="firebrick", alpha=0.5, y_range_name="foo") 
show(s1) 

是否可以保持第二個y軸到位,同時在另一個y軸上縮放和平移?
使用PanTool尺寸沒有幫助我解決這個問題。

編輯:截圖插入:

Screenshot actual output
藍線繪製在第一軸,紅色在第二

如果我放大,繞X軸平移,我想紅線保持原狀。

回答

4

可以使用第二Y軸的callback功能,插入復位範圍爲原始值的JavaScript代碼,只要一執行縮放或平移:

from bokeh.plotting import figure 
from bokeh.models import LinearAxis, Range1d, CustomJS 
from bokeh.io import output_notebook, show 
output_notebook() 

jscode=""" 
     range.set('start', parseInt(%s)); 
     range.set('end', parseInt(%s)); 
    """ 


s1=figure(width=250, plot_height=250, title=None, tools="pan, wheel_zoom") 
s1.line([1, 2, 3], [300, 300, 400], color="navy", alpha=0.5) 
s1.extra_y_ranges = {"foo": Range1d(start=1, end=9)} 
s1.add_layout(LinearAxis(y_range_name="foo"), 'right') 
s1.line([1, 2, 3], [4, 4, 1], color="firebrick", alpha=0.5, y_range_name="foo") 


s1.extra_y_ranges['foo'].callback = CustomJS(
     args=dict(range=s1.extra_y_ranges['foo']), 
        code=jscode % (s1.extra_y_ranges['foo'].start, 
            s1.extra_y_ranges['foo'].end) 
      ) 

show(s1) 
+1

這就是它!有趣的事情,以'回調'個性化的情節。 – cheesepalm