PyQt5的PyQtGraph实践系列2:绘制股票十字光标K线图

在之前的文章中,我们介绍了使用PyQtGraph在PyQt5中绘制股票K线图(https://zmister.com/archives/187.html),以及使用PyQtGraph绘制带十字光标的的股票走势折线图(https://zmister.com/archives/220.html)。

今天,我们(州的先生:zmister.com)将上述两者结合起来,在PyQt5中借助PyQtGtaph绘制一个带有十字光标的股票历史走势K线图。

一、创建图形界面窗口骨架

首先,我们来创建一个基础的图形界面。里面包含了:

  • 一个文本输入框,用于输入股票代码;
  • 一个下拉选择框,用于选择时间段;
  • 一个按钮,用于点击查询数据和生成K线图;
  • 一个空白图形,用于放置K线图;

通过如下代码进行创建:

运行程序,我们可以得到一个如下图所示的图形界面窗口:

接下来,我们创建一个K线图的图形绘制类,通过PyQt和PyQtGraph的绘图组件绘制K线图。

二、创建K线图绘制类

接着创建一个名为CandlestickItem()的类,其继承于pyqtgraph的GraphicsObject类。

通过QPicture和QPainter进行绘图操作实现K线图的绘制。具体代码如下所示:

这个类用于生成K线图的图形,其接收一个数组其中包含时间、开盘价、收盘价、最低价和最高价的列表,我们只需要将其添加到PyQtGraph的绘图方法中,就可以生成具体的K线图图形。

下面,我们来完善具体的K线图绘制方法。

三、生成K线图

在创建好K线图绘制类之后,我们来实现K线图的具体绘制工作。我们的数据来源于tushare这个第三方库提供的A股个股历史数据。获取数据之后,我们对数据进行加工,处理成CandlestickItem()类接受的数据格式,传入给CandlestickItem()。

在得到K线图之后,我们将其添加到之前实例化好的PlotWidget()部件self.k_plt中,并对图形添加设置其他属性,其代码如下所示:

这个方法将是我们点击【查询】按钮,对点击信号进行处理时需要调用的方法,它是在图形界面窗口中显示K线图的关键。

我们继续创建一个方法,用来调用plot_k_line()方法,并将其连接到【查询】按钮的点击信号上:

【查询】按钮点击信号绑定:

这样,我们运行代码,就可以通过输入股票代码和选择时间间隔来查看对应股票的动态历史K线图了,如下动图所示:

四、绘制十字光标

上面的图形界面程序生成了股票的K线图,但是我们却不能方便地查看到具体一天的价格变动,一个十字光标的鼠标指示必需的,我们接着来实现它。

这个方法将为我们的图形实时绘制生成一个十字光标和一个显示鼠标所在坐标日期的数据指标。

我们需要将其连接到self.k_plt这个图形部件的信号事件上,使得鼠标移动时可以实时响应:

现在运行代码,我们就可以看到生成的K线图有十字光标实时显示鼠标所在坐标日期的股票数据了。如下动图所示:

五、最后

这样我们就通过PyQt5和PyQtGraph实现了股票历史数据的查询和K线图的绘制。文章完整代码已经上传到百度网盘,链接地址详见【州的先生博客资源中心】

大家有好的实现方法或是其他想法,欢迎留言讨论~

猜你也喜欢

  1. gehaha说道:

    怎么加入知识星球啊

  2. 半九十说道:

    老师您好,问下加入十字光标之后当鼠标位置移出图线范围之后会有个明显的坐标轴移动延申的现象,比如光标移动出了图线的最右侧,然后坐标轴就会往右延申范围,尽管没有任何图线在右侧

    1. 州的先生说道:

      可以设置一下x轴的坐标范围,这样十字光标就延伸不出去了。

  3. 克里克说道:

    干货收下啦

发表评论

电子邮件地址不会被公开。