如何在 python 中的 x qwtplot 轴上放置日期?

Posted

技术标签:

【中文标题】如何在 python 中的 x qwtplot 轴上放置日期?【英文标题】:How to put dates on the x qwtplot axis in python? 【发布时间】:2016-09-23 18:36:58 【问题描述】:

我访问了互联网上的大量页面,但只有 C 语言的示例,我不明白如何在 python 中制作它。有人能帮我吗。 我使用 Pyqt 设计器和 Python 2.7。我需要使用 qwtplot 在 GUI 上绘制日期数据。

【问题讨论】:

【参考方案1】:

你需要一个 QwtScaleDraw 类,例如:

class TimeScaleDraw(QwtScaleDraw):
    def __init__(self, baseTime, *args):
        QwtScaleDraw.__init__(self, *args)
        self.baseTime = baseTime

    def label(self, value):
        upTime = self.baseTime.addSecs(int(value))
        return QwtText(upTime.toString())

然后你用这个代码修改你的 x 轴:

self.setAxisScaleDraw(
        QwtPlot.xBottom, TimeScaleDraw(self.cpuStat.upTime()))

self 的基类是 QwtPlot。 cpuStat.upTime() 返回一个 QTime 实例。 value 代表您的时间数据点之一。此代码来自 cpuDemo 示例代码。

要获得此示例 cpuDemo 使用 python xy 2.7。对导入的模块进行以下更改:

import os
import sys
import numpy as np

from PyQt4.QtGui import (QApplication, QColor, QBrush, QWidget, QVBoxLayout,
                      QLabel)
from PyQt4.QtCore import QRect, QTime
from PyQt4.QtCore import Qt
from PyQt4.Qwt5 import (QwtPlot, QwtPlotMarker, QwtScaleDraw, QwtLegend, QwtPlotCurve,
             QwtPlotItem, QwtText)#, QwtLegendData

然后注释掉所有的图例行。

我采用此代码来使用 QDateTime 类。这是一个sn-p:

from PyQt4 import QtCore, QtGui, Qt
from PyQt4 import Qwt5

class TimeScaleDraw(Qwt5.QwtScaleDraw):
    def __init__(self, *args):
        Qwt5.QwtScaleDraw.__init__(self,unixBaseTime *args)
        self.basetime=unixBaseTime
        self.fmt='h:mm\nd-MMM-yyyy'

    def label(self, value):
        dt = QtCore.QDateTime.fromMSecsSinceEpoch((value+self.basetime))
        return Qwt5.QwtText(dt.toString(self.fmt))

...

class Ui_TabWidget(object):
    def setupUi(self, TabWidget):
        self.qwtPlot = Qwt5.QwtPlot()
        self.qwtPlot.setAxisScaleDraw(Qwt5.QwtPlot.xBottom, TimeScaleDraw(unixBaseTime))

欣赏美丽的画面

【讨论】:

以上是关于如何在 python 中的 x qwtplot 轴上放置日期?的主要内容,如果未能解决你的问题,请参考以下文章

QwtPlot - 多个 Y 轴

QwtPlot 更新自定义轴

PyQt 和 QwtPlot - 如何改变刻度方向?

如何使用 Qt/QwtPlot 设置固定轴间隔?

如何清除 Qt 上的 QwtPlot?

如何在 QwtPlot 上设置固定数量的刻度