Bokeh 在Bokeh中如何使用两个不同的y轴范围绘制一张图表
在本文中,我们将介绍如何在Bokeh中使用两个不同的y轴范围来绘制一张图表,并且提供示例说明。
阅读更多:Bokeh 教程
介绍
Bokeh是一个用于创建交互式数据可视化的Python库,提供了丰富的绘图工具和函数。有时候,在同一个图表中,我们需要显示不同范围的数据,这时候使用两个不同的y轴范围非常有用。
步骤
使用Bokeh绘制具有两个不同y轴范围的图表需要以下步骤:
- 导入必要的库和模块:
from bokeh.io import output_file, show
from bokeh.plotting import figure
from bokeh.models import Range1d
- 创建一个绘图的Figure对象:
p = figure()
- 添加两个具有不同数据范围的数据系列:
x = [1, 2, 3, 4, 5]
y1 = [10, 20, 30, 40, 50]
y2 = [100, 200, 300, 400, 500]
p.line(x, y1, color='red', y_axis_label='y1')
p.line(x, y2, color='blue', y_range_name='y2', y_axis_label='y2')
- 创建两个y轴范围对象:
y_range1 = Range1d(start=min(y1), end=max(y1))
y_range2 = Range1d(start=min(y2), end=max(y2))
- 将y轴范围对象与相应的y轴关联:
p.y_range = y_range1
p.extra_y_ranges = {"y2": y_range2}
- 在右侧添加第二个y轴:
p.add_layout(p.right[0])
- 添加图例并显示图表:
p.legend.location = 'top_left'
show(p)
示例
假设我们要绘制一张图表,显示两个不同的指标(A和B)在相同的x轴下的趋势,并且这两个指标的数值范围差异很大。下面是一个具体的示例:
from bokeh.io import output_file, show
from bokeh.plotting import figure
from bokeh.models import Range1d
# 创建一个新的HTML文件
output_file("two_ranges.html")
# 创建一个绘图的Figure对象
p = figure()
# 添加两个具有不同y轴范围的数据系列
x = [1, 2, 3, 4, 5]
y1 = [10, 20, 30, 40, 50]
y2 = [100, 200, 300, 400, 500]
# 绘制两个数据系列
p.line(x, y1, color='red', y_axis_label='A')
p.line(x, y2, color='blue', y_range_name='B', y_axis_label='B')
# 创建两个y轴范围对象
y_range1 = Range1d(start=min(y1), end=max(y1))
y_range2 = Range1d(start=min(y2), end=max(y2))
# 将y轴范围对象与相应的y轴关联
p.y_range = y_range1
p.extra_y_ranges = {"B": y_range2}
# 在右侧添加第二个y轴
p.add_layout(p.right[0])
# 添加图例
p.legend.location = 'top_left'
# 显示图表
show(p)
在这个示例中,我们创建了一个图表,其中A指标的数值范围为10到50,B指标的数值范围为100到500。通过使用两个不同的y轴范围,我们可以同时显示这两个指标的趋势,并且可以清楚地看到它们之间的差异。
总结
在本文中,我们介绍了如何在Bokeh中使用两个不同的y轴范围绘制一张图表。通过正确地添加和关联两个y轴范围对象,我们可以同时显示不同范围的数据,并且使图表更具可读性和信息量。