PySide下使用 Qchart制作柱状图

目录

一、利用Qchart生成柱状图

1、示例代码如下:

2、图表与显示数据不符原因

二、在柱状图中显示每个柱子的数值和颜色

1、显示柱子的数值

2、设置显示字的颜色

3、设置图例的颜色


一、利用Qchart生成柱状图

创建思路:

1、创建柱状条对象QBarSet,并添加数据

2、创建柱状图组QBarSeries

3、将柱状对象添加到柱状图组中

4、创建QChart图表对象

5、将柱状图组再添加到Qchart图表中

6、设置X,Y轴

7、将Qchart图表在QChartView窗口中展示

1、示例代码如下:

import sys
from PySide6.QtGui import QPainter, QPen
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCharts import (QChartView, QChart, QBarSeries, QBarSet,
                           QLegend, QBarCategoryAxis, QValueAxis)


class DemoChartBarSeries(QMainWindow):
    def __init__(self, parent=None):
        super(DemoChartBarSeries, self).__init__(parent)

        # 设置窗口标题
        self.setWindowTitle('实战 Qt for Python: QChart柱状图演示')
        # 设置窗口大小
        self.resize(480, 360)

        self.create_room_garph()

    # 生成图表
    def create_room_garph(self):
        # 创建条状单元
        room_barset = QBarSet('现有机房量')
        use_room_barset = QBarSet('使用机房量')
        # 设置条状单元数据
        room_barset.append([2])
        use_room_barset.append([8])

        # 创建条状图组
        barseries = QBarSeries()
        # 将条状单元加入到条状图中
        barseries.append(room_barset)
        barseries.append(use_room_barset)

        # 创建图表
        chart = QChart()
        chart.setTitle('简单柱状图示例')
        chart.addSeries(barseries)
        chart.setAnimationOptions(QChart.SeriesAnimations)  # 设置成动画显示

        # 设置X轴  名称
        axis_x = QBarCategoryAxis()
        axis_x.append(['机房'])
        chart.addAxis(axis_x,Qt.AlignBottom)
        barseries.attachAxis(axis_x)
        # 设置Y轴 数值
        axis_y = QValueAxis()
        axis_y.setLabelFormat('%d')     # 以整型显示刻度
        axis_y.setRange(1,20)
        # axis_y.setTickCount(7)
        chart.addAxis(axis_y,Qt.AlignLeft)
        barseries.attachAxis(axis_y)

        chart.legend().setVisible(True)       # 显示图例,默认为显示
        chart.legend().setAlignment(Qt.AlignBottom)  # 在底部显示图例信息

        # 将柱状图添加到图表展示窗口中
        chartView = QChartView(chart)

        # chartView.setRenderHint(QPainter.Antialiasing)
        self.setCentralWidget(chartView)

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

2、图表与显示数据不符原因

chart.addSeries(barseries) 必须在x,y轴设置前设置,否则产生的数据在X/Y轴上显示不准。

二、在柱状图中显示每个柱子的数值和颜色

1、显示柱子的数值

需要导入from PySide6.QtCharts importQAbstractBarSeries 包

代码如下:

# 设置在柱状图中显示数值
barseries.setLabelsVisible(True)       # 显示数据
barseries.setLabelsPosition(QAbstractBarSeries.LabelsInsideEnd)    # 如不设置此行,默认显示在柱子中间位置

QAbstractBarSeries.LabelsCenter		标签位于栏的中心。
QAbstractBarSeries.LabelsInsideEnd		标签位于顶部的栏内。
QAbstractBarSeries.LabelsInsideBase		标签位于底部的栏内。
QAbstractBarSeries.LabelsOutsideEnd		标签位于顶部栏的外部。

2、设置显示字的颜色

柱子内字体颜色默认为白色,修改颜色需要在barset中进行设置

# 对字体颜色进行设置 cabinet_barset.setLabelColor('blue') use_cabinet_barset.setLabelColor('blue')

3、设置图例的颜色

图例的颜色需要在QChart对象中中进行设置

cabinet_chart.legend().setLabelColor('#1E90FF') # 设置图例字体颜色

好的,下面是一个使用PySide2和QChart实时显示曲线的程序: ```python import sys import random from PySide2.QtCore import Qt, QTimer from PySide2.QtGui import QPen from PySide2.QtCharts import QtCharts from PySide2.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QGraphicsView class RealTimeChart(QMainWindow): def __init__(self): super().__init__() # 创建QChart对象并设置标题 self.chart = QtCharts.QChart() self.chart.setTitle("Realtime Chart") # 创建QLineSeries对象并将其添加到QChart中 self.series = QtCharts.QLineSeries() self.chart.addSeries(self.series) # 创建QValueAxis对象并设置范围 self.axis_x = QtCharts.QValueAxis() self.axis_x.setRange(0, 100) self.chart.addAxis(self.axis_x, Qt.AlignBottom) # 创建QValueAxis对象并设置范围 self.axis_y = QtCharts.QValueAxis() self.axis_y.setRange(-1, 1) self.chart.addAxis(self.axis_y, Qt.AlignLeft) # 将QLineSeries与QValueAxis关联 self.series.attachAxis(self.axis_x) self.series.attachAxis(self.axis_y) # 创建QGraphicsScene对象并将QChart添加到场景中 self.view = QGraphicsView() self.scene = QGraphicsScene() self.scene.addItem(self.chart) self.view.setScene(self.scene) # 创建定时器,每隔一段时间更新曲线 self.timer = QTimer(self) self.timer.timeout.connect(self.update_chart) self.timer.start(50) # 设置窗口大小和标题 self.setCentralWidget(self.view) self.setGeometry(100, 100, 800, 600) self.setWindowTitle("Realtime Chart") def update_chart(self): # 随机生成一个数据点并添加到曲线中 x = self.series.count() y = random.uniform(-1, 1) self.series.append(x, y) # 移动坐标轴显示最近的数据 self.axis_x.setRange(x - 100, x) self.view.fitInView(self.chart, Qt.IgnoreAspectRatio) if __name__ == '__main__': app = QApplication(sys.argv) chart = RealTimeChart() chart.show() sys.exit(app.exec_()) ``` 这个程序会随机生成一个数据点,并将其添加到QLineSeries中。每隔50毫秒,定时器会调用update_chart()方法来更新曲线。在update_chart()方法中,我们还移动了坐标轴,以便始终显示最近的数据点。最后,我们将QChart添加到QGraphicsScene中,并在QGraphicsView中显示它。运行程序后,你应该能看到一个实时更新的曲线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值