PyQt绘制股票K线多图Y坐标对齐

简介: PyQt绘制股票K线多图Y坐标对齐

在做股票的K线图与成交量图的时候,成交量数字宽度与K线数字宽度不一致,会导致Y坐标位置bu不在同一个位置上, 如下图:



pyqtgraph没有直接调整的Y轴位置。但是pyqtgraph本身就是使用QGrapics框架实现的,因此直接查看pyqtgraph源代码。


负责处理坐标轴的为AxisItem类, 再查看内部实现,发现存在两个接口setHeight和setWidth两个接口, 如下图:


意思是设置这两个接口则可以改变坐标宽度。因此可以使用此方法改变宽度来对齐Y轴。

    def y_axis_max_width(self) -> int:
        font = self.font()
        fm = QFontMetrics(font)
        y_max = self._data['high'].max()
        y_min = self._data['low'].min()
        y_max_len = fm.width("%.02f" % y_max)
        y_min_len = fm.width("%.02f" % y_min)
        max_len = max(y_max_len, y_min_len)
        return max_len
    def set_y_axis_width(self, width):
        self.y_axis.setWidth(width)
        self._pw.setAxisItems({'left': self.y_axis})
        self.update()
    def update_data(self, data):
        self._k_widget.update_data(data)
        self._line_widget.update_data(data)
        self._vol_widget.update_data(data)
        self._k_widget.view_box().setXLink(self._vol_widget.view_box())
        self._line_widget.view_box().setXLink(self._vol_widget.view_box())
        k_y_width = self._k_widget.y_axis_max_width()
        l_y_width = self._line_widget.y_axis_max_width()
        v_y_width = self._vol_widget.y_axis_max_width()
        max_width = max([k_y_width, l_y_width, v_y_width])
        if k_y_width <= max_width:
            self._k_widget.set_y_axis_width(max_width)
        if l_y_width <= max_width:
            self._line_widget.set_y_axis_width(max_width)
        if v_y_width <= max_width:
            self._vol_widget.set_y_axis_width(max_width)


根据数据查询最大数据和最小数据,然后获取最大像素作为宽度,然后在更新数据的时候设置最大的宽度即可。


具体结果如下:

相关文章
|
6月前
|
机器学习/深度学习 算法 Linux
Yolov5水果分类识别+pyqt交互式界面
Yolov5水果分类识别+pyqt交互式界面
|
6月前
|
开发框架 开发者 Python
探索Python GUI编程:从Tkinter到PyQt的全方位使用
在当今技术发展日新月异的时代,Python作为一种简洁高效的编程语言,拥有广泛的应用领域。其中,GUI(图形用户界面)编程是Python开发者经常涉足的领域之一。本文将介绍两个常用的Python GUI库——Tkinter和PyQt,并深入探讨其使用方法、特点以及适用场景,帮助读者全面了解Python GUI编程的魅力。
|
6月前
|
数据可视化 Linux C++
Python GUI编程:Tkinter与PyQt的选择
Python作为一门流行的编程语言,在GUI编程领域也有着非常强大的工具。其中,Tkinter和PyQt是两个备受推崇的GUI库。本文将介绍这两个库的优缺点,并帮助读者决定应该选择哪一个。
|
14天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
55 7
|
1月前
|
Python
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
本文提供了一份详细的PySide6与VSCode联动的操作指南,包括安装配置VSCode、安装必要的扩展、配置扩展以及编辑和运行PySide6项目。文中还提到了相关工具如uic.exe、rcc.exe和designer.exe的用途,并提供了进一步学习的资源。
257 1
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
|
2月前
|
Python
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
|
1月前
|
XML JSON Ubuntu
Python实用记录(十五):PyQt/PySide6打包成exe,精简版(nuitka/pyinstaller/auto-py-to-exe)
本文介绍了使用Nuitka、PyInstaller和auto-py-to-exe三种工具将Python的PyQt/PySide6应用打包成exe文件的方法。提供了详细的安装步骤、打包命令和参数说明,适合新手学习和实践。
282 0
|
3月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
190 1
|
3月前
|
数据可视化 Linux API
Tkinter与PyQt的对比
【8月更文挑战第3天】本文对比了Python中两大GUI工具包Tkinter与PyQt。Tkinter作为Python标准库的一部分,易于学习且轻量级,适合快速开发简单的跨平台GUI应用。PyQt功能强大且灵活,支持复杂应用的开发,更适合有经验的开发者。通过示例代码展示了如何使用这两种工具包创建基本的GUI应用及图像查看器,帮助读者理解它们的不同之处。选择哪个工具包取决于项目的具体需求、开发者的经验以及对功能和性能的要求。
98 4
|
6月前
|
Python
PyQt---------信号与槽函数的关系
PyQt---------信号与槽函数的关系
162 1