Python 3 Bokeh Heatmap Rect 简单示例未在图中显示任何内容

Python 3 Bokeh Heatmap Rect simple example not showing anything in plot

我正在尝试使用 python 的 Bokeh 库对简单的分类热图进行颜色编码。例如,给定以下 table,我想用红色方块替换每个 'A',用蓝色方块替换每个 'B':

AAAABAAAAB
BBBAAAABBB

首先,我认为以下会产生 2 行,每行 10 个相同颜色的正方形。但我只是得到一个空白图。我一定错过了如何在散景中创建分类热图的核心概念。首先,我试图模仿散景网站上的一个例子:

https://docs.bokeh.org/en/latest/docs/gallery/categorical.html

有人看到我遗漏了什么吗? (这是一个简单的例子。我有很多行和数百列,我需要按类别着色。)

from bokeh.plotting import figure, show, output_file

hm = figure()
colors = ['#2765a3' for x in range(20)]
x_input = [x for x in range(10)]
y_input = ['a', 'b']
hm.rect(x_input, y_input, width = 1, height = 1, color = colors)
output_file('test.html)
show(hm)

您需要为每个矩形创建特定坐标。如果在 y 轴上有 2 个可能的值,在 x 轴上有 10 个可能的值,那么所有矩形都有 20 个可能的唯一坐标对(即叉积这两个列表)。例如:

(0, 'A'), (0, 'B'), (1, 'A'), (1, 'B'), ...

如果将这些元组中的每一个拆分为 x 坐标和 y 坐标,并将 x 和 y 收集到它们自己的列表中,您就会明白为什么必须同时有 20 个 x 坐标和 20 个 y 坐标.

此外,对于分类坐标,您必须告诉 figure 它们是什么。这是您更新的代码:

from bokeh.plotting import figure, show

colors = ['#2765a3' for x in range(20)]
x = list(range(10)) * 2
y = ['a'] * 10 +  ['b'] * 10

hm = figure(y_range=('a', 'b'))
hm.rect(x, y, width=1, height=1, fill_color=colors, line_color="white")

show(hm)

User's Guide section on Categorical Data has much more information on how to use categoricals in Bokeh, including complete examples of heat maps