• 实战PyQt5: 158-QChart图表之线条缩放显示


    线条缩放

    在数据量比较的折线图或者曲线图,受图表本身显示区域大小的限制,不能精细地显示某一小块区域的数据变化,QChartView提供了方法setRubberBand()可以实现一种类似放大镜的功能,可以将局部区域的数据放大到整个图表显示区域中显示。这样就可以方便地实现在图表中对图形序列的局部放大观察。

    线条缩放显示样例

    示例显示了如何使用鼠标利用QRubberBand 来创建自定义的缩放效果。完整代码如下:

    1. import sys,math
    2. from PyQt5.QtCore import Qt, QTimer, QRandomGenerator, QEvent, QPointF
    3. from PyQt5.QtGui import QPainter, QPen
    4. from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsView
    5. from PyQt5.QtChart import QChart, QChartView,QLineSeries, QValueAxis
    6.    
    7. class MyChartView(QChartView):
    8.     def __init__(selfchartparent = None):
    9.         super(MyChartViewself).__init__(chartparent)
    10.         self.isTouching = False
    11.         self.setRubberBand(QChartView.RectangleRubberBand)
    12.            
    13.     def keyPressEvent(selfevent):
    14.         if event.key() == Qt.Key_Plus:
    15.             self.chart().zoomIn()
    16.         elif event.key() == Qt.Key_Minus:
    17.             self.chart().zoomOut()
    18.         elif event.key() == Qt.Key_Left:
    19.             self.chart().scroll(-10, 0)
    20.         elif event.key() == Qt.Key_Right:
    21.             self.chart().scroll(10, 0)
    22.         elif event.key() == Qt.Key_Up:
    23.             self.chart().scroll(0, 10)
    24.         elif event.key() == Qt.Key_Down:
    25.             self.chart().scroll(0, -10)
    26.         else:
    27.             QGraphicsView.keyPressEvent(selfevent)
    28.  
    29. class DemoZoomLineChart(QMainWindow):
    30.     def __init__(selfparent=None):
    31.         super(DemoZoomLineChartself).__init__(parent)   
    32.         
    33.          # 设置窗口标题
    34.         self.setWindowTitle('实战 Qt for Python: 线条缩放演示')      
    35.         # 设置窗口大小
    36.         self.resize(480, 360)
    37.         
    38.         self.createChart()
    39.     
    40.     def createChart(self):
    41.         series = QLineSeries()
    42.         for i in range(500):
    43.             pnt = QPointF(imath.sin(math.pi * i / 50) * 100 + QRandomGenerator.global_().bounded(20))
    44.             series.append(pnt)
    45.         
    46.         chart = QChart()
    47.         chart.setTitle('线条缩放显示')
    48.         chart.addSeries(series)
    49.         chart.setAnimationOptions(QChart.SeriesAnimations)
    50.         chart.legend().hide()
    51.         chart.createDefaultAxes()
    52.         
    53.         chartView =MyChartView(chart)
    54.         chartView.setRenderHint(QPainter.Antialiasing)
    55.         self.setCentralWidget(chartView)
    56.       
    57. if __name__ == '__main__':
    58.     app = QApplication(sys.argv)
    59.     window = DemoZoomLineChart()
    60.     window.show()
    61.     sys.exit(app.exec())   

    运行效果如下图:

     曲线缩放演示

    本文知识点

    • 使用QRubberBand 创建自定义的图表缩放效果。

    前一篇:实战PyQt5:157-QChart图表之动态样条曲线

  • 相关阅读:
    Requests之不同类型的参数,发送请求接口!
    爱创科技携手洽洽食品,探索渠道数字化最优解!
    RuntimeError_ Found dtype Long but expected Float
    H2N-Gly-Pro-Glu-COOH,32302-76-4
    vue组件封装--文本框根据输入内容自适应高度
    今天给大家介绍一篇基于javaWeb的汽车订票系统的设计与实现
    Technical Support Website Statement
    ubuntu文件上有锁
    机器学习或者机器视觉代码讲解视频教程
    【云原生】SpringCloud系列之客户端负载均衡Ribbon
  • 原文地址:https://blog.csdn.net/seniorwizard/article/details/125615616