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, _encoding)

except AttributeError:

def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName(_fromUtf8("MainWindow"))

MainWindow.resize(800, 600)

self.centralwidget = QtGui.QWidget(MainWindow)

self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

self.verticalLayout_2 = QtGui.QVBoxLayout(self.centralwidget)

self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout"))

self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))

self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtGui.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 31))

self.menubar.setObjectName(_fromUtf8("menubar"))

MainWindow.setMenuBar(self.menubar)

self.drawChart = DrawChart(ktype='D')

self.verticalLayout_2.addWidget(self.drawChart.pyqtgraphDrawChart())

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))

class DrawChart():

def __init__(self, code='sz50', start=str(datetime.date.today() - datetime.timedelta(days=200)), end=str(datetime.date.today() + datetime.timedelta(days=1)), ktype='D'):

self.code = code

self.start = start

self.end = end

self.ktype = ktype

self.data_list, self.t = self.getData()

def pyqtgraphDrawChart(self):

try:

self.item = CandlestickItem(self.data_list)

self.xdict = {0: str(self.hist_data.index[0]).replace('-', '/'), int((self.t + 1) / 2) - 1: str(self.hist_data.index[int((self.t + 1) / 2)]).replace('-', '/'), self.t - 1: str(self.hist_data.index[-1]).replace('-', '/')}

self.stringaxis = pg.AxisItem(orientation='bottom')

self.stringaxis.setTicks([self.xdict.items()])

self.plt = pg.PlotWidget(axisItems={'bottom': self.stringaxis}, enableMenu=False)

self.plt.addItem(self.item)

# self.plt.showGrid(x=True, y=True)

return self.plt

except:

return pg.PlotWidget()

def getData(self):

self.start = str(datetime.date.today() - datetime.timedelta(days=150))

self.end = str(datetime.date.today() + datetime.timedelta(days=1))

self.hist_data = ts.get_hist_data(self.code, self.start, self.end, self.ktype).sort_index()[-300:-1]

data_list = []

t = 0

for dates, row in self.hist_data.iterrows():

open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20 = row[:10]

datas = (t, open, close, low, high, volume, price_change, p_change, ma5, ma10, ma20)

data_list.append(datas)

t += 1

return data_list, t

class CandlestickItem(pg.GraphicsObject):

def __init__(self, data):

pg.GraphicsObject.__init__(self)

self.data = data

self.generatePicture()

def generatePicture(self):

self.picture = QtGui.QPicture()

p = QtGui.QPainter(self.picture)

p.setPen(pg.mkPen('w'))

w = (self.data[1][0] - self.data[0][0]) / 3.

prema5 = 0

prema10 = 0

prema20 = 0

for (t, open, close, min, max, volume, price_change, p_change, ma5, ma10, ma20) in self.data:

if open > close:

p.setPen(pg.mkPen('g'))

p.setBrush(pg.mkBrush('g'))

else:

p.setPen(pg.mkPen('r'))

p.setBrush(pg.mkBrush('r'))

p.drawLine(QtCore.QPointF(t, min), QtCore.QPointF(t, max))

p.drawRect(QtCore.QRectF(t - w, open, w * 2, close - open))

if prema5 != 0:

p.setPen(pg.mkPen('w'))

p.setBrush(pg.mkBrush('w'))

p.drawLine(QtCore.QPointF(t-1, prema5), QtCore.QPointF(t, ma5))

prema5 = ma5

if prema10 != 0:

p.setPen(pg.mkPen('c'))

p.setBrush(pg.mkBrush('c'))

p.drawLine(QtCore.QPointF(t-1, prema10), QtCore.QPointF(t, ma10))

prema10 = ma10

if prema20 != 0:

p.setPen(pg.mkPen('m'))

p.setBrush(pg.mkBrush('m'))

p.drawLine(QtCore.QPointF(t-1, prema20), QtCore.QPointF(t, ma20))

prema20 = ma20

p.end()

def paint(self, p, *args):

p.drawPicture(0, 0, self.picture)

def boundingRect(self):

return QtCore.QRectF(self.picture.boundingRect())

if __name__ == "__main__":

import sys

app = QtGui.QApplication(sys.argv)

MainWindow = QtGui.QMainWindow()

ui = Ui_MainWindow()

ui.setupUi(MainWindow)

MainWindow.show()

sys.exit(app.exec_())

运行效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助。

Ubuntu 18.04 + Python3 下完整代码下载:

------------------------------------------分割线------------------------------------------

下载Linux公社1号FTP服务器

FTP地址:ftp://ftp1.linuxidc.com

用户名:ftp1.linuxidc.com

密码:www.linuxidc.com

在 2019年LinuxIDC.com/6月/Python使用PyQtGraph绘制股票行情K线图/

------------------------------------------分割线------------------------------------------

python绘制k线图的步骤_Python使用PyQtGraph绘制股票行情K线图相关推荐

  1. android 股票 开发,Android版的股票行情K线图开发

    现在在手上的是一个证券资讯类型的app,其中有涉及到股票行情界面,行情中有K线图等,看到网上很多人在求这方面的资料,所以我特地写了一个demo在此处给大家分享一下. 下面是做出来的效果图: 这个 界面 ...

  2. android 股票行情界面,Android版的股票行情K线图开发

    转载请注明出住:http://blog.csdn.net/andywuchuanlong 现在在手上的是一个证券资讯类型的app,其中有涉及到股票行情界面,行情中有K线图等,看到网上很多人在求这方面的 ...

  3. android开发最新行情,Android版的股票行情K线图开发

    现在在手上的是一个证券资讯类型的app,其中有涉及到股票行情界面,行情中有K线图等,看到网上很多人在求这方面的资料,所以我特地写了一个demo在此处给大家分享一下. 下面是做出来的效果图: 背景图是利 ...

  4. python做的游戏可以导出吗_Python for RenderDoc批量导出模型和贴图

    故事背景: 美术那里有需求,需要别人游戏的模型,来借鉴一下,问我是否有工具可以一键导出模型.我就搜索了一下RenderDoc批量导出图片,结果搜到了用C++改RenderDoc源码的文章.让Rende ...

  5. 用python读取excel数据、并作图_Python读取Excel表格,并同时画折线图和柱状图的方法...

    今日给大家分享一个Python读取Excel表格,同时采用表格中的数值画图柱状图和折线图,这里只需要几行代码便可以实. 首先我们需要安装一个Excel操作的库xlrd,这个很简单,在安装Python后 ...

  6. python绘制k线图_Python使用PyQtGraph绘制股票行情K线图

    PyQtGraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于其在内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架, ...

  7. python画聚类图、并且把聚类图保存起来_Python利用igraph绘制复杂网络聚类(社区检测)结果图-Go语言中文社区...

    前言:研究生期间主要做复杂网络聚类,也称为社区检测.临毕业前,老师让之前发表的论文里的算法代码C化,并写出界面进行可视化.由于之前虽然做过可视化,但基本上都是将聚类结果导入到pajek或者gephi这 ...

  8. python画的图怎么保存_python通过PyGame绘制图像并保存为图片文件的代码

    把开发过程中常用的一些内容片段记录起来,下边内容是关于python通过PyGame绘制图像并保存为图片文件的内容,希望对大伙有较大好处. ''' pg_draw_circle_save101.py d ...

  9. python turtle画四叶草的步骤_python turtle工具绘制四叶草的实例分享

    本篇文章介绍了python使用turtle库绘制四叶草的方法,代码很简单,希望对学习python的朋友有帮助. import turtle import time turtle.setup(650., ...

最新文章

  1. Nio得知3——该示范基地:多路复用器模式
  2. android上使用git
  3. 关于 SAP Spartacus 电商云 UI feature level 的测试步骤
  4. Swing basic
  5. [转载] java clone方法_Java Calendar clone()方法与示例
  6. springboot实现数据库数据导出到Excel中并下载到浏览器本地
  7. celery java_Celery(分布式任务队列) 的使用方法总结
  8. 计算机组成原理 蒋本珊pdf,计算机组成原理 蒋本珊 习题解答.pdf
  9. ESP8266在arduino下开启路由转发实现wifi中继的方法小记
  10. 稳定kms服务器,kms服务器
  11. GCPC 2013_A Boggle DFS+字典树 CSU 1457
  12. 学计算机颈椎,长期玩电脑颈椎病
  13. HTML5+CSS大作业——汽车自驾游(10页) 主题HTM5网页设计作业成品
  14. 转载:ZedGraph使用帮助
  15. 用git将项目文件上传至github
  16. 2011 10.1 GHOST XP SP3 快速装机纯净国庆版 V1.0
  17. html引入css文件和js文件方式
  18. 英语语法快速入门5--状语和状语从句(附思维导图)
  19. 软件测试工作指导书,软件测试试验指导书.DOC
  20. 华为AC+AP设备上线入门,中小网络AP上线配置思路入门

热门文章

  1. springboot 获取application参数_(最新 9000 字 )Spring Boot 配置特性解析
  2. kindle词典_kindle盖泡面是什么梗?kindle官方盖章泡面盖子 网友:定位准确
  3. c语言词法分析程序实验报告,实验一词法分析程序设计与实现
  4. linux虚拟机网络查看的方式
  5. 解决fatal: 不是一个 git 仓库(或者任何父目录)的方法
  6. IDA执行python脚本文件,python编辑器的操作
  7. Python 开发工具链全解
  8. Python 运算符 if和while的使用
  9. Python range()的解释和可视化
  10. 倒计时几秒_和平精英:倒计时0秒时进圈会不会被淘汰?主播展示极限卡圈