Bokeh项目中的等高线图绘制指南

Bokeh项目中的等高线图绘制指南

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

概述

等高线图是一种在二维四边形网格上计算并绘制等值线的可视化技术。Bokeh作为一款强大的Python交互式可视化库,从3.0版本开始提供了完整的等高线图绘制功能。本文将详细介绍如何使用Bokeh创建静态和动态的等高线图,包括基础用法和高级技巧。

基础等高线图

简单示例

让我们从一个最基本的等高线图开始:

from bokeh.plotting import figure, show
import numpy as np

# 创建数据网格
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

# 定义等高线层级
levels = np.linspace(-1, 1, 11)

# 创建图形
p = figure(width=600, height=500, title="基础等高线图示例")

# 绘制等高线
contour = p.contour(X, Y, Z, levels, 
                   line_color="black", 
                   fill_color=["#%02x%02x%02x" % (int(r), int(g), int(b)) 
                             for r, g, b, _ in 255*mpl.cm.viridis(np.linspace(0, 1, len(levels)-1))])

# 添加颜色条
p.add_layout(contour.construct_color_bar(), "right")

show(p)

在这个例子中,我们需要注意几个关键点:

  1. z参数是定义在x、y网格上的二维数组
  2. levels参数定义了要绘制的等高线层级序列
  3. line_color控制等高线颜色,可以是单一值或向量
  4. fill_color控制填充区域颜色,长度应为len(levels)-1

极坐标等高线图

Bokeh同样支持在极坐标网格上绘制等高线:

# 极坐标示例
theta = np.linspace(0, 2*np.pi, 100)
r = np.linspace(0.1, 1, 50)
T, R = np.meshgrid(theta, r)
Z = np.sin(R*10 + T*5)

levels = np.linspace(-1, 1, 21)

p = figure(width=600, height=500, title="极坐标等高线图")

contour = p.contour(T, R, Z, levels, 
                   line_color=["red" if level > 0 else "blue" for level in levels],
                   fill_color=["#ff000055" if level > 0 else "#0000ff55" for level in levels[:-1]],
                   hatch_pattern=["/" if level > 0 else "\\" for level in levels[:-1]])

p.add_layout(contour.construct_color_bar(title="值"), "right")

show(p)

这个示例展示了更丰富的视觉属性设置:

  • 使用向量属性区分正负等高线
  • 添加了填充图案(hatch)增强可视化效果
  • 颜色条添加了标题

动态等高线图

Bokeh支持通过服务器应用创建动态更新的等高线图:

from bokeh.plotting import curdoc
from bokeh.models import ColumnDataSource
import numpy as np

# 初始数据
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)
levels = np.linspace(-1, 1, 11)

# 创建图形
p = figure(width=600, height=500)
contour = p.contour(X, Y, Z, levels, line_color="black", fill_color="Viridis256")

def update():
    global Z
    # 更新Z数据
    Z = np.sin(X + 0.1*time.time()) * np.cos(Y)
    # 生成新的等高线数据
    new_data = contour.contour_data(X, Y, Z, levels)
    # 更新渲染器
    contour.set_data(new_data)

# 添加定时器
curdoc().add_periodic_callback(update, 100)

实现动态更新的关键步骤:

  1. 初始调用contour()并保存返回的渲染器
  2. 计算或获取更新后的Z数组
  3. 使用contour_data()生成新的等高线数据对象
  4. 调用渲染器的set_data()方法更新数据
  5. 设置定时器循环执行更新

高级技巧

网格处理

  • 当x、y参数未指定时,Bokeh会使用间距为1的笛卡尔网格
  • 要排除某些网格点,可以使用NumPy的masked数组或将对应Z值设为np.nan

视觉属性设置

颜色属性(line_color, fill_color, hatch_color)支持多种指定方式:

  1. 直接指定颜色序列

    • 长度不符时会自动重采样
    • Cividis256这类256色板很适合
  2. 使用调色板集合

    • Cividis这类字典结构
    • 自动选择最接近长度的调色板并插值

性能优化

  • 等高线计算由ContourPy库完成,对于大型网格可能需要优化
  • 静态图可考虑预计算并保存结果
  • 动态图可适当降低更新频率

总结

Bokeh的等高线图功能提供了从基础到高级的完整解决方案,能够满足科研、工程和数据分析中的各种可视化需求。通过合理设置视觉属性和利用动态更新机制,可以创建出既美观又实用的等高线可视化效果。

随着Bokeh版本的更新,等高线图功能还将继续增强,建议关注官方文档获取最新特性信息。

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

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

内容概要:本文档为2013-2014学年第一学期传感器课程的复习题,涵盖了选择题、简答题和分析计算题。选择题部分考察了光电管特性、光纤传感器组成、光敏元件对比、编码器角度计算、传感器功能、测量方法分类、测量电路选择、热电偶材料、光电倍增管特性、测量精度分类、动态特性指标、应变片实验设备、光电导效应、CCD单元、光通量测量特性、红外线气体分析仪工作原理等内容。简答题部分详细解释了传感器的静态和动态特性及其应用条件、自感式传感器的自感变化、光导纤维的导光原理、传感器定义与组成、变极距型电容传感器的工作原理、光纤传感器的工作原理、透射式光栅传感器的莫尔条纹产生机制。分析计算题部分涉及铜电阻的温度特性拟合、电容测微仪的电容变化计算、热电偶的温差电动势计算、电路电阻值计算、测温传感器的时间常数与动态误差分析、应变片电阻变化量计算。 适合人群:正在学习或复习传感器相关知识的学生,尤其是理工科本科生或研究生。 使用场景及目标:①帮助学生巩固传感器的基本概念和原理;②通过具体题目加深对传感器特性和应用场景的理解;③提高学生解决实际问题的能力,如温度、电容、电阻等物理量的测量与计算。 阅读建议:建议读者先熟悉传感器的基础理论知识,再结合题目进行练习,注意理解每个知识点的实际应用背景,并通过计算题提升对公式的掌握程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

计纬延

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

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

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

打赏作者

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

抵扣说明:

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

余额充值