• 实战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图表之动态样条曲线

  • 相关阅读:
    数据库设计(火车订票系统)
    5 - 1 判断题
    Kubernetes——YAML文件编写
    在 4GB 物理内存的机器上,申请 8G 内存会怎么样?
    Linux环境下载安装Seata1.5
    【数据结构】二叉树--链式结构的实现 (遍历)
    计算机Java项目|Springboot房产销售系统
    网站自动翻译-网站批量自动翻译-网站免费翻译导出
    STM32F407单片机HAL库CAN2不能接收数据解决方法
    (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • 原文地址:https://blog.csdn.net/seniorwizard/article/details/125615616