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

时间:2017-11-04 21:01:55

标签: python heatmap bokeh rect

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

AAAABAAAAB
BBBAAAABBB

首先,我认为以下会产生2行10个相同颜色的正方形。但我得到一个空白的情节。我必须错过如何在散景中创建分类热图的核心概念。首先,我试图在散景网站(https://bokeh.pydata.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)

1 个答案:

答案 0 :(得分:1)

您需要为每个rect 创建特定的坐标。如果y轴上有2个可能的值,x轴上有10个可能的值,则所有rects的坐标都有 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)

enter image description here

User's Guide section on Categorical Data提供了有关如何在Bokeh中使用分类的更多信息,包括complete examples of heat maps