当前位置: 首页 > article >正文

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

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.kler.cn/a/16167.html

相关文章:

  • flinkOnYarn并配置prometheus+grafana监控告警
  • 网络延迟对Python爬虫速度的影响分析
  • 【JavaScript】为 setInterval()定义变量,存储ID
  • 【JAVA基础】JVM是什么?
  • 【IC每日一题:IC常用模块--RR/handshake/gray2bin】
  • 封装一个省市区的筛选组件
  • 高并发场景下JVM调优实践
  • 数据结构-图
  • 【数据结构】一篇带你彻底玩转 链表
  • 电脑CPU/GPU处理器知识普及
  • 【vueCms】vueCms_xg后台管理系统(开源)
  • QString类方法和变量简介(全)
  • Spring注解开发
  • Python中True、False、None的判断(避坑)
  • Http1.0 、1.1、2.0、3.0的区别
  • 《企业级Linux高可用负载均衡集群实践真传》目录
  • LeetCode:面试题 02.07. 链表相交
  • 数据结构基础day9
  • 书接上回,接着研究当今世上缓存第一人
  • pnpm 实现 Monorepo 一些操作命令
  • Java 异常处理、日志
  • Linux od命令
  • ESP32-CAM:TinyML 图像分类——水果与蔬菜
  • 【群智能算法】一种改进的蜣螂优化算法IDBO[2]【Matlab代码#18】
  • 浅谈Kubernetes集群外部通信—Ingress方式
  • 【Java笔试强训 2】