入门步骤 5:矢量化 Glyph 属性#

上一篇入门步骤指南中,您通过添加和更改属性自定义了绘图的各个方面。

在本节中,您将使用数据向量来影响绘图及其元素的各个方面。

矢量化颜色#

到目前为止,您已通过使用 fill_color 等属性将特定颜色分配给 Glyph。

要根据变量中的值更改颜色,请将包含颜色信息的变量传递给 fill_color 属性。

import random

from bokeh.plotting import figure, show

# generate some data (1-10 for x, random values for y)
x = list(range(0, 26))
y = random.sample(range(0, 100), 26)

# generate list of rgb hex colors in relation to y
colors = [f"#{255:02x}{int((value * 255) / 100):02x}{255:02x}" for value in y]

# create new plot
p = figure(
    title="Vectorized colors example",
    sizing_mode="stretch_width",
    max_width=500,
    height=250,
)

# add line and scatter renderers
p.line(x, y, line_color="blue", line_width=1)
p.scatter(x, y, fill_color=colors, line_color="blue", size=15)

# show the results
show(p)

在此示例中,每个圆的颜色对应于该圆的 y 值。

另请参阅

有关如何将数据点映射到颜色和调色板的更多信息,请参阅用户指南中的客户端颜色映射

矢量化颜色和大小#

要创建颜色和大小与数据相关的绘图,请对渲染器的 radius 参数应用相同的原理。

import numpy as np

from bokeh.plotting import figure, show

# generate some data
N = 1000
x = np.random.random(size=N) * 100
y = np.random.random(size=N) * 100

# generate radii and colors based on data
radii = y / 100 * 2
colors = [f"#{255:02x}{int((value * 255) / 100):02x}{255:02x}" for value in y]

# create a new plot with a specific size
p = figure(
    title="Vectorized colors and radii example",
    sizing_mode="stretch_width",
    max_width=500,
    height=250,
)

# add circle renderer
p.circle(
    x,
    y,
    radius=radii,
    fill_color=colors,
    fill_alpha=0.6,
    line_color="lightgrey",
)

# show the results
show(p)

在此示例中,每个圆的颜色和直径对应于该圆的 y 值。

使用调色板进行颜色映射#

Bokeh 带有数十种预定义的调色板,您可以使用这些调色板将颜色映射到您的数据。这包括来自BrewerD3Matplotlib的调色板。有关所有可用调色板的列表,请参阅palettes

首先,使用linear_cmap()函数为您的数据创建颜色映射。此函数所需的属性为

  • field:要将颜色映射到的数据序列

  • palette:要使用的调色板

  • low:要将颜色映射到的最低值

  • high:要将颜色映射到的最高值

然后将颜色映射器分配给渲染器的 color 参数。

from bokeh.io import show
from bokeh.palettes import Turbo256
from bokeh.plotting import figure
from bokeh.transform import linear_cmap

# generate data
x = list(range(-32, 33))
y = [i**2 for i in x]

# create linear color mapper
mapper = linear_cmap(field_name="y", palette=Turbo256, low=min(y), high=max(y))

# create plot
p = figure(width=500, height=250)

# create circle renderer with color mapper
p.scatter(x, y, color=mapper, size=10)

show(p)

另请参阅

有关颜色映射和其他类似操作的更多信息,请参阅用户指南中的客户端颜色映射转换数据。例如,除了 linear_cmap 之外,还包括 log_cmapfactor_cmap

要了解有关 Bokeh 调色板的更多信息,请参阅参考指南中的palettes。本文档包含所有可用调色板以及使这些调色板可用于绘图的各种方法的概述。