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_())
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Android版的股票行情K线图开发,包括了Android版的股票行情K线图开发的使用技巧和注意事项,需要的朋友参考一下 现在在手上的是一个证券资讯类型的app,其中有涉及到股票行情界面,行情中有K线图等,看到网上很多人在求这方面的资料,所以我特地写了一个demo在此处给大家分享一下。 下面是做出来的效果图: 背景图是利用canvas先画出一个矩形,然后再画几根虚线,均线图是通过pa
本文向大家介绍Python绘制股票移动均线的实例,包括了Python绘制股票移动均线的实例的使用技巧和注意事项,需要的朋友参考一下 1. 前沿 移动均线是股票最进本的指标,本文采用numpy.convolve计算股票的移动均线 2. numpy.convolve numpy.convolve(a, v, mode='full') Returns the discrete, linear convo
本文向大家介绍Android 曲线图的绘制示例代码,包括了Android 曲线图的绘制示例代码的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Android 曲线图的绘制示例代码,分享给大家,具体如下: 效果展示 效果展示.gif 使用方式 实现思路 横坐标是固定的, 纵坐标需要跟随曲线传入的数值去动态的调整 绘制坐标轴: 纵横交错的网格 根据用户传入坐标数值去绘制坐标轴上的数值 给X轴和Y轴
安装方法 pip install matplotlib 绘制一元函数图像y=ax+b 创建single_variable.py,内容如下: # coding:utf-8 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) import matplotlib.pyplot as plt import numpy as np plt.f
问题内容: 如果我在一个自动收录器频道范围内通话并调用stop(),则该频道已停止但未关闭。 在此示例中: 运行产生: 因此,goroutine永远不会退出。有没有更好的方法来处理这种情况?我应该担心goroutine永远不会退出吗? 问题答案: 在第二个频道上发出“完成”信号,然后在代码行情清单和已完成的频道之间选择您的goroutine。 根据您真正想做的事情,可能存在更好的解决方案,但这很难
本文向大家介绍使用Python的networkx绘制精美网络图教程,包括了使用Python的networkx绘制精美网络图教程的使用技巧和注意事项,需要的朋友参考一下 最近因为数学建模3天速成Python,然后做了一道网络的题,要画网络图。在网上找了一些,发现都是一些很基础的丑陋红点图,并且关于网络的一些算法也没有讲,于是自己进http://networkx.github.io/学习了一下。以下仅