python-使用Qchart总结4-绘制多层柱状图

news2024/11/24 1:25:47

1、上代码

import sys

from PyQt5.QtChart import QChart, QChartView, QBarCategoryAxis, QValueAxis, QBarSeries, QBarSet
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QMainWindow, QApplication

from untitled import Ui_MainWindow #从生成好的py文件内导入设计好的UI类

class Window(QMainWindow, Ui_MainWindow):#这个是将图表与UI图连接起来
    def __init__(self):
        super().__init__()
        self.setup_ui()  # 渲染画布

    def setup_ui(self):
        self.setupUi(self)

        self.plot_qchart = User_QBarSeries() #将图表实例化
        self.graphicsView.setChart(self.plot_qchart)
        self.graphicsView.setRenderHint(QPainter.Antialiasing)  # 抗锯齿
        self.graphicsView.setRubberBand(QChartView.RectangleRubberBand)


class User_QBarSeries(QChart): #绘制柱状图
    def __init__(self, parent=None, ):
        super(User_QBarSeries, self).__init__(parent)
        self.window = parent
#设置X轴
        self.axisX=QBarCategoryAxis()  #设置x轴坐标,用来显示柱状图的类型
#给x轴添加轴上的点
        self.axisX.append("用户1")
        self.axisX.append("用户2")
        self.axisX.append("用户3")
        self.axisX.setLabelsColor(QColor(0, 200, 0))#设置X轴坐标的颜色,就是上面用户1、用户2、用户3的颜色
# 设置Y轴
        self.axisY=QValueAxis()#设置Y轴坐标,显示值类型的Y轴
        self.axisY.setRange(0,10)#设置Y轴的范围
        self.axisY.setTitleText("单位:克")#设置Y轴的名字
        self.axisY.setLabelFormat("%.2f")#设置Y轴上的点的显示格式

        self.QBarSeries = QBarSeries() #用来装很多柱状图的对象
        self.bar0 = QBarSet("苹果")#1种系列的柱状图
        self.bar0.setColor(QColor(200,20,150))#设置柱体的颜色
        self.bar0.setLabelColor(QColor(200,200,150))#设置柱体上面显示的数值的颜色
        self.bar0.append(3.23) #注意,上面有3个用户,对应的传3个值
        self.bar0.append(2.123)
        self.bar0.append(6.5)

        self.QBarSeries.append(self.bar0)#将self.bar0这个柱体添加到柱状图的对象(self.QBarSeries)上

        self.QBarSeries.setVisible(True)#将柱状图显示出来
        self.QBarSeries.setLabelsVisible(True)#将柱体对应的Y值也显示出来

        self.addSeries(self.QBarSeries)#将整个柱状图放到坐标图里面
        self.setAxisX(self.axisX, self.QBarSeries)#将整个柱状图的坐标与坐标轴对应
        self.setAxisY(self.axisY, self.QBarSeries)

if __name__ == "__main__":

    app = QApplication(sys.argv)
    mywindow = Window()
    mywindow.show()
    sys.exit(app.exec_())

2.执行效果

3.画第二组柱状图,图中红框的代码复制,重命名self.bar0变量,更改柱体的名字,传入的值即可

 

 

上第二组柱体的代码

self.bar1 = QBarSet("香蕉")  # 1种系列的柱状图
self.bar1.setColor(QColor(130, 120, 50))  # 设置柱体的颜色
self.bar1.setLabelColor(QColor(15, 100, 200))  # 设置柱体上面显示的数值的颜色
self.bar1.append(5)  # 注意,上面有3个用户,故意传2组值,看看效果
self.bar1.append(2.12)
# self.bar1.append(6.5)
self.QBarSeries.append(self.bar1)  # 将self.bar0这个柱体添加到柱状图的对象(self.QBarSeries)上

4.执行效果

5.想在图中添加叠加的柱体,怎么添加呢?由于装叠加柱体的是

QStackedBarSeries() 所以我们可以在上面代码后面继续添加

6.上叠加柱体的代码

self.StackedbarSeries = QStackedBarSeries()  #注意:叠加柱状图使用的是这个方法 与上面的QBarSeries不一样
self.bar2 = QBarSet("芒果核")  # 叠加的第一种柱体叫芒果核
self.bar2.setColor(QColor(30, 120, 50))  # 设置柱体的颜色
self.bar2.setLabelColor(QColor(15, 100, 200))  # 设置柱体上面显示的数值的颜色
self.bar2.append(5)  # 注意,上面有3个用户,传3个值
self.bar2.append(6.12)
self.bar2.append(7.5)

self.bar3 = QBarSet("芒果肉")  # 叠加在芒果核上的柱体芒果肉
self.bar3.setColor(QColor(130, 20, 50))  # 设置柱体的颜色
self.bar3.setLabelColor(QColor(250, 200, 120))  # 设置柱体上面显示的数值的颜色
self.bar3.append(3)  # 注意,上面有3个用户,传3个值
self.bar3.append(2)
self.bar3.append(2.1)

self.StackedbarSeries.append(self.bar2) #把2种柱体加入到叠加柱状图里
self.StackedbarSeries.append(self.bar3)
self.StackedbarSeries.setVisible(True)#显示叠加柱状图
self.StackedbarSeries.setLabelsVisible(True)#显示叠加柱状图上的数值

self.addSeries(self.StackedbarSeries)#把叠加柱状图加到坐标轴图上
self.setAxisX(self.axisX, self.StackedbarSeries)#把叠加柱状图的坐标值与坐标轴对应
self.setAxisY(self.axisY, self.StackedbarSeries)

7.执行效果,颜色有点糊,可以自行修改颜色的值

8.完整代码

import sys

from PyQt5.QtChart import QChart, QChartView, QBarCategoryAxis, QValueAxis, QBarSeries, QBarSet, QStackedBarSeries
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QMainWindow, QApplication

from untitled import Ui_MainWindow #从生成好的py文件内导入设计好的UI类

class Window(QMainWindow, Ui_MainWindow):#这个是将图表与UI图连接起来
    def __init__(self):
        super().__init__()
        self.setup_ui()  # 渲染画布

    def setup_ui(self):
        self.setupUi(self)

        self.plot_qchart = User_QBarSeries() #将图表实例化
        self.graphicsView.setChart(self.plot_qchart)
        self.graphicsView.setRenderHint(QPainter.Antialiasing)  # 抗锯齿
        self.graphicsView.setRubberBand(QChartView.RectangleRubberBand)


class User_QBarSeries(QChart): #绘制柱状图
    def __init__(self, parent=None, ):
        super(User_QBarSeries, self).__init__(parent)
        self.window = parent
#设置X轴
        self.axisX=QBarCategoryAxis()  #设置x轴坐标,用来显示柱状图的类型
#给x轴添加轴上的点
        self.axisX.append("用户1")
        self.axisX.append("用户2")
        self.axisX.append("用户3")
        self.axisX.setLabelsColor(QColor(0, 200, 0))#设置X轴坐标的颜色,就是上面用户1、用户2、用户3的颜色
# 设置Y轴
        self.axisY=QValueAxis()#设置Y轴坐标,显示值类型的Y轴
        self.axisY.setRange(0,10)#设置Y轴的范围
        self.axisY.setTitleText("单位:克")#设置Y轴的名字
        self.axisY.setLabelFormat("%.2f")#设置Y轴上的点的显示格式

        self.QBarSeries = QBarSeries() #用来装很多柱状图的对象
#一组柱体
        self.bar0 = QBarSet("苹果")#1种系列的柱状图
        self.bar0.setColor(QColor(200,20,150))#设置柱体的颜色
        self.bar0.setLabelColor(QColor(200,200,150))#设置柱体上面显示的数值的颜色
        self.bar0.append(3.23) #注意,上面有3个用户,对应的传3个值
        self.bar0.append(2.123)
        self.bar0.append(6.5)
        self.QBarSeries.append(self.bar0)#将self.bar0这个柱体添加到柱状图的对象(self.QBarSeries)上

        self.bar1 = QBarSet("香蕉")  # 1种系列的柱状图
        self.bar1.setColor(QColor(130, 120, 50))  # 设置柱体的颜色
        self.bar1.setLabelColor(QColor(15, 100, 200))  # 设置柱体上面显示的数值的颜色
        self.bar1.append(5)  # 注意,上面有3个用户,故意传2组值,看看效果
        self.bar1.append(2.12)
        # self.bar1.append(6.5)
        self.QBarSeries.append(self.bar1)  # 将self.bar0这个柱体添加到柱状图的对象(self.QBarSeries)上


        self.QBarSeries.setVisible(True)#将柱状图显示出来
        self.QBarSeries.setLabelsVisible(True)#将柱体对应的Y值也显示出来
        self.addSeries(self.QBarSeries)#将整个柱状图放到坐标图里面
        self.setAxisX(self.axisX, self.QBarSeries)#将整个柱状图的坐标与坐标轴对应
        self.setAxisY(self.axisY, self.QBarSeries)


        self.StackedbarSeries = QStackedBarSeries()  #注意:叠加柱状图使用的是这个方法 与上面的QBarSeries不一样
        self.bar2 = QBarSet("芒果核")  # 叠加的第一种柱体叫芒果核
        self.bar2.setColor(QColor(30, 120, 50))  # 设置柱体的颜色
        self.bar2.setLabelColor(QColor(15, 100, 200))  # 设置柱体上面显示的数值的颜色
        self.bar2.append(5)  # 注意,上面有3个用户,传3个值
        self.bar2.append(6.12)
        self.bar2.append(7.5)

        self.bar3 = QBarSet("芒果肉")  # 叠加在芒果核上的柱体芒果肉
        self.bar3.setColor(QColor(130, 20, 50))  # 设置柱体的颜色
        self.bar3.setLabelColor(QColor(250, 200, 120))  # 设置柱体上面显示的数值的颜色
        self.bar3.append(3)  # 注意,上面有3个用户,传3个值
        self.bar3.append(2)
        self.bar3.append(2.1)

        self.StackedbarSeries.append(self.bar2) #把2种柱体加入到叠加柱状图里
        self.StackedbarSeries.append(self.bar3)
        self.StackedbarSeries.setVisible(True)#显示叠加柱状图
        self.StackedbarSeries.setLabelsVisible(True)#显示叠加柱状图上的数值

        self.addSeries(self.StackedbarSeries)#把叠加柱状图加到坐标轴图上
        self.setAxisX(self.axisX, self.StackedbarSeries)#把叠加柱状图的坐标值与坐标轴对应
        self.setAxisY(self.axisY, self.StackedbarSeries)

if __name__ == "__main__":

    app = QApplication(sys.argv)
    mywindow = Window()
    mywindow.show()
    sys.exit(app.exec_())

 

 

 

 

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

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

相关文章

财报解读:连续三年逆势增长的背后,欧派家居到底靠的是什么?

能在过去3年逆势增长的家居企业并不多,而欧派家居就是其中一个。4月25日,欧派家居发布2022年年度报告。据年报数据显示,2022年,欧派家居共实现营业收入224.80亿元,净利润约26.88亿元。 从2020年到2022年,欧…

设计模式——单例设计模式

目录 一、设计模式概述和分类 1.1 设计模式介绍 1.2 23种设计模式 二、创建型设计模式-单例模式 2.1 介绍 2.2 八种单例模式的创建方式 2.2.1 饿汉式(静态常量) 2.2.2 饿汉式(静态代码块) 2.2.3 懒汉式(线程不…

SSH客户端工具输入目标地址端口远程失败故障原因和解决方案

问题表现:SSH客户端工具输入目标地址端口远程失败时,出现ssh client 报 algorithm negotiation failed的异常信息。 使用SSH Secure Shell Client连接Linux服务器的SSH的时候有时会出现错误提示信息:ssh algorithm negotiation failed。这是…

基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(三)系统性能测试

系统性能分析与测试 本章将首先对系统电路的噪声和温漂进行分析,而后对采集系统的性能进行 测试,并对测试数据进行分析。 5.1 高精度 AD 转换电路噪声和温漂分析 5.1.1 电阻噪声与温漂 1 、电阻的噪声 电阻是一种噪声源,其严重程度取…

与贵州公安面对面|欧科云链天眼中国行,他们都说“行”

4月28日,为期两天“链上天眼科技助警中国行贵州站”(以下简称:贵州站)迎来了尾声。 继首日亮相中共中央政法委员会机关报-法制日报社主办的“政法智能化建设技术装备及成果展巡展贵州站”,引发贵州省政法机关单位的广…

基于.Net开发的、支持多平台、多语言餐厅点餐系统

今天给大家推荐一套支持多平台、多语言版本的订单系统,适合餐厅、酒店等场景。 项目简介 这是基于.Net Framework开发的,支持手机、平板、PC等平台、多语言版本开源的点餐系统,非常适合餐厅、便利店、超市、酒店等,该系统基础功…

vue3+ts+vite自适应项目——搭建项目

系列文章目录 第一章:搭建项目 目录 系列文章目录 前言 一、搭建项目 二、安装sass 1.安装依赖 2.测试 三、引入element-plus 1.引入库 1.1 安装 2.2引入插件 2.3测试 2.自定义主题 四、实现自适应 1.安装 2.引入 总结 前言 本项目主要目的是熟练…

Web前端学习路线 Web前端面试题 Web前端简历及常用工具

文章目录: 一:web前端学习路线 二:web前端常用工具 手册 文档 教程 插件 组件 三:IT计算机web前端面试题和面试需知 一:web前端学习路线 web前端学习路线 二:web前端常用工具 手册 文档 教程 插件 组件 …

浙大数据结构第三周初识二叉树

03-树1 树的同构 (25分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构…

[2023.4.28]知识体系脑图

整理下工作5年来的知识体系脑图:

Vulnhub:DerpNStink 1靶机

kali:192.168.111.111 靶机:192.168.111.130 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 通过nmap的http-enum脚本发现目标80端口存在wordpress,访问目标网站的wordpress被重定向到http://derpnstink.…

政务智能办体验升级、乳腺癌创新药加速研发,飞桨和文心大模型驱动应用智能涌现...

4月27日,百度“飞桨中国行”落地上海,围绕“如何运用深度学习平台大模型技术打造壁垒快速破局”主题,飞桨携手区域企业、高校院所、硬件厂商、开发者等生态伙伴共话 AI 技术新动向和产业升级新趋势,助力上海夯实具有国际影响力的人…

设计模式 -- 状态模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

系统集成项目管理工程师 笔记(第11章:项目人力资源管理)

文章目录 项目人力资源管理 过程11.2.1 编制项目人力资源计划的工具与技术 375(1)层次结构图(工作、组织、资源 分解结构)(2)矩阵图(责任分配矩阵,RAM)(3&…

KubeSphere 社区双周报 | 杭州站 Meetup 议题征集中 | 2023.04.14-04.27

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.04.14-2023.…

开源+实时+数据即服务的架构——唐建法受邀出席2023数据技术嘉年华【干货回顾】

点击报名 假设原料是一个产品公司的 SaaS 业务系统、一套 CRM、一套工单系统、一个内部人事系统,和内部研发管理系统;现在给到你 40min 的时间,能做出怎样的数据菜肴? 如果这里的厨师是 Tapdata,那么答案可以是一个实时…

【Python】实战:生成多层嵌套笛卡尔积组合问卷 csv《感知觉与沟通评估表》

目录 一、适用场景 二、业务需求 (1)原产品需求 (2)需求分析 ① 需求漏洞 ②「0 能力完好」分级标准问题答案组合 ③「1 轻度受损」分级标准问题答案组合 ④「2 中度受损」分级标准问题答案组合 ⑤「3 重度受损」…

Superset安装部署(docker版)

为什么选择使用docker部署superset呢?因为Linux的python环境版本太低,而且一般是不能动系统自带的python环境,大部分都是通过conda或docker的形式创建一个新的python环境 安装yum工具集 yum -y install yum-utils添加docker源至镜像源中 y…

利用chatgpt+低代码技术搭建进销存系统

1 前言 在当今数字化时代,企业管理系统已经成为各行各业不可或缺的一部分。而进销存系统更是企业管理中的重要组成部分,它可以帮助企业实现产品库存管理、采购管理、销售管理等多个方面的自动化管理。 然而,搭建一个高质量的进销存系统需要…

Fiddler抓包工具常见功能介绍,还不会的进来看

目录 Fiddler的功能面板 一、Statistics数据统计面板,性能分析 二、Inspectors查看请求与响应 三、Filters过滤器 1、User Filters启用 2、Action 3、过滤器实际应用 四、AutoResponder请求重定向 1、什么是请求重定向? 2、为什么要用这个功能&…