散景 - 将颜色贴图应用于一组线条

Par*_*nde 2 python bokeh

我有一段代码,它使用 matplotlib 绘制一组线条并使用颜色图将颜色应用于这些线条。代码摘录和结果如下:

cm = plt.cm.get_cmap('jet')
step = 15
xi = np.linspace(data[data.columns[0]].min(), data[data.columns[0]].max(), 2)
colors_l = np.linspace(0.1, 1, len(state_means[::step]))
for i, beta in enumerate(state_means[::step]):
    plt.plot(xi, beta[0] * xi + beta[1], alpha=.2, lw=1, c=cm(colors_l[i]))
Run Code Online (Sandbox Code Playgroud)

使用 matplotlib 输出

这里代码的相关部分是

c=cm(colors_l[i])
Run Code Online (Sandbox Code Playgroud)

这是在 plt.plot() 函数内。这里可以使用参数(在这种情况下为 i)来索引颜色图。

但是,如果我尝试使用散景完成类似的事情,使用它的 ColorMapper 和 line() 字形,我会遇到错误。相关的代码行和输出是

call_color_mapper = LinearColorMapper(palette="Viridis256", low=min(call_strike_vals), high=max(call_strike_vals))
call_lines=dict()
call_chain_plot = figure(y_axis_label='Call OI', x_axis_label='Dates', x_axis_type = 'datetime')
for strike in call_strikes:
    call_lines[strike] = call_chain_plot.line('TIMESTAMP', strike, line_color=call_color_mapper(int(strike[2:])), source=callSource)

TypeError: 'LinearColorMapper' object is not callable
Run Code Online (Sandbox Code Playgroud)

有没有办法在散景中使用颜色映射器为一组线条字形着色?

big*_*dot 6

LinearColorMapper不在 Python 中计算颜色。相反,在 JavaScript 中表示在浏览器LinearColorMapper中发生的颜色映射。如果你真的需要 Python 中的颜色,你将不得不手动映射它们,有很多方法可以做到这一点。

但您可能不会,因此在 Bokeh 中执行此操作的最佳方法是使用multi_line而不是重复调用line. 这部分是出于性能原因,Bokeh 经过优化以在“矢量化”操作上表现最佳。而且,它还允许您使用linear_cmap便利功能为您喜欢的任何数据列制作颜色映射器。这是一个完整的例子:

from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.transform import linear_cmap

output_file("cmap.html")

p = figure()

source = ColumnDataSource(data=dict(
    xs=[[0,1] for i in range(256)],     # x coords for each line (list of lists)
    ys=[[i, i+10] for i in range(256)], # y coords for each line (list of lists)
    foo=list(range(256))                # data to use for colormapping
))

p.multi_line('xs', 'ys', source=source,
             color=linear_cmap('foo', "Viridis256", 0, 255))

show(p)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明