Python使用PyQtGraph绘制股票行情K线图

本文介绍了如何利用Python的PyQtGraph库绘制股票K线图。PyQtGraph因其高效的数据处理和实时交互性在科学计算领域广泛应用。文章详细讲解了K线图的基本概念,并展示了使用PyQtGraph实现的K线图示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PyQtGraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于其在内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架,因此它在大数据量的处理及快速显示方面有着天然的优势,非常适合于需要快速绘图更新、视频或实时交互性的操作场合,在数学、科学和工程领域都有着广泛的应用。

K线图介绍

对于股票交易者来讲,K线图是弄清股票一段时间走势的一种最基本的图形工具,K线分为阳线和阴线,阳线和阴线都包含了开盘价、收盘价、最高价和最低价,一般K线如下图所示:

当收盘价大于开盘价时,称为阳线,在图形上一般用红色表示,反之,当收盘价低于开盘价时,称为阴线,在图形上一般用绿色表示。由于其形状颇似一根根蜡烛,K线图有时也叫做蜡烛图。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'QWidget_plot.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from PyQt4 import QtCore, QtGui
import datetime
import pyqtgraph as pg
import tushare as ts

try:
  _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
  def _fromUtf8(s):
    return s

try:
  _encoding = QtGui.QApplication.UnicodeUTF8
  def _translate(context, text, disambig):
    return QtGui.QApplication.translate(context, text, disambig, _encodin
### 使用PyQtGraph绘制K线图 为了利用PyQtGraph的强大性能来绘制股票行情中的K线图,可以按照如下方法构建程序。首先需要安装必要的库: ```bash pip install pyqtgraph numpy pandas ``` 导入所需的模块并准备数据源。这里假设有一个CSV文件`stock_data.csv`包含了日期、开盘价、最高价、最低价和收盘价的信息。 ```python import sys from datetime import datetime import pandas as pd import pyqtgraph as pg from pyqtgraph.Qt import QtGui, QtCore import numpy as np class CandlestickItem(pg.GraphicsObject): def __init__(self, data): """data must have fields: time, open, close, min, max""" pg.GraphicsObject.__init__(self) self.data = data self.generatePicture() def generatePicture(self): self.picture = QtGui.QPicture() p = QtGui.QPainter(self.picture) w = (self.data[1][0] - self.data[0][0]) / 3. for (t, open, close, low, high) in self.data: p.setPen(pg.mkPen('w')) if close >= open: p.setBrush(pg.mkBrush('g')) # green color when closing price is higher than opening else: p.setBrush(pg.mkBrush('r')) # red color otherwise p.drawLine(QtCore.QPointF(t, low), QtCore.QPointF(t, high)) p.drawRect(QtCore.QRectF(t-w, open, w*2, close-open)) p.end() def main(): app = QtGui.QApplication([]) df = pd.read_csv('stock_data.csv') # Convert date strings to numbers using matplotlib's date2num function or similar method dates = [datetime.strptime(d, '%Y-%m-%d').timestamp() for d in df['date']] data_list = list(zip(dates, df.open.values, df.close.values, df.low.values, df.high.values))[:] item = CandlestickItem(data=data_list) plt = pg.plot(title="Candlestick Chart with PyQtGraph") plt.addItem(item) if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): QtGui.QApplication.instance().exec_() if __name__ == '__main__': main() ``` 这段代码定义了一个自定义图形项`CandlestickItem`用于表示单根蜡烛棒,并通过读取CSV文件加载股价数据,最后调用`pg.plot()`函数创建窗口并将蜡烛图表添加到该窗口中[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值