Bokeh项目实战:复现Burtin抗生素效果环形图可视化
背景介绍
在数据可视化领域,历史上有许多经典的可视化作品值得我们学习和借鉴。本文将通过Bokeh项目复现Will Burtin设计的抗生素效果环形图可视化,这是一个在医学和统计学领域具有重要历史意义的可视化案例。
可视化设计分析
Burtin的原始可视化采用环形图形式展示不同抗生素对多种细菌的最小抑菌浓度(MIC)数据,具有以下特点:
- 使用环形布局,细菌按角度分布
- 采用特殊的对数-平方根径向刻度
- 通过颜色区分革兰氏阳性/阴性细菌
- 使用不同颜色的小扇形表示不同抗生素的效果
Bokeh实现关键技术
1. 数据准备与角度计算
首先需要计算每个细菌在环形图中的角度位置:
big_angle = 2 * pi / (len(df) + 1) # 计算每个细菌占据的角度
angles = pi/2 - 3*big_angle/2 - array(df.index) * big_angle # 均匀分布角度
2. 特殊径向刻度实现
Burtin使用了独特的对数-平方根刻度,实现代码如下:
micmin = sqrt(log(.001*1E4))
micmax = sqrt(log(1000*1E4))
def scale(mic):
return - sqrt(log(mic * 1E4)) + (micmin + micmax)
3. 环形楔形图绘制
使用annular_wedge
方法绘制细菌和抗生素效果:
# 细菌大扇形
p.annular_wedge(0, 0, micmax, micmin, "start", "end",
fill_color="colors", line_color="#f0e1d2", source=source)
# 抗生素小扇形
p.annular_wedge(0, 0, micmin, scale(df[drug]), start, end,
color=COLORS[i], line_color=None, legend_label=drug)
4. 标签与图例处理
# 细菌标签
p.text(xr, yr, ["\n".join(x.split()) for x in df.bacteria],
text_font_size="13px", anchor="center")
# 自定义图例
legend = Legend(items=[
LegendItem(label="Gram-positive", renderers=[br], index=10),
LegendItem(label="Gram-negative", renderers=[br], index=0),
], location="bottom", orientation="horizontal")
可视化改进建议
虽然我们复现了原始可视化,但现代数据可视化实践中可以考虑以下改进:
- 使用更直观的条形图或热图替代环形图
- 简化刻度表示,避免复杂的对数-平方根转换
- 增加交互功能,如悬停提示
- 优化颜色选择,提高可访问性
技术要点总结
- 环形布局:通过角度计算实现均匀分布
- 自定义刻度:实现特殊的对数-平方根径向刻度
- 多层图形:使用不同半径的环形楔形图表示不同信息
- 标签处理:合理放置细菌名称标签
- 图例定制:创建自定义图例说明
通过这个案例,我们展示了Bokeh在创建复杂、定制化可视化方面的强大能力,特别是其灵活的图形原语和布局系统。
进一步学习
对于想深入学习Bokeh的用户,建议探索:
- 更多环形图变体
- 交互式可视化实现
- 复杂布局的组合使用
- 自定义刻度与坐标轴
这个案例不仅展示了Bokeh的技术能力,也体现了数据可视化设计中形式与功能的平衡思考。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考