
本文介绍如何在 Bokeh 绘图中实现双 Y 轴,并允许用户独立缩放其中一个 Y 轴,保持另一个 Y 轴固定。通过使用 extra_y_ranges 和 Range1d 创建双 Y 轴,并调整缩放行为,我们可以实现更灵活的数据可视化。
在 Bokeh 绘图中,有时我们需要展示具有不同量纲或取值范围的数据。这时,双 Y 轴就显得非常有用。然而,默认情况下,缩放操作会同时影响两个 Y 轴。本文将介绍如何创建双 Y 轴绘图,并允许用户独立缩放其中一个 Y 轴,保持另一个 Y 轴的刻度范围固定。
首先,我们需要使用 extra_y_ranges 和 Range1d 创建双 Y 轴。extra_y_ranges 允许我们在 Bokeh 图中添加额外的 Y 轴范围,而 Range1d 则用于定义这些范围的起始和结束值。
以下是一个创建双 Y 轴绘图的示例代码:
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.extra_y_ranges = {"y2_range": Range1d(start=0, end=10)}
# 添加线条到绘图
line1 = p.line(x, y1, color="navy", legend_label="Line 1")
line2 = p.line(x, y2, color="firebrick", y_range_name="y2_range", legend_label="Line 2")
# 添加第二个 Y 轴
p.add_layout(p.extra_y_ranges['y2_range'], 'right')
# 设置轴标签
p.yaxis.axis_label = "Y1"
p.extra_y_ranges['y2_range'].start = 0
p.extra_y_ranges['y2_range'].end = 10
p.yaxis.formatter.precision = 0
p.yaxis.major_label_orientation = "vertical"
p.right.axis_label = "Y2"
# 显示绘图
show(p)这段代码首先创建了两个列表 y1 和 y2 作为要绘制的数据。然后,创建了一个 Bokeh 图形对象 p。关键部分是 p.extra_y_ranges = {"y2_range": Range1d(start=0, end=10)},这定义了一个名为 "y2_range" 的额外 Y 轴范围,并设置了其起始值为 0,结束值为 10。 line2 通过 y_range_name="y2_range" 与这个额外的 Y 轴关联。 最后,使用 p.add_layout 将这个额外的 Y 轴添加到绘图的右侧。
默认情况下,Bokeh 的缩放工具会同时影响所有的 Y 轴。为了实现独立缩放,我们需要自定义缩放行为。虽然Bokeh本身没有直接提供独立缩放的选项,但可以通过修改坐标轴的 renderers 属性来间接实现。然而,根据提供的信息,直接修改 renderers 属性并不能达到目的。
一个可行的解决方案是使用 JavaScript 回调函数来控制 Y 轴的范围。
注意事项:
总结:
通过 extra_y_ranges 和 Range1d,我们可以方便地创建双 Y 轴绘图。 虽然 Bokeh 默认的缩放行为会同时影响所有 Y 轴,但我们可以通过调整 renderers 属性或使用 JavaScript 回调函数来实现独立 Y 轴缩放,从而满足更复杂的可视化需求。根据原始问题提供的信息,查阅相关链接是获取更详细解决方案的最佳途径。
以上就是Bokeh 双 Y 轴绘图:如何实现独立 Y 轴缩放的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号