Bokeh项目实战:复现Burtin抗生素效果环形图可视化

Bokeh项目实战:复现Burtin抗生素效果环形图可视化

bokeh bokeh/bokeh: 是一个用于创建交互式图形和数据的 Python 库。适合用于数据可视化、数据分析和呈现,以及创建动态的 Web 应用。特点是提供了一种简洁、直观的 API 来描述和处理数据,并生成交互式的可视化效果。 bokeh 项目地址: https://gitcode.com/gh_mirrors/bo/bokeh

背景介绍

在数据可视化领域,历史上有许多经典的可视化作品值得我们学习和借鉴。本文将通过Bokeh项目复现Will Burtin设计的抗生素效果环形图可视化,这是一个在医学和统计学领域具有重要历史意义的可视化案例。

可视化设计分析

Burtin的原始可视化采用环形图形式展示不同抗生素对多种细菌的最小抑菌浓度(MIC)数据,具有以下特点:

  1. 使用环形布局,细菌按角度分布
  2. 采用特殊的对数-平方根径向刻度
  3. 通过颜色区分革兰氏阳性/阴性细菌
  4. 使用不同颜色的小扇形表示不同抗生素的效果

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")

可视化改进建议

虽然我们复现了原始可视化,但现代数据可视化实践中可以考虑以下改进:

  1. 使用更直观的条形图或热图替代环形图
  2. 简化刻度表示,避免复杂的对数-平方根转换
  3. 增加交互功能,如悬停提示
  4. 优化颜色选择,提高可访问性

技术要点总结

  1. 环形布局:通过角度计算实现均匀分布
  2. 自定义刻度:实现特殊的对数-平方根径向刻度
  3. 多层图形:使用不同半径的环形楔形图表示不同信息
  4. 标签处理:合理放置细菌名称标签
  5. 图例定制:创建自定义图例说明

通过这个案例,我们展示了Bokeh在创建复杂、定制化可视化方面的强大能力,特别是其灵活的图形原语和布局系统。

进一步学习

对于想深入学习Bokeh的用户,建议探索:

  • 更多环形图变体
  • 交互式可视化实现
  • 复杂布局的组合使用
  • 自定义刻度与坐标轴

这个案例不仅展示了Bokeh的技术能力,也体现了数据可视化设计中形式与功能的平衡思考。

bokeh bokeh/bokeh: 是一个用于创建交互式图形和数据的 Python 库。适合用于数据可视化、数据分析和呈现,以及创建动态的 Web 应用。特点是提供了一种简洁、直观的 API 来描述和处理数据,并生成交互式的可视化效果。 bokeh 项目地址: https://gitcode.com/gh_mirrors/bo/bokeh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盛言广Red-Haired

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值