0

0

Bokeh Plot:如何独立控制双Y轴的缩放

花韻仙語

花韻仙語

发布时间:2025-11-06 13:36:07

|

797人浏览过

|

来源于php中文网

原创

bokeh plot:如何独立控制双y轴的缩放

本文介绍了在Bokeh中创建具有双Y轴的绘图,并实现独立控制每个Y轴的缩放功能。通过正确配置`extra_y_ranges`和使用`callbacks`,可以实现只缩放其中一个Y轴,而保持另一个Y轴的范围固定,从而更灵活地展示数据。

在Bokeh中创建具有双Y轴的绘图是一种常见的需求,例如,当需要在同一图表中展示具有不同量纲或数量级的数据时。然而,默认情况下,Bokeh的缩放工具会同时影响所有的Y轴。本教程将介绍如何实现独立控制双Y轴的缩放,即只缩放其中一个Y轴,而保持另一个Y轴的范围固定。

创建双Y轴绘图

首先,我们需要创建一个包含双Y轴的Bokeh绘图。这可以通过使用extra_y_ranges参数来实现。

from bokeh.plotting import figure, show
from bokeh.models import Range1d

# 创建数据
x = [1, 2, 3, 4, 5]
y1 = [6, 7, 2, 4, 5]
y2 = [2, 3, 4, 5, 6]

# 创建绘图对象
p = figure(width=400, height=400)

# 添加第一个Y轴的数据
p.line(x, y1, color="navy", legend_label="Line 1")

# 创建第二个Y轴的范围
p.extra_y_ranges = {"y2": Range1d(start=0, end=10)}

# 添加第二个Y轴的数据
p.line(x, y2, color="firebrick", legend_label="Line 2", y_range_name="y2")

# 添加第二个Y轴
p.add_layout(LinearAxis(y_range_name="y2"), 'right')

show(p)

在上面的代码中,我们首先创建了一个figure对象。然后,我们使用p.line()函数添加了第一条线的数据。为了创建第二个Y轴,我们使用了p.extra_y_ranges参数,并指定了第二个Y轴的范围。然后,我们再次使用p.line()函数添加了第二条线的数据,并指定了y_range_name参数为"y2",以将这条线与第二个Y轴关联起来。最后,使用p.add_layout()添加第二个Y轴到绘图的右侧。

独立控制Y轴缩放

默认情况下,Bokeh的缩放工具会同时影响两个Y轴。要实现独立控制Y轴的缩放,我们需要使用callbacks。具体来说,我们可以监听缩放事件,并手动更新其中一个Y轴的范围,而保持另一个Y轴的范围不变。

Cutout.Pro抠图
Cutout.Pro抠图

AI批量抠图去背景

下载

以下是一个示例代码:

from bokeh.plotting import figure, show
from bokeh.models import Range1d, LinearAxis, CustomJS

# 创建数据
x = [1, 2, 3, 4, 5]
y1 = [6, 7, 2, 4, 5]
y2 = [2, 3, 4, 5, 6]

# 创建绘图对象
p = figure(width=400, height=400, tools="wheel_zoom, pan, reset")

# 添加第一个Y轴的数据
line1 = p.line(x, y1, color="navy", legend_label="Line 1")

# 创建第二个Y轴的范围
y2_range = Range1d(start=0, end=10)
p.extra_y_ranges = {"y2": y2_range}

# 添加第二个Y轴的数据
line2 = p.line(x, y2, color="firebrick", legend_label="Line 2", y_range_name="y2")

# 添加第二个Y轴
axis2 = LinearAxis(y_range_name="y2")
p.add_layout(axis2, 'right')

# 创建回调函数
callback = CustomJS(args=dict(y2_range=y2_range, y1_range=p.y_range), code="""
    // 获取缩放后的第一个Y轴的范围
    const start = y1_range.start;
    const end = y1_range.end;

    // 在这里可以添加逻辑来限制第二个Y轴的范围
    // 例如,保持第二个Y轴的范围不变
    // 或者根据第一个Y轴的范围来调整第二个Y轴的范围

    // 更新第二个Y轴的范围
    //y2_range.start = start;
    //y2_range.end = end;
""")

# 绑定回调函数到第一个Y轴的范围
p.y_range.js_on_change('start', callback)
p.y_range.js_on_change('end', callback)

show(p)

在这个例子中,我们首先创建了一个CustomJS对象,该对象包含一个JavaScript回调函数。该回调函数在第一个Y轴的范围发生变化时被触发。在回调函数中,我们可以获取缩放后的第一个Y轴的范围,并根据需要更新第二个Y轴的范围。在本例中,我们注释掉了更新y2_range的代码,这意味着第二个Y轴的范围将保持不变。

注意事项

  • 回调函数是在浏览器端执行的,因此需要使用JavaScript编写。
  • 回调函数可以访问Bokeh绘图对象和模型,但不能直接修改Python变量。
  • 过度使用回调函数可能会影响绘图的性能。

总结

通过正确配置extra_y_ranges和使用callbacks,可以在Bokeh中创建具有双Y轴的绘图,并实现独立控制每个Y轴的缩放功能。这种方法可以更灵活地展示数据,并提高用户体验。通过自定义callback函数,可以实现更加复杂的交互行为,例如,根据第一个Y轴的缩放比例来动态调整第二个Y轴的范围。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

40

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

50

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

12

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

13

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号