如何解决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 轴值的当前最小值/最大值,并且还能够使用滚轮放大和缩小。
这是目前的样子:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。