寻求Bokeh新版本嵌套饼图分层实现的简化示例
Bokeh新版本实现嵌套饼图(甜甜圈)简化示例
旧版Bokeh的饼图接口已废弃,新架构下可以通过Wedge图形元素分层绘制,实现类似的嵌套饼图效果。以下是简化实现示例:
步骤1:导入依赖模块
from bokeh.plotting import figure, show from bokeh.models import ColumnDataSource import numpy as np
步骤2:准备分层数据
# 内层饼图数据 inner_labels = ["分类A", "分类B", "分类C"] inner_values = [30, 40, 30] inner_angles = np.array(inner_values) / sum(inner_values) * 2 * np.pi # 外层甜甜圈数据 outer_labels = ["A-1", "A-2", "B-1", "B-2", "C-1", "C-2"] outer_values = [15, 15, 20, 20, 15, 15] outer_angles = np.array(outer_values) / sum(outer_values) * 2 * np.pi
步骤3:计算角度区间并创建数据源
# 计算每个分段的起始角度(累积和) inner_start_angles = np.cumsum(np.append(0, inner_angles[:-1])) outer_start_angles = np.cumsum(np.append(0, outer_angles[:-1])) # 内层数据源 inner_source = ColumnDataSource(data=dict( start=inner_start_angles, end=inner_start_angles + inner_angles, labels=inner_labels, colors=["#c9d9d3", "#718dbf", "#e84d60"] )) # 外层数据源 outer_source = ColumnDataSource(data=dict( start=outer_start_angles, end=outer_start_angles + outer_angles, labels=outer_labels, colors=["#a1d7c9", "#c9d9d3", "#5a7dbf", "#718dbf", "#c85a60", "#e84d60"] ))
步骤4:分层绘制图形
# 创建绘图对象,关闭工具栏、坐标轴与网格 p = figure(height=400, width=400, toolbar_location=None, title="嵌套饼图示例", x_range=(-1.5, 1.5), y_range=(-1.5, 1.5)) p.axis.visible = False p.grid.visible = False # 绘制外层甜甜圈(半径范围1~1.5) p.wedge(x=0, y=0, radius_inner=1, radius_outer=1.5, start="start", end="end", fill_color="colors", line_color="white", source=outer_source, legend_field="labels") # 绘制内层饼图(半径范围0~1) p.wedge(x=0, y=0, radius_inner=0, radius_outer=1, start="start", end="end", fill_color="colors", line_color="white", source=inner_source) # 展示图形 show(p)
说明
这个示例通过Wedge元素分别绘制内层饼和外层环,利用radius_inner和radius_outer控制每层的范围,完全贴合新架构的分层逻辑,替代了旧版废弃的饼图接口。
内容的提问来源于stack exchange,提问作者ArulRulzz
相关产品推荐
相关产品推荐

