我有三个列表,我想在散景中绘制 xy 散点图,但绘图点的颜色取决于 Y 的值,但会缩放到列表“z”中指定的值。请注意,'z' 与 x 和 y 的大小不同
如何做到的
` x = list(range(1, 51)) # 数据点 y = random.sample(range(0, 100), 50) # 观测到的温度 z = list(range(0, 100)) 颜色条温度范围。
source = ColumnDataSource('......??????......') cmap = Linear_cmap(field_name ='?',调色板=“Spectral6”,低=?,高=?)
r = p.scatter(y, y, color=cmap, size=15, source=source)`
我尝试按照“https://docs.bokeh.org/en/latest/docs/examples/basic/data/linear_cmap_colorbar.html”上给出的示例进行操作,但没有取得任何成功。
这里发生的很多事情需要注意才能充分利用 Bokeh。
1。数据准备
由于您的“z”值(代表比例因子)与“y”(温度)的范围不同,因此您需要对它们进行标准化。一种常见的方法是最小-最大归一化:
import numpy as np
def normalize(data, min_val=0, max_val=1):
return (data - min(data)) / (max(data) - min(data)) * (max_val - min_val) + min_val
z_normalized = normalize(z)
2。创建一个ColumnDataSource
您将需要数据源中的标准化“z”值来进行颜色映射。
from bokeh.models import ColumnDataSource
source = ColumnDataSource(dict(
x=x,
y=y,
temperature=y, # Use 'y' for the color field
z=z_normalized
))
3.线性颜色映射器
将
field_name
设置为数据源中包含驱动颜色映射的值的列(在本例中为“温度”)。如果数据中存在异常值,您可能需要缩放颜色映射器的 low
和 high
值,以确保良好的视觉表示。
from bokeh.models import LinearColorMapper
cmap = LinearColorMapper(field_name='temperature', palette="Spectral6",
low=min(y), high=max(y))
4。绘制并应用颜色映射
from bokeh.plotting import figure, show
p = figure(title="Temperature Plot with Color Scaling")
p.scatter('x', 'y', size=15, source=source,
color={'field': 'temperature', 'transform': cmap})
就像我说的那样,我无法一直掌握它,但理解结构和意图上的这些更大的动作将帮助你获得最后的几个。