散景:检索 BasicTicker 的轴标记间隔
bokeh: retrieve axis ticker interval of BasicTicker
我正在尝试计算 x 轴上每个主要间隔的(横截面)平均值,为此我必须检索标签间隔。我的 X 轴 p.axis.ticker
代码是一个 BasicTicker
对象。这个对象有一个 base=10
和 mantissas=[1, 2, 5]
.
我在 x 轴上看到标签以 20 个单位的间隔显示(这个数字是我想要的),但另一个复杂的问题是该数字是动态的。用于 X 轴的变量可以更改,因此间隔会因缩放而自动更改(例如,一些变量在 0.1-0.5 范围内,其他变量在 5-10 范围内)。出于这个原因,我需要访问区间变量。
from bokeh.io import curdoc
from bokeh.layouts import column, layout
from bokeh.models import ColumnDataSource, Select
from bokeh.plotting import figure
axis_map = {
"Return": "ret",
"Holding period": "holdp",
"Data source": "source",
}
x_axis = Select(title="X Axis", options=sorted(axis_map.keys()), value="Holding period")
y_axis = Select(title="Y Axis", options=sorted(axis_map.keys()), value="Return")
source = ColumnDataSource(data=dict(x=[], y=[]))
p = figure(plot_height=600, plot_width=700, title="", sizing_mode="scale_both")
scatter = p.scatter(x="x", y="y", source=source, size=4, color="color", fill_alpha="alpha", marker="marker")
def update_data()
...
interval = p.axis.ticker.*get_interval()*
df['interval_group'] = df[x_name].apply(lambda x: interval*round(x/interval))
y_avg = df.groupby('interval_group')[y_name].mean()
source.data = dict(x=..,
y=..,
y_avg=y_avg
)
controls = [x_axis, y_axis]
for control in controls:
control.on_change('value', lambda attr, old, new: update())
inputs = column(*controls, width=320, height=1000)
inputs.sizing_mode = "fixed"
l = layout([
[inputs, p, h],
], sizing_mode="scale_both")
update()
doc = curdoc()
doc.add_root(l)
doc.title = "Test"
在 BokehJS 中,ContinuousTicker
(BasicTicker
的父 class)有一个抽象的 get_interval
方法 - 看起来这正是您所需要的。但是这个方法和使用它的任何东西都没有暴露在 Python 端。好吧,至少据我所知。
为了获得所需的值,我会在 Python 中重新创建 get_interval
方法的主体,或者创建一个自定义代码(或可能是一个轴),其中唯一的自定义行为是将计算值发送到 Python 端。
我正在尝试计算 x 轴上每个主要间隔的(横截面)平均值,为此我必须检索标签间隔。我的 X 轴 p.axis.ticker
代码是一个 BasicTicker
对象。这个对象有一个 base=10
和 mantissas=[1, 2, 5]
.
我在 x 轴上看到标签以 20 个单位的间隔显示(这个数字是我想要的),但另一个复杂的问题是该数字是动态的。用于 X 轴的变量可以更改,因此间隔会因缩放而自动更改(例如,一些变量在 0.1-0.5 范围内,其他变量在 5-10 范围内)。出于这个原因,我需要访问区间变量。
from bokeh.io import curdoc
from bokeh.layouts import column, layout
from bokeh.models import ColumnDataSource, Select
from bokeh.plotting import figure
axis_map = {
"Return": "ret",
"Holding period": "holdp",
"Data source": "source",
}
x_axis = Select(title="X Axis", options=sorted(axis_map.keys()), value="Holding period")
y_axis = Select(title="Y Axis", options=sorted(axis_map.keys()), value="Return")
source = ColumnDataSource(data=dict(x=[], y=[]))
p = figure(plot_height=600, plot_width=700, title="", sizing_mode="scale_both")
scatter = p.scatter(x="x", y="y", source=source, size=4, color="color", fill_alpha="alpha", marker="marker")
def update_data()
...
interval = p.axis.ticker.*get_interval()*
df['interval_group'] = df[x_name].apply(lambda x: interval*round(x/interval))
y_avg = df.groupby('interval_group')[y_name].mean()
source.data = dict(x=..,
y=..,
y_avg=y_avg
)
controls = [x_axis, y_axis]
for control in controls:
control.on_change('value', lambda attr, old, new: update())
inputs = column(*controls, width=320, height=1000)
inputs.sizing_mode = "fixed"
l = layout([
[inputs, p, h],
], sizing_mode="scale_both")
update()
doc = curdoc()
doc.add_root(l)
doc.title = "Test"
在 BokehJS 中,ContinuousTicker
(BasicTicker
的父 class)有一个抽象的 get_interval
方法 - 看起来这正是您所需要的。但是这个方法和使用它的任何东西都没有暴露在 Python 端。好吧,至少据我所知。
为了获得所需的值,我会在 Python 中重新创建 get_interval
方法的主体,或者创建一个自定义代码(或可能是一个轴),其中唯一的自定义行为是将计算值发送到 Python 端。