入门 PyQt6 看过来(案例)22~ 图表案例

news2024/9/20 21:40:48

5bab6780bbed49c7afc0de09602a9872.png

    def showPie(self):
        """
        绘制饼状图
        """
        # (1)创建图表和视图
        chart = QChart()
        chart.setTitle('中国高等教育普及率')
        chart.legend().setAlignment(Qt.AlignmentFlag.AlignLeft)
        chartView = QChartView(self)  # 必须有self,才能在界面上显示图表
        chartView.setGeometry(10, 10, 800, 600)
        chartView.setChart(chart)

        # (2)创建序列并添加数据
        pieSet = {'儿童和老人': 35, '劳动人口': 49, '参加高考者': 7, '大学生': 8}

        pSeries = QPieSeries()
        for item in pieSet.items():
            pSeries.append(item[0] + '(%d' % item[1] + '%)', item[1])
        pSeries.setLabelsVisible(True)
        pSeries.setHoleSize(0.2)
        pSeries.setPieSize(0.6)

        slice = pSeries.slices()[3]
        slice.setExploded(True)
        slice.setPen(QPen(Qt.GlobalColor.green, 2))
        slice.setBrush(Qt.GlobalColor.yellow)

        chart.addSeries(pSeries)

078dbb2a7b914c1189f0618224dbf6da.png

    def showBar(self):
        """
                绘制柱状图
                """
        # (1)创建图表和视图
        chart = QChart()
        chart.setTitle('2017~2021年高考人数和录取率')
        chart.legend().setAlignment(Qt.AlignmentFlag.AlignTop)
        chartView = QChartView(self)  # 必须有self,才能在界面上显示图表
        chartView.setGeometry(10, 10, 800, 600)
        chartView.setChart(chart)

        # (2)创建序列并添加数据
        number_signup = [940, 975, 1031, 1071, 1078]
        signupSet = QBarSet('报考')
        for i in range(0, 5):
            signupSet << number_signup[i]
        number_enroll = [700, 791, 820, 967.5, 689]
        enrollSet = QBarSet('录取')
        for i in range(0, 5):
            enrollSet << number_enroll[i]

        bSeries = QBarSeries()
        bSeries.append(signupSet)
        bSeries.append(enrollSet)
        bSeries.setLabelsVisible(True)
        bSeries.setLabelsPosition(QAbstractBarSeries.LabelsPosition.LabelsInsideEnd)
        chart.addSeries(bSeries)

        lSeries = QLineSeries()
        lSeries.setName('趋势')
        for i in range(0, 5):
            lSeries.append(i, number_enroll[i])
        pen = QPen(Qt.GlobalColor.green)
        pen.setWidth(2)
        lSeries.setPen(pen)
        lSeries.setPointLabelsVisible(True)
        lSeries.setPointLabelsFormat('@yPoint 万')
        chart.addSeries(lSeries)

        # (3)建立和设置坐标轴
        year = ['2017', '2018', '2019', '2020', '2021']
        axisX = QBarCategoryAxis()
        axisX.setTitleText('年份')
        axisX.append(year)
        chart.addAxis(axisX, Qt.AlignmentFlag.AlignBottom)
        bSeries.attachAxis(axisX)
        lSeries.attachAxis(axisX)

        axisY = QValueAxis()
        axisY.setTitleText('人数(万)')
        chart.addAxis(axisY, Qt.AlignmentFlag.AlignLeft)
        bSeries.attachAxis(axisY)
        lSeries.attachAxis(axisY)

5b9b79a6cbdf447d9079c4ea7b4c7723.png

 def showLine(self):
        """
        绘制螺旋曲线图
        """
        # (1)创建图表和视图
        chart = QChart()
        chart.setTitle('螺旋曲线')
        chartView = QChartView(self)  # 必须有self,才能在界面上显示图表
        chartView.setGeometry(10, 10, 800, 600)
        chartView.setChart(chart)

        # (2)创建序列并添加数据
        n = 1000
        pointList = np.linspace(1, 10 * 2 * np.pi, n)

        lSeries1 = QLineSeries()
        lSeries1.setName('Archimedes')
        for t in pointList:
            x = (1 + 0.618 * t) * np.cos(t)
            y = (1 + 0.618 * t) * np.sin(t)
            lSeries1.append(x, y)
        chart.addSeries(lSeries1)

        lSeries2 = QLineSeries()
        lSeries2.setName('hyperbolic')
        for t in pointList:
            x = 10 * 2 * np.pi * (np.cos(t) / t)
            y = 10 * 2 * np.pi * (np.sin(t) / t)
            lSeries2.append(x, y)
        chart.addSeries(lSeries2)

        # (3)建立坐标轴
        chart.createDefaultAxes()

完整代码:

# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 绘制柱状图.py
Description:
Author: lzq
date:2024-08-03 12:18
------------------------------------------------
"""
import sys

import numpy as np
from PyQt6.QtCharts import QChart, QChartView, QBarSet, QBarSeries, QAbstractBarSeries, QLineSeries, QBarCategoryAxis, \
    QValueAxis, QPieSeries
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QPen
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget

class MyWidget(QWidget):
    def __init__(self):
        super(MyWidget, self).__init__()
        self.setWindowTitle("二维图表")
        # self.showBar()
        # self.showPie()
        self.showLine()
    def showBar(self):
        """
                绘制柱状图
                """
        # (1)创建图表和视图
        chart = QChart()
        chart.setTitle('2017~2021年高考人数和录取率')
        chart.legend().setAlignment(Qt.AlignmentFlag.AlignTop)
        chartView = QChartView(self)  # 必须有self,才能在界面上显示图表
        chartView.setGeometry(10, 10, 800, 600)
        chartView.setChart(chart)

        # (2)创建序列并添加数据
        number_signup = [940, 975, 1031, 1071, 1078]
        signupSet = QBarSet('报考')
        for i in range(0, 5):
            signupSet << number_signup[i]
        number_enroll = [700, 791, 820, 967.5, 689]
        enrollSet = QBarSet('录取')
        for i in range(0, 5):
            enrollSet << number_enroll[i]

        bSeries = QBarSeries()
        bSeries.append(signupSet)
        bSeries.append(enrollSet)
        bSeries.setLabelsVisible(True)
        bSeries.setLabelsPosition(QAbstractBarSeries.LabelsPosition.LabelsInsideEnd)
        chart.addSeries(bSeries)

        lSeries = QLineSeries()
        lSeries.setName('趋势')
        for i in range(0, 5):
            lSeries.append(i, number_enroll[i])
        pen = QPen(Qt.GlobalColor.green)
        pen.setWidth(2)
        lSeries.setPen(pen)
        lSeries.setPointLabelsVisible(True)
        lSeries.setPointLabelsFormat('@yPoint 万')
        chart.addSeries(lSeries)

        # (3)建立和设置坐标轴
        year = ['2017', '2018', '2019', '2020', '2021']
        axisX = QBarCategoryAxis()
        axisX.setTitleText('年份')
        axisX.append(year)
        chart.addAxis(axisX, Qt.AlignmentFlag.AlignBottom)
        bSeries.attachAxis(axisX)
        lSeries.attachAxis(axisX)

        axisY = QValueAxis()
        axisY.setTitleText('人数(万)')
        chart.addAxis(axisY, Qt.AlignmentFlag.AlignLeft)
        bSeries.attachAxis(axisY)
        lSeries.attachAxis(axisY)

    def showPie(self):
        """
        绘制饼状图
        """
        # (1)创建图表和视图
        chart = QChart()
        chart.setTitle('中国高等教育普及率')
        chart.legend().setAlignment(Qt.AlignmentFlag.AlignLeft)
        chartView = QChartView(self)  # 必须有self,才能在界面上显示图表
        chartView.setGeometry(10, 10, 800, 600)
        chartView.setChart(chart)

        # (2)创建序列并添加数据
        pieSet = {'儿童和老人': 35, '劳动人口': 49, '参加高考者': 7, '大学生': 8}

        pSeries = QPieSeries()
        for item in pieSet.items():
            pSeries.append(item[0] + '(%d' % item[1] + '%)', item[1])
        pSeries.setLabelsVisible(True)
        pSeries.setHoleSize(0.2)
        pSeries.setPieSize(0.6)

        slice = pSeries.slices()[3]
        slice.setExploded(True)
        slice.setPen(QPen(Qt.GlobalColor.green, 2))
        slice.setBrush(Qt.GlobalColor.yellow)

        chart.addSeries(pSeries)

    def showLine(self):
        """
        绘制螺旋曲线图
        """
        # (1)创建图表和视图
        chart = QChart()
        chart.setTitle('螺旋曲线')
        chartView = QChartView(self)  # 必须有self,才能在界面上显示图表
        chartView.setGeometry(10, 10, 800, 600)
        chartView.setChart(chart)

        # (2)创建序列并添加数据
        n = 1000
        pointList = np.linspace(1, 10 * 2 * np.pi, n)

        lSeries1 = QLineSeries()
        lSeries1.setName('Archimedes')
        for t in pointList:
            x = (1 + 0.618 * t) * np.cos(t)
            y = (1 + 0.618 * t) * np.sin(t)
            lSeries1.append(x, y)
        chart.addSeries(lSeries1)

        lSeries2 = QLineSeries()
        lSeries2.setName('hyperbolic')
        for t in pointList:
            x = 10 * 2 * np.pi * (np.cos(t) / t)
            y = 10 * 2 * np.pi * (np.sin(t) / t)
            lSeries2.append(x, y)
        chart.addSeries(lSeries2)

        # (3)建立坐标轴
        chart.createDefaultAxes()

if __name__=='__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec())

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CookieMaker工作室合作开发C++项目十一:拟态病毒

&#xff08;注&#xff1a;本文章使用了“无标题技术”&#xff09; 一天&#xff0c;我和几个同事&#xff0c;平台出了点BUG&#xff0c;居然给我刷出了千年杀&#xff0c;同事看得瑕疵欲裂&#xff0c;发誓要将我挫骨扬灰—— &#xff08;游戏入口&#xff1a;和平精英31.…

iOS技术之安装nvmnode完整步骤

1.前提 首先电脑里得有brew、git、vscode这些工具, 当然了要用nvm&node肯定是需要这些基本开发工具 2.删除node环境 如果mac里没有安装过node、npm可以无视直接去 3 安装nvm。 为了保证安装nvm能够成功管理node&#xff0c;必须把电脑里之前安装的node全部清理&#xf…

微信小程序css中配置了文字超出一行或两行则显示省略号对纯数字或纯字母或小数点无效的解决办法

配置了文字超出一行或两行则显示省略号对纯数字或纯字母或小数点无效的解决办法 overflow_title{display: -webkit-box;-webkit-line-clamp: 1;-webkit-box-orient: vertical;overflow: hidden;text-overflow: ellipsis; }只需要加上这两行css代码即可 word-break:break-all;…

Spring泛型的依赖注入

泛型依赖注入就是允许我们在使用spring进行依赖注入的同时&#xff0c;利用泛型的优点对代码进行精简&#xff0c;将可重复使用的代码全部放到一个类之中&#xff0c;方便以后的维护和修改。同时在不增加代码的情况下增加代码的复用性。

Go切片深入学习

Go切片专项学习 go切片扩容机制 go1.18 之前&#xff1a; 1.如果期望容量大于当前容量的两倍就会使用期望容量&#xff1b; 2.如果当前切片的长度小于 1024 就会将容量翻倍&#xff1b; 3.如果当前切片的长度大于 1024 就会每次增加 25% 的容量&#xff0c;直到新容量大于期…

基于AI大模型的数据治理

— 01— 什么是大模型&#xff1f; 大模型是指具有数千万甚至数亿参数的深度学习模型。近年来&#xff0c;随着计算机技术和大数据的快速发展&#xff0c;深度学习在各个领域取得了显著的成果&#xff0c;如自然语言处理&#xff0c;图片生成&#xff0c;工业数字化等。为了提…

如何快速下载huggingface大模型

Stackoverflow 上有个AI开发入门的最常见问题 How to download model from huggingface?&#xff0c;回答五花八门&#xff0c;可见下载 huggingface 模型的方法是十分多样的。 其实网络快、稳的话&#xff0c;随便哪种方法都挺好&#xff0c;然而结合国内的网络环境&#xf…

如何给微信小程序商城增加直播购物功能

作者&#xff1a;阿龙 当前&#xff0c;随着抖音、快手、淘宝、拼多多等平台直播卖货的崛起&#xff0c;消费者已经习惯了在直播间购物模式&#xff0c;它可以实现卖家和用户之间的互动&#xff0c;实时解答用户的疑问&#xff0c;让用户可以放心下单购买。东方甄选、董宇辉、李…

LeetCode每日一题_3143.正方形中的最多点数

解题思路&#xff1a;自己&#xff1a;先把points里的点拿来求出坐标系的离原点最远的点&#xff0c;然后根据最远距离新建一个数组&#xff0c;然后把points的点都在新建的数组上标记出来。然后再便利从边长为0的正方形开始&#xff0c;里面是否有重复的标签。但是代码写不出来…

1.MongoDB入门指南之开篇

1. 写在前面 MongoDB大家可能听说过&#xff0c;但是要怎么学习&#xff1f;先学习哪个&#xff0c;很多人是不知道的&#xff0c;毕竟面对一个未知的事物&#xff0c;迷茫是很多人都会遇到的&#xff0c;从今天起我们就开始系统的介绍MongoDB的学习。 2. 课程介绍 课程主要分…

代理模式和Spring MVC

Spring是一个分层的轻量级的开源Java框架。核心是IOC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程) AOP 面向切面 AOP &#xff08;Aspect Orient Programming&#xff09;,直译过来就是 面向切面编程&#xff0c;AOP 是一种编程思想&#x…

Antd - Table 父子表格Checkbox联动

Antd - Table 父子表格Checkbox联动 前言一. 勾选父子组件联动二. 效果 前言 由于Antd中的父子组件之间&#xff0c;如果有多选功能&#xff0c;那么不会有联动的关系&#xff0c;需要自己实现。 一. 勾选父子组件联动 代码如下&#xff1a; import React, { useState } fr…

微搭如何设置隐私协议

目录 1 创建数据源2 创建应用3 校验隐私协议是否同意4 实际的效果 小程序里如果涉及收集用户隐私信息的&#xff0c;需要提供隐私协议&#xff0c;微搭中如何实现呢&#xff1f; 1 创建数据源 我们创建两个数据源&#xff0c;一个是个人信息采集表&#xff0c;一个是隐私协议表…

2024最全面软件测试2000+面试题附答案详解,卷起来

进大厂是大部分程序员的梦想&#xff0c;而进大厂的门槛也是比较高的&#xff0c;所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全&#xff0c;其中概括的知识点有&#xff1a;软件测试基础&#xff0c;MySQL&#xff0c;liunx&#xff0c;接口测试&#xff0c;APP测试…

C ++测试随机数

//输出0-15的数字 #include <iostream> #include <string> using namespace std; //更好的办法是使用数组来存储 方便索引 循环 void test01() {srand(time(0));int t0 0;int t1 0;int t2 0;int t3 0;int t4 0;int t5 0;int t6 0;int t7 0;int t8 0;in…

vs-2015安装教程

双击安装包 2-如图先选自定义&#xff0c;然后选安装路径&#xff08;英文路径&#xff09; 3-安装选项一个就够了&#xff0c;如图 4-点击下一步&#xff0c;之后如下图 5-点击安装 启动&#xff0c;如图则恭喜你成功安装

乐观锁与悲观锁:并发控制

乐观锁与悲观锁&#xff1a;并发控制 1、乐观锁2、悲观锁 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 乐观锁和悲观锁作为两种关键的同步机制&#xff0c;以截然不同的方式应对数据冲突。 1、乐观锁 定义&#xff1a; 乐观锁认为数据冲…

医院不良事件监测预警上报系统,PHP不良事件管理系统源码

不良事件上报系统&#xff0c;支持医院进行10大类医疗安全&#xff08;不良&#xff09;事件的上报管理&#xff1b;帮助医院管理部门更好把控不良事件的发生趋势&#xff0c;分析医院内部潜在的问题和风险&#xff0c;采取适当的管理措施&#xff0c;有效加强质量控制&#xf…

从零开始的CPP(33)多种终止条件的回溯

leetcode39 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复…

【[C++BFS】1765. 地图中的最高点

本文涉及知识点 CBFS算法 LeetCoce1765. 地图中的最高点 给你一个大小为 m x n 的整数矩阵 isWater &#xff0c;它代表了一个由 陆地 和 水域 单元格组成的地图。 如果 isWater[i][j] 0 &#xff0c;格子 (i, j) 是一个 陆地 格子。 如果 isWater[i][j] 1 &#xff0c;格…