实战PyQt5: 140-QChart图表之烛台图_pyqt candlestickset-程序员宅基地

技术标签: python  gui编程  qt  编码  pyside2  pyqt5  

烛台图(Candlestick Chart)最常见的应用就是表示诸如股票交易当日成交价格幅度以及开盘及收盘价格的图表。QChart中提供类QCandlestickSeries, QCandlestickSet来实现绘制烛台图。

QCandlestickSeries

QCandlestickSeries类将数据表示为烛台样的图形。本类充当单个条目的容器。使用QBarCategoryAxis时,每个条目都绘制到自己的类别中。QDateTimeAxis和QValueAxis可以用来替代QBarCategoryAxis。在这种情况下,每个条目均根据其时间戳值绘制。

QCandlestickSeries常用函数:

  • append(self, set):将由set指定的单个烛台条目添加到烛台图中,并获得其所有权。如果该项为空或已在系列中,则不会附加该项。如果添加成功返回True,否则返回False。
  • clear(self): 永久删除图中的所有条目。
  • remove(self, set):从烛台图中删除set指定的条目。
  • take(self, set):从图中获取由set指定的单个条目。但不删除该条目。
  • setBodyOutlineVisible(self, bodyOutlineVisible):设置烛台轮廓是否可见。
  • setBodyWidth(self, bodyWidth):设置烛台条目的相对宽度,范围为0.0到1.0。
  • setBrush(self, brush):设置烛台条目的画刷。
  • setPen(self, pen):设置烛台条目线条的画笔。
  • setCapsVisible(self, capsVisible):设置烛台条目盖是否可见。
  • setCapsWidth(self, capsWidth): 设置烛台条目盖的宽度。
  • setDecreasingColor(self, decreasingColor):设置烛台条目递减颜色。
  • setIncreasingColor(self, increasingColor):设置烛台条目递增颜色。
  • setMaximumColumnWidth(self, maximumColumnWidth):设置烛台条目的最大宽度(以像素为单位。设置为负值表示没有最大宽度。所有负值都将转换为-1.0 )。
  • setMinimumColumnWidth(self, minimumColumnWidth):设置烛台条目的最小宽度(以像素为单位。设置为负值表示没有最大宽度。所有负值都将转换为-1.0 )。

QCandlestickSeries常用信号:

  • bodyOutlineVisibilityChanged(self):烛台条目主体轮廓的可见性更改时,将发出此信号。
  • bodyWidthChanged(self):烛台条目的宽度更改时,将发出此信号。
  • brushChanged(self):烛台条目画刷更改时,将发出此信号。
  • candlestickSetsAdded(self, sets):当sets指定的烛台条目添加到烛台图中时,将发出此信号。
  • candlestickSetsRemoved(self, sets):从烛台图中删除sets指定的烛台条目时,将发出此信号。
  • capsVisibilityChanged(self):烛台条目盖的可见属性更改时,将发出此信号。
  • capsWidthChanged(self): 烛台条目盖的宽度更改时,将发出此信号。
  • clicked(self, set): 单击图表上由set指定的烛台条目时,将发出此信号。
  • countChanged(self):当烛台图中中烛台条目的数量发生更改时,将发出此信号。
  • decreasingColorChanged(self): 当烛台条目的颜色减少时,将发出此信号。
  • doubleClicked(self,set):双击图表上由set指定的烛台条目时,将发出此信号。
  • hovered(self, status, set):当鼠标悬停在所指定的烛台条目set时,这个信号被发射。当鼠标移至该条目上方时,state变为True,而当鼠标再次移开时,state变为False。
  • increasingColorChanged(self):烛台条目颜色增加时,将发出此信号。
  • maximumColumnWidthChanged(self): 烛台条目的最大列宽发生变化时,将发出此信号。
  • minimumColumnWidthChanged(self):烛台条目的最小列宽发生变化时,将发出此信号。
  • penChanged(self):烛台图的画笔发生更改时会发出此信号。
  • pressed(self, set):当用户单击set指定的烛台条目并按住鼠标按钮时,将发出此信号。
  • released(self, set):当用户释放set所指定的烛台条目上的鼠标时,将发出此信号。

QCandlestickSet

QCandlestickSet类表示烛台图中的单个烛台条目。需要五个值来创建烛台条目的图形表示形式:openhighlowclosetimestamp。可以在创建对象时设置,也可以使用setOpen(),setHigh(),setLow(),setClose()和setTimestamp()进行设置。

QCandlestickSet常用函数:

  • setBrush(self, brush):设置条目的画刷为brush。
  • setPen(self, pen):设置条目的画笔为pen。
  • setClose(self, close):设置条目的收盘价为close。
  • setHigh(self, high):设置条目的上限值为high。
  • setLow(self, low):设置条目的下限值为low。
  • setOpen(self, open):设置条目的开盘价。
  • setTimestamp(self, timestamp):设置条目的时间戳。

QCandlestickSet常用信号:

  • brushChanged(self):更改时画刷,将发出此信号。
  • penChanged(self):更改画笔时,将发出此信号。
  • clicked(self):单击条目时,将发出此信号。
  • doubleClicked(self):双击条目时,将发出此信号。
  • hovered(self, status):当鼠标悬停在条目上时,将发出此信号。
  • pressed(self):当用户单击条并按住鼠标按钮时,将发出此信号。
  • released(self):当用户释放对条目的释放鼠标时,将发出此信号。
  • closeChanged(self):条目收盘价发生改变时发出此信号。
  • highChanged(self):条目上限值更改时,将发出此信号。
  • lowChanged(self):条目下限值更改时,将发出此信号。
  • openChanged(self):条目开盘价变化时发出此信号。
  • timestampChanged(self):当条目时间戳更改时,将发出此信号。

烛台图示例

参考Qt样例代码,创建类CandlestickDataReader用于读取文本文件,并将其数据设置为QCandlestickSet项,添加到QCandlestickSeries中,然后将QCandlestickSeries对象设置到图表,使用图表视图显示出来。使用的数据文件acme_data.txt的数据如下图:

 acme_data.txt

资源文件candlestickdata.qrc:

<RCC>
    <qresource prefix="/">
        <file alias="acme">acme_data.txt</file>
    </qresource>
</RCC>

完整代码如下:

import sys
from PyQt5.QtCore import Qt, QIODevice, QTextStream, QFile, QDateTime
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from  PyQt5.QtChart import (QChartView, QChart, QCandlestickSeries, QCandlestickSet,
                            QBarCategoryAxis, QValueAxis)
 
import candlestickdata_rc
 
#读取文本数据
class CandlestickDataReader(QTextStream):
    def __init__(self, device, parent = None):
        super(CandlestickDataReader, self).__init__(parent)
        self.setDevice(device)
    
    def readFile(self, device):
        self.setDevice(device)
        
    #从文本路中读取一行交易数据
    def readCandlestickSet(self):
        line = self.readLine()
        if line.startswith('#') or line=='':
            return None
        
        strList = line.split(' ')
        if len(strList) != 5:
            return None
        
        timestamp = float(strList[0])
        open = float(strList[1])
        high = float(strList[2])
        low = float(strList[3])
        close = float(strList[4])
        
        candlestickSet = QCandlestickSet(timestamp)
        candlestickSet.setOpen(open)
        candlestickSet.setHigh(high)
        candlestickSet.setLow(low)
        candlestickSet.setClose(close)
        
        return candlestickSet
               
 
class DemoChartCandlestick(QMainWindow):
    def __init__(self, parent=None):
        super(DemoChartCandlestick, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战 Qt for Python: QChart样条曲线演示')      
        # 设置窗口大小
        self.resize(600, 360)
        
        self.createChart()
        
    def createChart(self):
                
        #烛台图
        acmeSeries = QCandlestickSeries()
        acmeSeries.setName('Acm Ltd')
        acmeSeries.setIncreasingColor(QColor(Qt.green))
        acmeSeries.setDecreasingColor(QColor(Qt.red))
        
        acmeData = QFile(':acme')
        if not acmeData.open(QIODevice.ReadOnly | QIODevice.Text):
            QMessageBox.information(self, '读数据', '不合法的数据文件')
            return
        
        dataReader = CandlestickDataReader(acmeData)
        categories = []
        while not dataReader.atEnd():
            csSet = dataReader.readCandlestickSet()
            if not csSet is None:
                acmeSeries.append(csSet)
                categories.append(QDateTime.fromMSecsSinceEpoch(csSet.timestamp()).toString('dd'))
              
        #创建图表
        chart = QChart()
        chart.addSeries(acmeSeries)
        chart.setTitle('Acme 公司历史数据 (2015年7月)')
        chart.setAnimationOptions(QChart.SeriesAnimations)
        
        #坐标轴设置
        chart.createDefaultAxes()
        
        #横轴
        axisX = chart.axes(Qt.Horizontal)[0]
        axisX.setCategories(categories)
        
        #调整纵坐标轴值的范围
        axisY = chart.axes(Qt.Vertical)[0]
        axisY.setMax(int(axisY.max() * 1.01))
        axisY.setMin(int(axisY.min() * 0.99))
        
        #图例位置
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)
         
        #图表视图
        chartView = QChartView(chart)
        chartView.setRenderHint(QPainter.Antialiasing)
        
        self.setCentralWidget(chartView)
      
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoChartCandlestick()
    window.show()
    sys.exit(app.exec())   

运行结果如下图:

 QChart烛台图演示

本文知识点

  • 烛台图最常见的应用类似股票交易显示。
  • 加载交易数据创建烛台图显示。

前一篇:实战PyQt5: 139-QChart图表之面积图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/seniorwizard/article/details/125556673

智能推荐

[译]使用MVI打造响应式APP(四):独立性UI组件-程序员宅基地

文章浏览阅读130次。原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART4 - INDEPENDENT UI COMPONENTS作者:Hannes Dorfmann译者:却把清梅嗅这篇博客中,我们将针对如何 如何构建独立组件 进行探讨,我将阐述为什么在我看来 父子关系会导致坏味道的代码,以及为何这种关系是没有意义的。有这样一个问题时不时涌现在我的脑海中—— MVI...

tensorflow经过卷积及池化层后特征图的大小计算_池化层后特征图尺寸-程序员宅基地

文章浏览阅读662次。https://blog.csdn.net/qq_32466233/article/details/81075288_池化层后特征图尺寸

使用vue-echarts异步数据加载,不能重新渲染页面问题。_vue echart初始化渲染过后无法重新渲染-程序员宅基地

文章浏览阅读3.3k次。一、问题说明我是用的是官方示例中的这个饼状图。结果在应用到项目中后发现利用axios请求到的数据无法渲染到页面中去。并且其中value值已经改变。二、解决办法用$set改变value的值,并且重新绘制一遍表格。$set是全局 Vue.set 的别名。$set用法:向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为..._vue echart初始化渲染过后无法重新渲染

nrf51822 蓝牙协议栈 例程入门 点灯_nrf51822例程-程序员宅基地

文章浏览阅读6.6k次。1,参考文档: 青云蓝牙光盘V4.1\6.青云系列教程青风出品\3:BLE蓝牙应用篇\2.BLE实验第二节:蓝牙LED任务读写使用说明.pdf青云蓝牙光盘V4.1\6.青云系列教程青风出品\4:蓝牙原理详解手把手教你用蓝牙:蓝牙LED任务读写原理任务详解.pdf2,进入目录: 青云蓝牙光盘V4.1\5.青云测试代码\ 第三部分:BLE蓝牙实验\BLE实验3:按键蓝牙通知\B..._nrf51822例程

TortoiseGit小乌龟工具上传解析-程序员宅基地

文章浏览阅读5.2k次。使用tortoiseGit工具一直出错,由于没有设置自动获取putty key这一项,从网上找了一个教程,现分享如下,以做参考:前半部分参考网上的例子:http://www.showerlee.com/archives/1300,但会出现“git did not exit cleanly (exit code 128)”错误1.在D盘新建一个目录,例如"D:\Git",并进入目录右键目录空白处选择...

bindgetuserinfo="onGotUserInfo" and @getuserinfo="onGotUserInfo_component "pages/index/index" does not have a meth-程序员宅基地

文章浏览阅读1.9k次。发现使用uni-app获取UserInfo,结果使用微信官网栗子发现只弹出提示,没获取到值如下<button open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="onGotUserInfo">获取用户信息</button>onGotUserInfo: function (e) { console.log(e) ..._component "pages/index/index" does not have a method "getuserinfo" to handle

随便推点

python translate函数_Python:内置函数makestrans()、translate()-程序员宅基地

文章浏览阅读287次。一、makestrans()格式: str.maketrans(intab,outtab);功能:用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。注:两个字符串的长度必须相同,为一一对应的关系。注:Python3.6中已经没有string.maketrans()了,取而代之的是内建函数:bytearray...._python maketrance

Set集合详解-程序员宅基地

文章浏览阅读5.7k次,点赞9次,收藏14次。set集合的简介,它的特点和遍历方式。介绍了HashSet重复元素存储底层原理,LinkedHashSet,TreeSet排序方法,SortedSet获取集合值的方法_set集合

详解智慧城市排水管理系统整体方案_污水处理智慧管理系统案列-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏29次。随着城市规模的不断扩大和现代化程度的日益提高,城市排水管网越来越复杂,一些城市相继发生大雨内涝、管线泄漏爆炸、路面塌陷等事件,严重影响了人民群众生命财产安全和城市运行秩序。因此,摸清排水管网设施资产家底、建立排水管网地理信息系统,用现代化的技术手段对排水系统进行科学管理显得迫在眉睫。以时空信息为基础,充分利用感知监测网、物联网、云计算、移动互联网、工业控制和水力模型等新一代信息技术,全方位感..._污水处理智慧管理系统案列

详解NTFS文件系统_ntfs文件系统中,磁盘上的所有数据包括源文件都是以什么的形式存储-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏13次。上篇在详解FAT32文件系统中介绍了FAT32文件系统存储数据的原理,这篇就来介绍下NTFS文件系统。NTFS、用过Windows系统的人都知道,它是一个很强大的文件系统,支持的功能很多,存储的原理也很复杂。目前绝大多数Windows用户都是使用NTFS文件系统,它主要以安全性和稳定性而闻名,下面是它的一些主要特点。安全性高:NTFS支持基于文件或目录的ACL,并且支持加密文件系统(E_ntfs文件系统中,磁盘上的所有数据包括源文件都是以什么的形式存储

【深度学习】【目标检测】损失函数smooth L1 Loss_smooth_l1_loss公式-程序员宅基地

文章浏览阅读1.2k次。pytorch之常用Loss函数总结参考文档L1、L2、smooth L1 Losssoftmax_cross_entropy_with_logitssparse_softmax_cross_entropy_with_logitsbinary_cross_entropysigmoid_cross_entropy参考文档参考文档参考文档L1、L2、smooth L1 Losssoftmax..._smooth_l1_loss公式

PAT 乙级 1017 (方法 + 代码)_pat 1017乙-程序员宅基地

文章浏览阅读462次。1017 A除以B (20 分)本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入格式:输入在一行中依次给出 A 和 B,中间以 1 空格分隔。输出格式:在一行中依次输出 Q 和 R,中间以 1 空格分隔。输入样例:123456789050987654321 7输出样例:17636..._pat 1017乙