我有一个,它的y轴的值分布在3列上。那些我想在范畴y轴上展示的。然后我有一个用于x的列和一个用于color的列。从这些值中,我想创建一个热图。
我创建了以下代码,它返回错误E-1019 (DUPLICATE_FACTORS): FactorRange must specify a unique list of categorical factors for an axis
from bokeh.io import show
from bokeh.models import ColumnDataSource, FactorRange, LinearColorMapper
from bokeh.plotting import figure
from bokeh.palettes import Greys256
mapper = LinearColorMapper(palette=Greys256, low=0, high=5, high_color = 'red')
df_in = pd.DataFrame([['cat1', 'ccat1', 'cccat1', 4, 20],['cat1', 'ccat1', 'cccat1', 5, 15],['cat1', 'ccat1', 'cccat1', 6, 10]], columns=['key1','key2', 'key3', 'x', 'color'])
factors = list(df_in[['key1', 'key2', 'key3']].astype(str).itertuples(index=False, name=None))
data = dict(
y=factors,
x=list(df_in['x'].astype(int)),
color=list(df_in['color'].astype(int)),
)
source = ColumnDataSource(data=data)
p = figure(y_range=FactorRange(*factors))
p.rect(y='y', x='x', width=1, height=0.75, source = source, fill_color={'field': 'color', 'transform': mapper})
show(p)当我通过硬编码在data中手工构造字典时(包括key1-3中的重复值),我不会得到这个错误。
我是不是把数据提取错了?
发布于 2022-03-21 08:04:54
我自己想出来的:
FactorRange需要是唯一的,而y轴中的因素应该为热图中的每个值保留一个条目。
使用list(set(factors)))可以使列表成为唯一
p = figure(y_range=FactorRange(*list(set(factors)))https://stackoverflow.com/questions/71470489
复制相似问题