PySide6(QTChart) 如何在X轴上放大并让Y轴范围动态变化

如何解决PySide6(QTChart) 如何在X轴上放大并让Y轴范围动态变化

我试图让我的烛台图表能够滚动进出,这将影响 x 轴上的日期和 y 轴上的范围。例如,如果我缩小日期应该加宽范围,同时保持所有烛台有点中心化,并且当我放大 y 轴范围应该变得更紧导致烛台更靠近并且 x 轴日期为不那么分散,目前这是我现在正在使用的图表的最小工作产品:

from PySide6.QtCharts import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from functools import cached_property
import sys
sys.path.append("..")


class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super(MainWindow,self).__init__(parent)
        self.setWindowState(Qt.WindowMaximized)
        self.setWindowTitle("Indicator Tool")

        data = [(15,1626237960,4353.75,4354.5,4354.25,73.0),(30,1626238860,4352.75,4353.25,4352.5,210.0),(45,1626239760,4354.75,4354.0,96.0),(60,1626240660,4355.25,4355.75,4355.5,90.0),(75,1626241560,4356.0,4356.25,83.0),(90,1626242460,4353.0,177.0),(105,1626243360,4351.25,4352.25,4352.0,351.0),(120,1626244260,46.0),(135,1626245160,4355.0,87.0),(150,1626246060,4350.25,4351.75,787.0),(165,1626246960,431.0),(180,1626247860,393.0),(195,1626248760,4361.0,4360.0,365.0),(210,1626249660,4357.0,4357.5,4356.75,381.0),(225,1626250560,189.0),(240,1626251460,4359.75,4358.25,4358.5,268.0),(255,1626252360,4360.25,4358.75,4359.0,300.0),(270,1626253260,4358.0,573.0),(285,1626254160,4362.25,4362.75,182.0),(300,1626255060,4363.75,4364.75,4363.25,370.0),(315,1626255960,4365.0,4365.5,4364.5,509.0),(330,1626256860,4361.75,115.0),(345,1626257760,4362.5,60.0),(360,1626258660,4364.0,4363.5,52.0),(375,1626259560,4364.25,264.0),(390,1626260460,(405,1626261360,4365.25,4365.75,159.0),(420,1626262260,4366.25,102.0),(435,1626263160,4366.0,(450,1626264060,4368.25,4368.5,4368.0,191.0),(465,1626264960,4368.75,4369.25,4369.0,336.0),(480,1626265860,4372.5,4374.0,4370.5,3336.0),(495,1626266760,4377.0,4377.75,4377.5,335.0),(510,1626267660,4379.0,4378.75,405.0),(525,1626268560,141.0),(540,1626269460,4379.75,4382.25,5678.0),(555,1626270360,4381.25,4382.75,4381.0,4247.0),(570,1626271260,4378.25,4379.5,5458.0),(585,1626272160,4378.5,2199.0),(600,1626273060,4373.5,4372.0,4373.0,3043.0),(615,1626273960,4375.25,4375.5,4374.25,1543.0),(630,1626274860,4374.5,4375.0,1348.0),(645,1626275760,4370.75,4369.5,1878.0),(660,1626276660,3083.0),(675,1626277560,4359.25,4357.25,4229.0),(690,1626278460,4359.5,4361.5,5614.0),(705,1626279360,2277.0),(720,1626280260,1383.0),(735,1626281160,4371.0,3953.0),(750,1626282060,4371.25,1144.0),(765,1626282960,4366.75,4367.0,1228.0),(780,1626283860,4367.75,4367.5,2396.0),(795,1626284760,4371.5,4371.75,4370.25,1205.0),(810,1626285660,4369.75,2373.0),(825,1626286560,4374.75,4373.75,2617.0),(840,1626287460,4373.25,1476.0),(855,1626288360,873.0),(870,1626289260,831.0),(885,1626290160,4370.0,1904.0),(900,1626291060,4366.5,2710.0),(915,1626291960,2395.0),(930,1626292860,5744.0),(945,1626293760,203.0),(960,1626294660,26.0),(975,1626295560,43.0),(990,1626300000,4367.25,341.0),(1005,1626300900,99.0),(1020,1626301800,85.0),(1035,1626302700,49.0),(1050,1626303600,126.0),(1065,1626304500,11.0),(1080,1626305400,1.0),(1095,1626306300,91.0),(1110,1626307200,132.0),(1125,1626308100,558.0),(1140,1626309000,4363.0,(1155,1626309900,4362.0,57.0),(1170,1626310800,242.0),(1185,1626311700,124.0),(1200,1626312600,272.0),(1215,1626313500,(1230,1626314400,(1245,1626315300,62.0),(1260,1626316200,241.0),(1275,1626317100,117.0),(1290,1626318000,165.0),(1305,1626318900,56.0),(1320,1626319800,146.0),(1335,1626320700,(1350,1626321600,16.0),(1365,1626322500,(1380,1626323400,25.0),(1395,1626324300,31.0),(1410,1626325200,125.0),(1425,1626326100,40.0),(1440,1626327000,212.0),(1455,1626327900,22.0),(1470,1626328800,321.0),(1485,1626329700,97.0),(1500,1626330600,298.0),(1515,1626331500,135.0),(1530,1626332400,1189.0),(1545,1626333300,587.0),(1560,1626334200,1219.0),(1575,1626335100,4360.75,346.0),(1590,1626336000,4360.5,395.0),(1605,1626336900,364.0),(1620,1626337800,443.0),(1635,1626338700,358.0),(1650,1626339600,137.0),(1665,1626340500,196.0),(1680,1626341400,633.0),(1695,1626342300,199.0),(1710,1626343200,736.0),(1725,1626344100,925.0),(1740,1626345000,1259.0),(1755,1626345900,4357.75,208.0),(1770,1626346800,4353.5,1080.0),(1785,1626347700,394.0),(1800,1626348600,4348.25,4349.0,4348.0,360.0),(1815,1626349500,550.0),(1830,1626350400,829.0),(1845,1626351300,4350.75,4351.5,4350.5,590.0),(1860,1626352200,389.0),(1875,1626353100,523.0),(1890,1626354000,1360.0),(1905,1626354900,1866.0),(1920,1626355800,12422.0),(1935,1626356700,4348.75,4347.75,4351.0,6192.0),(1950,1626357600,6794.0),(1965,1626358500,2912.0),(1980,1626359400,3718.0),(1995,1626360300,4350.0,6836.0),(2010,1626361200,3954.0),(2025,1626362100,1948.0),(2040,1626363000,4356.5,3067.0),(2055,1626365460,4349.5,4347.0,4347.25,4812.0),(2070,1626366360,1268.0),(2085,1626367260,1096.0),(2100,1626368160,1504.0),(2115,1626369060,4347.5,4346.75,1716.0),(2130,1626369960,4343.5,4345.0,4344.75,1026.0),(2145,1626370860,4338.25,4338.75,4337.75,2774.0),(2160,1626371760,4334.0,4335.0,4332.5,4333.0,7733.0),(2175,1626661980,4300.0,4300.5,109.0),(2190,1626662880,4301.25,4301.5,4301.0,(2205,1626663780,4303.75,4304.0,4303.25,4303.5,152.0),(2220,1626664680,4304.5,4304.25,108.0),(2235,1626665580,4305.0,4305.25,4304.75,93.0),(2250,1626666480,4303.0,134.0),(2265,1626667380,23.0),(2280,1626668280,4302.75,77.0),(2295,1626669180,48.0),(2310,1626670080,4299.5,4298.75,(2325,1626670980,4302.0,89.0),(2340,1626671880,92.0),(2355,1626672780,151.0),(2370,1626673680,(2385,1626674580,233.0),(2400,1626675480,187.0),(2415,1626676380,4305.5,174.0),(2430,1626677280,4307.0,4307.5,4306.75,293.0),(2445,1626678180,860.0),(2460,1626679080,4305.75,933.0),(2475,1626679980,4298.0,4299.75,4297.5,840.0),(2490,1626680880,4295.0,4295.75,4294.25,4295.25,497.0),(2505,1626681780,794.0),(2520,1626682680,4302.25,378.0),(2535,1626683580,4297.25,4296.75,4298.25,479.0),(2550,1626684480,4287.5,4288.75,4287.25,569.0),(2565,1626685380,4289.0,4287.0,603.0),(2580,1626686280,4289.25,4290.25,4289.75,181.0),(2595,1626687180,493.0),(2610,1626688080,4291.5,4291.75,4291.0,175.0),(2625,1626688980,4291.25,4289.5,476.0),(2640,1626689880,4286.75,4286.25,4286.5,317.0),(2655,1626690780,4288.25,4287.75,4288.0,(2670,1626691680,380.0),(2685,1626692580,4283.75,4284.0,1194.0),(2700,1626693480,4282.0,4282.75,4281.75,4282.5,390.0),(2715,1626694380,4272.25,4273.0,4271.0,4272.5,2019.0),(2730,1626695280,4270.75,4270.0,4271.5,1550.0),(2745,1626696180,4273.75,4272.75,584.0),(2760,1626697080,4265.75,4264.5,4265.25,1076.0),(2775,1626697980,4269.25,4269.75,4268.0,969.0),(2790,1626698880,4267.25,4267.5,4266.0,1419.0),(2805,1626699780,4266.75,4265.5,1155.0),(2820,1626700680,4264.0,4264.75,4262.5,4262.75,1385.0),(2835,1626701580,4263.5,4266.5,4261.0,4265.0,17859.0),(2850,1626702480,4261.75,6718.0),(2865,1626703380,4240.75,4242.75,4239.25,4241.75,13594.0),(2880,1626704280,4234.25,4236.5,4231.25,4232.25,8556.0),(2895,1626705180,4238.75,4239.5,4237.5,5309.0),(2910,1626706080,4247.5,4249.75,4247.0,(2925,1626706980,4248.5,4253.25,4248.0,7975.0),(2940,1626707880,4254.25,4255.0,4253.0,4967.0),(2955,1626708780,4255.5,4257.5,4255.25,4256.0,3957.0),(2970,1626709680,4256.5,4258.25,2902.0),(2985,1626710580,4246.25,4243.5,4245.75,5645.0),(3000,1626711480,4244.5,4244.75,4243.25,4243.75,1884.0),(3015,1626712380,4235.5,4234.5,4234.75,2849.0),(3030,1626713280,4230.75,4229.5,4230.0,2907.0),(3360,1626732660,4260.25,4260.5,4260.0,78.0),(3375,1626733560,4258.75,17.0),(3390,1626734460,4259.0,4258.5,28.0),(3405,1626735360,4259.75,4259.5,45.0),(3420,1626736260,4261.25,4261.5,145.0),(3435,1626737160,4259.25,(3450,1626738060,4262.0,(3465,1626738960,(3480,1626739860,4262.25,299.0),(3495,1626740760,4267.0,461.0),(3510,1626741660,168.0),(3525,1626742560,(3540,1626743460,218.0),(3555,1626744360,4268.25,4268.75,4268.5,123.0),(3570,1626745260,80.0),(3585,1626746160,217.0),(3600,1626747060,4274.25,4273.5,(3615,1626747960,4274.0,4273.25,(3630,1626748860,(3645,1626749760,4271.25,330.0),(3660,1626750660,4270.25,(3675,1626751560,4269.0,69.0),(3690,1626752460,4258.0,619.0),(3705,1626753360,432.0),(3720,1626754260,130.0),(3735,1626755160,4257.75,4257.0,4257.25,179.0)]

        self.stockWidget = StockChart(data) 
        
        self.initUI()
        

    def initUI(self):
        grid = QGridLayout()
        grid.setRowStretch(0,1)
        grid.setRowStretch(1,2)

        #Widget,row,column,rowspan,colspan
        grid.addWidget(self.stockWidget,1,2)

        centralWidget = QWidget()
        centralWidget.setLayout(grid)
        self.setCentralWidget(centralWidget)


class StockChart(QWidget):
    def __init__(self,data,parent=None):
        super().__init__(parent)
        self.data = data
        self.initUI()

    @cached_property
    def view(self):
        return list()

    def initUI(self):
        lay = QVBoxLayout(self)

        series = QCandlestickSeries()
        series.setIncreasingColor(QColor(Qt.green))
        series.setDecreasingColor(QColor(Qt.red))

        print(self.data)

        for row in self.data:
            time = row[1] * 1000
            open = row[2]
            high = row[3]
            low = row[4]
            close = row[5]
            volume = row[6]
            series.append(QCandlestickSet(open,high,low,close,time)) 

        self.chart = QChart()
        self.chart.addSeries(series)
        self.chart.legend().hide()

        self.chart.createDefaultAxes()
        self.chart.setTitle("ES Real Time Chart")
        self.chart.setAnimationOptions(QChart.SeriesAnimations)
         
        chart_view = QChartView(self.chart)
        chart_view.setRenderHint(QPainter.Antialiasing)
        chart_view.setRubberBand(QChartView.HorizontalRubberBand)

        lay.addWidget(chart_view)
        self.view.append(chart_view)

    def wheelEvent(self,event: QWheelEvent) -> None:
        return super().wheelEvent(event)
        

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

我尝试模拟大量数据,以便您可以看到我遇到的问题,由于范围未正确居中,所有蜡烛都非常小,而且我在 x 轴上设置了一个橡皮筋来选择特定的 x 轴值,我只是希望能够动态更改 y 轴以匹配 x 轴值的当前最小值/最大值,并且还能够使用滚轮放大和缩小。

这是目前的样子:

enter image description here

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res