入门步骤 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 带有数十种预定义的调色板,您可以使用这些调色板将颜色映射到您的数据。这包括来自Brewer、D3或Matplotlib的调色板。有关所有可用调色板的列表,请参阅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)