将色图与散景散点图一起使用
Using colormap with bokeh scatter
在 matplotlib
中,scatterplot 提供了使用绘图颜色来指示值或大小的可能性,如下图所示:
对于 bokeh
,类似的 examples 似乎是手动生成 rgb 颜色,这使得很难生成颜色按幅度缩放的图,尤其是。 wrt。发散色图。
是否可以在 bokeh
中使用类似的功能,或者使用 matplotlib
颜色映射来设置颜色?
直接使用 matplotlib
的颜色图就足够简单了。例如,以下在 bokeh
的示例中使用了 viridis
(请注意,我使用的是 jupyter notebook):
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 颜色图,使用值数组对其进行初始化将 return 一个数组,每个值都被 [r,g,b,a] 中的值替换范围 [0,1]。请注意,这也假设所有值都在 0 和 1 之间;这里我使用 matplot.colors.Normalize 来确保这一点。
如果要使用字段名称,另一种选择是使用 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})
在 matplotlib
中,scatterplot 提供了使用绘图颜色来指示值或大小的可能性,如下图所示:
对于 bokeh
,类似的 examples 似乎是手动生成 rgb 颜色,这使得很难生成颜色按幅度缩放的图,尤其是。 wrt。发散色图。
是否可以在 bokeh
中使用类似的功能,或者使用 matplotlib
颜色映射来设置颜色?
直接使用 matplotlib
的颜色图就足够简单了。例如,以下在 bokeh
的示例中使用了 viridis
(请注意,我使用的是 jupyter notebook):
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 颜色图,使用值数组对其进行初始化将 return 一个数组,每个值都被 [r,g,b,a] 中的值替换范围 [0,1]。请注意,这也假设所有值都在 0 和 1 之间;这里我使用 matplot.colors.Normalize 来确保这一点。
如果要使用字段名称,另一种选择是使用 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})