如何使用 Bokeh 在 Python 中生成蜡烛图?

如何使用 Bokeh 在 Python 中生成蜡烛图?

蜡烛图是股票交易分析中常见的一种图表类型,它能够清晰地展示股价的四个基本数据点:开盘价、收盘价、最高价和最低价。在 Python 中,我们可以使用 Bokeh 库来生成蜡烛图,并且能够在网页上进行交互式地展示。

更多Python教程,请阅读:Python 教程

准备工作

在开始生成蜡烛图之前,首先需要安装 Bokeh 库。可以使用 pip 命令来安装:

pip install bokeh

Bokeh 还需要额外安装一个可选的库 NumPy 来进行数据处理。

另外,我们还需要准备用于展示的股票数据。在本文中,我们使用 pandas_datareader 库来获取 Apple 公司的股票数据:

from pandas_datareader import data
import datetime

start = datetime.datetime(2021, 1, 1)
end = datetime.datetime.now()
apple_data = data.DataReader('AAPL', 'yahoo', start, end)

在这个示例中,我们定义了获取数据的时间范围为 2021 年 1 月 1 日至今,并使用了 pandas_datareader 库中的 DataReader 函数从雅虎财经获取了 AAPL(Apple)公司的股票数据。

生成蜡烛图

有了数据之后,我们就可以开始生成蜡烛图了。在 Bokeh 中,蜡烛图通过将一个矩形分为两部分来实现:上方为开盘价和收盘价的区间,下方为最高价和最低价的区间。在 Bokeh 中,有一个专门的蜡烛图绘制工具 Candlestick 来实现这个过程。

from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource
from bokeh.io import output_notebook

output_notebook()  # 在 Jupyter Notebook 中显示输出

inc = apple_data.Close > apple_data.Open
dec = apple_data.Open > apple_data.Close
source = ColumnDataSource(data=dict(
    x=apple_data.index,
    open=apple_data.Open,
    close=apple_data.Close,
    high=apple_data.High,
    low=apple_data.Low,
    inc=inc,
    dec=dec
))

p = figure(x_axis_type="datetime", toolbar_location=None)
p.title.text = 'AAPL Candlestick'
p.xaxis.major_label_orientation = 3.14/4

# 绘制蜡烛图
p.segment('x', 'high', 'x', 'low', color="black", source=source)
p.vbar('x', width=0.7, open='open', close='close', fill_color="#D5E1DD", line_color="black", source=source, 
        fill_alpha=0.5, line_alpha=0.5, legend_label="Price")

show(p)

在这个示例中,我们首先通过 pandas 的比较运算符生成了 inc 和 dec 两个 Series,为后续绘制时提供了颜色上的区分。然后使用 ColumnDataSource 函数将数据存储在一个字典中,用于后续传递给绘图函数。

接着,我们创建一个 Figure 对象,并设置标题和 X 轴的时间刻度方向。接下来,我们使用 segment 函数绘制每根蜡烛的高低线段,再使用 vbar 函数绘制蜡烛的上下矩形。这里需要注意的是,vbar 函数的 open 和 close 参数分别指定了开盘价和收盘价。

最后,我们使用 show 函数将绘制的图形显示在网页上。

增加交互功能

Bokeh 还提供了许多交互功能,方便用户对图表进行操作。例如,在蜡烛图中,我们可以使用悬停工具 HoverTool 来展示每根蜡烛的具体数值。下面是添加悬停工具的示例代码:

from bokeh.models import HoverTool

hover = HoverTool(
    tooltips=[
        ("Date", "@x{%F}"),
        ("Open", "@open{0.00}"),
        ("Close", "@close{0.00}"),
        ("High", "@high{0.00}"),
        ("Low", "@low{0.00}"),
    ],
    formatters={
        'x': 'datetime'
    },
    mode='vline'
)
p.add_tools(hover)

show(p)

在这个示例中,我们使用 HoverTool 函数创建了一个悬停工具,并设置了要展示的内容和格式。此外,我们还指定了 x 字段用 datetime 格式来显示,mode 参数用于指定工具的触发方式,vline 表示垂直线条触发,即悬停在任意位置时都会显示数值。

最后,我们使用 add_tools 函数将悬停工具添加到图表中,再次使用 show 函数将图表展示出来。这时,当鼠标悬停在任意位置时,会弹出一个框框显示该蜡烛的具体数值。

结论

通过本文的介绍,我们学习了如何使用 Bokeh 在 Python 中生成蜡烛图,并添加了交互功能。当然,Bokeh 还提供了许多其它的功能和工具,例如标注、选择、缩放、平移等等,有兴趣的读者可以继续深入学习和探索。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程