PyQt5+QtChart绘制散点图

 更新时间:2022年12月15日 14:57:16   作者:SongYuLong的博客  
QChart是一个QGraphicScene中可以显示的QGraphicsWidget。本文将利用QtChart实现绘制散点图,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

PyQt5 QtChart-散点图

QScatterSeries类将数据以散点图显示

import sys
import random
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5.QtChart import QScatterSeries, QChart, QChartView, QPolarChart

class MyScatterWindow(QWidget):
    def __init__(self, parent=None):
        super(MyScatterWindow, self).__init__(parent)
        self.resize(800, 600)
        chart = QChart()
        chartView = QChartView()

        print(PYQT_VERSION_STR)

        scatter = QScatterSeries()
        for value in range(1, 500):
            scatter.append(value, random.random()*10)
            #scatter.append(QPointF(value, random.random()*10))

        scatter.setName("散点图")
        scatter.setMarkerSize(8)   # 标记大小
        # scatter.setMarkerShape(QScatterSeries.MarkerShapeRectangle) #方形标记
        scatter.setMarkerShape(QScatterSeries.MarkerShapeCircle) # 圆形标记
        pen = QPen()
        pen.setColor(Qt.red)
        pen.setWidth(2)
        scatter.setPen(pen)    
        
        chart.addSeries(scatter)
        chart.createDefaultAxes()

        chartView.setChart(chart)

        vbox = QVBoxLayout()
        vbox.addWidget(chartView)

        self.setLayout(vbox)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MyScatterWindow()
    win.show()
    sys.exit(app.exec_())

效果图 

补充

除了散点图,PytQt5和QtChart还可以绘制其他的图表。下面是小编为大家整理的其他图表绘制的示例代码,需要的可以参考一下

PyQt5 QtChart-饼状图

QPieSeries类将数据以饼状图显示

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5.QtChart import QPieSeries, QPieLegendMarker, QChart, QChartView

class MyPieWindow(QWidget):
    def __init__(self, parent=None):
        super(MyPieWindow, self).__init__(parent)

        chart = QChart()
        chartView = QChartView()
        pieSeries = QPieSeries()

        slice0 = pieSeries.append("铁:%10", 1)
        pieSeries.append("铝:%20", 2)
        pieSeries.append("铜:%70", 7)
        pieSeries.setLabelsVisible()
        pieSeries.setPieSize(0.6)
        
        slice0.setExploded() # 外伸
        slice0.setColor(QColor(255, 0, 150))

        chart.setTitle("饼状图")
        chart.addSeries(pieSeries)
        
        chartView.setChart(chart)
        chartView.setRenderHint(QPainter.Antialiasing)

        vbox = QVBoxLayout()
        vbox.addWidget(chartView)
        self.setLayout(vbox)

        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MyPieWindow()
    win.show()
    sys.exit(app.exec_())

PyQt5 QtChart-QLineSeries 折线图

QLineSeries

QLineSeries类将数据序列显示为折线图,其核心代码:

lineSeries = QLineSeries()
lineSeries.append(1, 3)
lineSeries.append(5, 8)

chart.addSeries(lineSeries)

常用方法:

  • setPointsVisible(True) :设置数据点显示状态
  • setPointLabelsVisible(True):设置数据点标签显示状态
  • setPointLabelsFormat(“(@xPoint, @yPoint)”):设置数据点标签格式
  • setPointLabelsFont(QFont(None, 8)) :设置数据点标签字体
  • setPointLabelsColor(QColor(255, 0,0)) :设置数据点标签颜色
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtChart import *

import random

class MyWaveWindow(QWidget):
    def __init__(self, parent=None):
        super(MyWaveWindow, self).__init__(parent)
        self.setWindowTitle("折线图")

        # 创建图表 并设置相关参数
        chart = QChart()
        chart.setTitle("随机折线图")
        chart.setAnimationOptions(QChart.SeriesAnimations)
        chart.setAnimationDuration(1000)
        chart.setAnimationEasingCurve(QEasingCurve.InOutCirc)
        # chart.setTheme(QChart.ChartThemeBlueCerulean)
        chart.legend().show()


        # 创建折线数据序列
        lineSeries = QLineSeries()
        for value in range(0, 100):
            lineSeries.append(value, round(random.random()*10, 2))

            
        lineSeries.setPointsVisible(True)
        lineSeries.setPointLabelsVisible(True)
        lineSeries.setPointLabelsFormat("(@xPoint, @yPoint)")
        lineSeries.setPointLabelsFont(QFont(None, 8))
        lineSeries.setPointLabelsColor(QColor(255, 0, 0))
        chart.addSeries(lineSeries)

        # 创建轴坐标
        # chart.createDefaultAxes()  # 创建默认轴    
        axis_x = QValueAxis()
        axis_x.setLabelFormat("%d")
        axis_x.setMinorTickCount(3)
        axis_x.setRange(0, 100)
        chart.addAxis(axis_x, Qt.AlignBottom)
        lineSeries.attachAxis(axis_x)

        axis_y = QValueAxis()
        axis_y.setLabelFormat("%d")
        # axis_y.setTickType(QValueAxis.TicksDynamic)
        axis_y.setTickCount(20)
        axis_y.setMinorTickCount(3)
        axis_y.setRange(0, 10)
        chart.addAxis(axis_y, Qt.AlignLeft)
        lineSeries.attachAxis(axis_y)

            
        chartView = QChartView(chart)
        chartView.setRenderHint(QPainter.Antialiasing)

        layout = QVBoxLayout()
        layout.addWidget(chartView)
        self.setLayout(layout)
        self.resize(800, 600)
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MyWaveWindow()
    win.show()
    app.exit(app.exec_())

到此这篇关于PyQt5+QtChart绘制散点图的文章就介绍到这了,更多相关PyQt5 QtChart散点图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家

相关文章

  • 安装python3.7编译器后如何正确安装opnecv的方法详解

    安装python3.7编译器后如何正确安装opnecv的方法详解

    这篇文章主要介绍了安装python3.7编译器后如何正确安装opnecv,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • python遍历路径破解表单的示例

    python遍历路径破解表单的示例

    这篇文章主要介绍了python遍历路径破解表单的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • 如何利用Python解析超大的json数据(GB级别)

    如何利用Python解析超大的json数据(GB级别)

    果不想从头开始创建数据格式来存储数据,JSON是一个不错的选择,下面这篇文章主要给大家介绍了关于如何利用Python解析超大的json数据(GB级别)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Python探索之创建二叉树

    Python探索之创建二叉树

    这篇文章主要介绍了Python探索之创建二叉树,Python的相关内容,小编是初窥门径。这里分享给大家一些简单知识,供需要的朋友参考。
    2017-10-10
  • python 在某.py文件中调用其他.py内的函数的方法

    python 在某.py文件中调用其他.py内的函数的方法

    这篇文章主要介绍了python 在某.py文件中调用其他.py内的函数的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • 利用Python爬虫爬取金融期货数据的案例分析

    利用Python爬虫爬取金融期货数据的案例分析

    从技术角度来看,经过一步步解析,任务是简单的,入门requests爬虫及入门pandas数据分析就可以完成,本文重点给大家介绍Python爬虫爬取金融期货数据的案例分析,感兴趣的朋友一起看看吧
    2022-06-06
  • Python执行流程控制详情

    Python执行流程控制详情

    这篇文章主要介绍了Python执行流程控制,流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构、分支结构、循环结构,下文详细介绍需要的小伙伴可以参考一下
    2022-04-04
  • Python scikit-learn数据预处理常见方法和步骤

    Python scikit-learn数据预处理常见方法和步骤

    数据预处理是数据准备阶段的一个重要环节,主要目的是将原始数据转换成适合机器学习模型使用的格式,数据预处理可以显著提高机器学习模型的性能和准确度,本文给大家介绍了Python数据预处理常见方法和步骤,需要的朋友可以参考下
    2024-05-05
  • 教你如何在Django 1.6中正确使用 Signal

    教你如何在Django 1.6中正确使用 Signal

    因为新的django开发人员得知signal之后, 往往会很高兴去使用它. 他们在能使用signal的地方就使用signal, 并且这是他们觉得自己是django专家一样. 然而, 像这样编码一段时间后, django项目就会变得异常复杂, 许多内容都纠结在一起无法解开.
    2014-06-06
  • 浅谈python中np.array的shape( ,)与( ,1)的区别

    浅谈python中np.array的shape( ,)与( ,1)的区别

    今天小编就为大家分享一篇python中np.array的shape ( ,)与( ,1)的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论