在matplotlib
中,scatterplot提供了使用绘图颜色来表示此绘图的值或幅度的可能性:
对于bokeh
,类似examples似乎手动生成rgb颜色,这使得难以生成颜色按比例缩放的图,尤其是。 WRT。分色图。
是否可以在bokeh
中使用类似功能,或使用matplotlib
色彩图来设置颜色?
答案 0 :(得分:11)
直接使用matplotlib
的色彩映像非常简单。例如,以下内容使用viridis
示例中的bokeh
(请注意我使用的是jupyter笔记本):
import numpy as np
from bokeh.plotting import figure, show, output_notebook
import matplotlib as mpl
output_notebook()
N = 4000
x = np.random.random(size=N) * 100
y = np.random.random(size=N) * 100
radii = np.random.random(size=N) * 1.5
colors = [
"#%02x%02x%02x" % (int(r), int(g), int(b)) for r, g, b, _ in 255*mpl.cm.viridis(mpl.colors.Normalize()(radii))
]
p = figure()
p.scatter(x, y, radius=radii,
fill_color=colors, fill_alpha=0.6,
line_color=None)
show(p)
基本上,对于cm
中的任何matplotlib色彩映射,使用值数组初始化它将返回一个数组,其中每个值都被[0,1]范围内的[r,g,b,a]值替换。请注意,这假设所有值都在0和1之间;在这里,我使用matplot.colors.Normalize来确保这一点。
答案 1 :(得分:4)
如果要使用字段名称,另一种选择是使用LinearColorMapper:
from bokeh.models import LinearColorMapper
color_mapper = LinearColorMapper(palette='Magma256', low=min(radii), high=max(radii))
p.scatter(x,y,color={'field': 'radii', 'transform': color_mapper})