我需要动态分层(或“嵌套”)多个Bokeh变换,其中大部分是CustomJST变换。反正有吗?
有没有办法使用如下语法:
Log10Transform(ThresholdTransform(column_name))
或
LinearColorMapper(Log10Tranform(column_name))
我目前正在使用
{'field':column_name, 'transform':Log10Transform}
似乎不允许分层的语法。
我可以通过编写大量可怕的变换来处理纯数学变换的分层,但据我所知,我无法进行ColorTransform(MathTransform(...))
。
以防它是相关的,我使用的是Bokeh v 12.5,并且没有升级的能力。
答案 0 :(得分:1)
composite_transform()
逐个调用transforms
:
from inspect import Signature, Parameter
def composite_transform(*transforms):
def trans_func():
transforms = arguments
res = x
for transform in transforms.values():
res = transform.compute(res)
return res
def vtrans_func():
transforms = arguments
res = window.Array["from"](xs)
for transform in transforms.values():
res = transform.v_compute(res)
return res
parameters = [Parameter("T{:02d}".format(i), Parameter.POSITIONAL_OR_KEYWORD, default=trans)
for i, trans in enumerate(transforms)]
trans_func.__signature__ = Signature(parameters=parameters)
vtrans_func.__signature__ = Signature(parameters=parameters)
trans = CustomJSTransform.from_py_func(trans_func, vtrans_func)
return trans
以下是一个例子:
进口:
import numpy as np
from bokeh.io import output_notebook, show
from bokeh.models import ColumnDataSource, ColorBar, CustomJS
from bokeh.models.transforms import CustomJSTransform
from bokeh.transform import transform
from bokeh.models.mappers import LinearColorMapper
from bokeh.palettes import Viridis, Category10
from bokeh.plotting import figure
from bokeh.layouts import row, column
output_notebook()
绘制:
x, y = np.random.normal(scale=0.2, size=(2, 500))
source = ColumnDataSource(data=dict(x=x, y=y))
fig = figure(plot_width=400, plot_height=300)
def dummy(source=source):
return 0
def vtrans_value(source=source):
data = source.data
return [(data.x[i]**2 + data.y[i]**2)**0.5 for i in range(len(data.x))]
def vtrans_size():
return [10 * x for x in window.Array["from"](xs)]
value_transform = CustomJSTransform.from_py_func(dummy, vtrans_value)
mult_transform = CustomJSTransform.from_py_func(dummy, vtrans_size)
cmap_transform = LinearColorMapper(Viridis[256], low=0, high=0.6)
color_transform = composite_transform(value_transform, cmap_transform)
size_transform = composite_transform(value_transform, mult_transform)
c = fig.circle("x", "y",
fill_color=transform("x", color_transform),
size=transform("x", size_transform),
line_color=None, source=source, alpha=1)
colorbar = ColorBar(color_mapper=cmap_transform, label_standoff=12, border_line_color=None, location=(0,0))
fig.add_layout(colorbar, "right")
show(fig)
结果:
答案 1 :(得分:0)
感谢HYRY的回应。不幸的是,我无法让这个版本适合我。这是我的解决方案:
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'gocardlesscustomercreated'],
],