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

  • 相关阅读:
    【SLAM】5相机&图像
    【大厂AI课学习笔记NO.76】人工智能人才金字塔
    用tkinter+selenium做一个CSDN热榜爬虫
    【JavaScript】用echarts绘制饼图
    机器学习基础介绍
    构建知识图谱:从技术到实战的完整指南
    JavaScript 进阶问题列表,巩固自己的知识。
    Kettle【实践 06】使用 HTTP client 获取 GPC 全球商品分类代码 JSON 数据处理入库全流程(云资源分享:ktr+数据.sql)
    百度迁徒数据爬虫方法
    Linux 系统死机后挽救措施
  • 原文地址:https://blog.csdn.net/seniorwizard/article/details/125615616