Python 在bokeh中的线性和对数比例之间切换

Python 在bokeh中的线性和对数比例之间切换,python,plot,bokeh,Python,Plot,Bokeh,如何在线性刻度和对数刻度之间重新生成切换 背景:我是Matplotlib的长期用户,最近的Bokeh用户。 我开始使用Bokeh的一个主要原因是它提供的交互性。其中很大一部分是在绘图中在线性和对数刻度之间切换的能力(这是我日常生活中真正需要的东西)。这个问题在2015年得到解决,当时没有明确的答案 然而,2年后,我想知道是否有一种方法可以包括一个按钮/小部件,用于将x轴和y轴的线性比例更改为对数比例。如果没有,我确信有一种干净的方法可以以某种方式模拟这种行为(没有两个并排的绘图)。一种可能的解决

如何在线性刻度和对数刻度之间重新生成切换

背景:我是Matplotlib的长期用户,最近的Bokeh用户。 我开始使用Bokeh的一个主要原因是它提供的交互性。其中很大一部分是在绘图中在线性和对数刻度之间切换的能力(这是我日常生活中真正需要的东西)。这个问题在2015年得到解决,当时没有明确的答案


然而,2年后,我想知道是否有一种方法可以包括一个按钮/小部件,用于将x轴和y轴的线性比例更改为对数比例。如果没有,我确信有一种干净的方法可以以某种方式模拟这种行为(没有两个并排的绘图)。

一种可能的解决方案是将线性和对数绘图放入如下选项卡:

from bokeh.plotting import figure, show
from bokeh.models.widgets import Tabs, Panel

panels = []

for axis_type in ["linear", "log"]:
    fig = figure(x_axis_type=axis_type, y_axis_type=axis_type)
    fig.scatter(x=[1,10,100,1000], y=[1,10,100,1000])

    panel = Panel(child=fig, title=axis_type)
    panels.append(panel)

tabs = Tabs(tabs=panels)

show(tabs)

或者,您可以将一个
bokeh.models.widgets.Button
与一个CustomJS回调连接起来,该回调可以更改绘图范围,但对我来说,上面的操作似乎更容易一些。

既然
Scale
是一个公共模型,而不是隐藏的实现细节,那么考虑这一点就更合理了。请随时打开GitHub问题讨论,直到那时,下面的答案可能是最好的解决办法。@bigreddot开始了它,如果你感兴趣的话,是的,我已经对它进行了评论:)我在字典中存储了一个
gridplot
的9个数字(这样当数据或标题发生变化时,我可以对它进行迭代)。使用当前的解决方案,我需要多次重写代码,因为需要在我的字典(或第二个字典)中为log/linear添加一层,或者在使用面板和选项卡时,您是否看到了一个简单的解决方案?