在散景中的线性和对数刻度之间切换

Toggle between linear and log scale in bokeh

如何重新生成 this example 线性和对数刻度之间的切换?

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

然而,2 年过去了,我想知道是否有一种方法可以包含 button/widget 以将 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 回调连接起来,但上面的方法对我来说似乎更容易一些。