如何在Bokeh中制作聚类风格的树状图

2 投票
2 回答
2845 浏览
提问于 2025-04-18 06:05

我想在bokeh中制作一个聚类风格的树状图。
我喜欢这个bokeh的点图示例,但我想让线条变得弯曲,并展示像这样聚类的结构:http://bl.ocks.org/mbostock/4063570

这是bokeh示例中的点图代码:

import numpy as np
from bokeh.plotting import *
from bokeh.objects import Range1d

N = 4000

factors = ["a", "b", "c", "d", "e", "f", "g", "h"]
x0 = [0,0,0,0,0,0,0,0]
x =  [50, 40, 65, 10, 25, 37, 80, 60]

output_file("categorical.html", title="categorical.py example")

hold()

segment(x0, factors, x, factors, y_range=factors, x_range=Range1d(start=0, end=100), 
        line_width=2, line_color="green", tools="resize,previewsave", title="Dot Plot")
circle(x, factors, size=15, fill_color="orange", line_color="green", line_width=3, Name="categorical example")

figure()

show()  # open a browser

这是bokeh点图的输出

有没有什么建议可以让线条变得弯曲,并展示像树状图那样的聚类关系?这张图片只是为了展示直线和点的概念。实际目标是显示所有从一个点出发的线条之间的聚类关系。

2 个回答

3

在这段时间里(四年后,2018年8月),我们使用的是Bokeh 0.13.0版本。因为上面的回答不是很令人满意,所以我想给你推荐两个基于Bokeh的树状图实现。

第一个是Daniel Russo的基于定量数据的Bokeh树状图实现: https://russodanielp.github.io/plotting-a-heatmap-with-a-dendrogram-using-bokeh.html

第二个是cdendro,Bokehheat库的基于分类数据的Bokeh树状图实现: https://gitlab.com/biotransistor/bokehheat

1

在Bokeh(截至0.4.4版本)中,这并不是不可能实现的,但目前还没有内置的功能来帮助处理图形和图形布局。你需要自己计算或者使用一个库来计算边缘的线条点,然后再把这些点传给Bokeh。我们计划在未来支持图形功能,但可能要等到今年晚些时候,除非有人直接给我们一个完整的解决方案。

撰写回答