Bokeh库:创建交互式树状图
发布时间:2024-01-03 14:50:05
Bokeh是一个Python库,用于创建交互式数据可视化。它提供了许多功能强大的工具和函数,用于绘制各种类型的图表,包括树状图。树状图是一种层次结构的图表,用于表示树状数据结构的关系。
创建交互式树状图的第一步是安装Bokeh库。你可以使用pip命令在终端或命令提示符中安装Bokeh:
pip install bokeh
接下来,你需要导入必要的库和模块,以及创建你的数据。树状图需要给定节点之间的关系和层次结构。下面是一个简单的例子,展示一个家谱树的关系:
from bokeh.plotting import figure, show
from bokeh.models import GraphRenderer, StaticLayoutProvider, Oval, HoverTool
from bokeh.palettes import Spectral4
from bokeh.io import output_notebook
# 创建数据
nodes = {'name': ['A', 'B', 'C', 'D', 'E', 'F'],
'level': [0, 1, 1, 2, 2, 0],
'parents': [None, 'A', 'A', 'B', 'B', None]}
edges = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('F', 'A')]
# 创建布局
plot = figure(title="Family Tree", x_range=(-2,2), y_range=(-2,2),
tools="", toolbar_location=None)
# 创建节点
node_hover_tool = HoverTool(tooltips=[("Name", "@name"), ("Level", "@level")])
renderer = GraphRenderer(node_renderer=Oval(fill_color=Spectral4[0], size=15),
edge_renderer=None,
layout_provider=StaticLayoutProvider(graph_layout='tree'))
renderer.node_renderer.glyph = Oval(fill_color=Spectral4[0], size=15)
plot.add_tools(node_hover_tool)
# 添加节点和边到布局中
plot.renderers.append(renderer)
renderer.node_renderer.data_source.data = nodes
renderer.edge_renderer.data_source.data = {'start': [e[0] for e in edges],
'end': [e[1] for e in edges]}
# 设置节点位置
renderer.layout_provider.fixed_node_size = True
renderer.layout_provider.node_size = 15
renderer.layout_provider.nodes = nodes['name']
# 显示图表
show(plot)
在这个例子中,我们首先定义了一个包含节点信息的字典和一个包含边信息的列表。然后,我们创建了一个画布,并设置了画布的标题和范围。接下来,我们创建了一个节点渲染器,它使用了Oval形状作为节点的符号,并使用了Spectral4调色板中的第一个颜色。然后,我们创建了一个静态布局提供器,并将节点和边添加到布局中。最后,我们使用show()函数显示图表。
通过运行上述代码,将会在Bokeh服务器上创建一个交互式的树状图。你可以使用鼠标滚轮放大或缩小图表,或者使用鼠标拖动移动图表。当将鼠标悬停在节点上时,会显示节点的名称和层次。
这只是一个基本的例子,展示了如何使用Bokeh库创建一个交互式的树状图。你可以根据你的需要进行修改和定制,以创建更复杂和有趣的树状图。
