程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

实战PyQt5: 162-使用堆积柱状图显示温度信息

hfteth 2025-07-07 18:24:56 技术文章 1 ℃

温度记录示例

演示如何创建一个带负值的柱状图,来形象地显示温度信息。

首先,创建两个柱状图,并添加数据,其中一组代表最低温度,另一组代表最高温度。

low = QBarSet('最低')
high = QBarSet('最高')
        
low << -52 << -50 << -45.3 << -37.0 << -25.6 << -8.0 \
       << -6.0 << -11.8 << -19.7 << -32.8 << -43.0 << -48.0
        
 high << 11.9 << 12.8 << 18.5 << 26.5 << 32.0 << 34.8 \
        << 38.2 << 34.8 << 29.8 << 20.4 << 15.1 << 11.8

然后将这两个序列添加到QStackedBarSeries中

 barSeries = QStackedBarSeries()
 barSeries.append(low)
 barSeries.append(high)

创建图表对象,并将上面的序列添加到图表中,使用方法setAnimationOptions(QChart.SeriesAnimations)设置序列动画显示。在横坐标上使用QBarCategoryAxis来标志每个月份,纵坐标表示最低最高温度。然后创建图表视图,添加到窗口中显示出来。

代码

完整代码如下:

import sys
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow
from  PyQt5.QtChart import (QChartView, QChart, QStackedBarSeries, QBarSet, 
                            QLegend, QBarCategoryAxis, QValueAxis)
 
class DemoStackedBarSeries(QMainWindow):
    def __init__(self, parent=None):
        super(DemoStackedBarSeries, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战 Qt for Python: 显示温度')      
        # 设置窗口大小
        self.resize(720, 480)
        
        self.createChart()
        
    def createChart(self):
        
        #创建条状单元
        low = QBarSet('最低')
        high = QBarSet('最高')
        
        low << -52 << -50 << -45.3 << -37.0 << -25.6 << -8.0 \
            << -6.0 << -11.8 << -19.7 << -32.8 << -43.0 << -48.0
        
        high << 11.9 << 12.8 << 18.5 << 26.5 << 32.0 << 34.8 \
            << 38.2 << 34.8 << 29.8 << 20.4 << 15.1 << 11.8
        
        
        #条状图
        barSeries = QStackedBarSeries()
        barSeries.append(low)
        barSeries.append(high)
        
        #创建图表
        chart = QChart()
        chart.addSeries(barSeries)
        chart.setTitle('摄氏温度记录')
        chart.setAnimationOptions(QChart.SeriesAnimations) #设置成动画显示
        
        #设置横向坐标(X轴)
        categories = ['一月', '二月', '三月', '四月', '五月', '六月', \
            '七月', '八月', '九月', '十月', '十一月', '十二月']
        axisX = QBarCategoryAxis()
        axisX.append(categories)
        axisX.setTitleText('月份')
        chart.addAxis(axisX, Qt.AlignBottom)
        barSeries.attachAxis(axisX)
        
        #设置纵向坐标(Y轴)
        axisY = QValueAxis()
        axisY.setRange(-52, 52)
        axisY.setTitleText('温度 [°C]')
        chart.addAxis(axisY, Qt.AlignLeft)
        barSeries.attachAxis(axisY)
        
        #图例属性
        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 = DemoStackedBarSeries()
    window.show()
    sys.exit(app.exec())   

运行结果如下图:

本文知识点

  • 使用QStackedBarSeries演示温度可视化显示。

请多多关注,评论,收藏,点赞,和转发。


前一篇: 实战PyQt5: 161-QChart图表之散点图交互操作

最近发表
标签列表