Python 如何在轴上绘制时间图形

Python 如何在轴上绘制时间图形,python,canvas,time,pyqt5,axis,Python,Canvas,Time,Pyqt5,Axis,我正在尝试编写一些代码来实时绘制一些值,我发现下面的示例很有效,但我想显示轴12:30:20、12:30:21上的时间。。。。。而不是显示10,20,30 有什么解决办法吗?我在哪里可以看到 import sys import random import matplotlib matplotlib.use('Qt5Agg') from PyQt5 import QtCore, QtWidgets from matplotlib.backends.backend_qt5agg import F

我正在尝试编写一些代码来实时绘制一些值,我发现下面的示例很有效,但我想显示轴12:30:20、12:30:21上的时间。。。。。而不是显示10,20,30

有什么解决办法吗?我在哪里可以看到

import sys
import random
import matplotlib
matplotlib.use('Qt5Agg')

from PyQt5 import QtCore, QtWidgets

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class MplCanvas(FigureCanvas):

    def __init__(self, parent=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        super(MplCanvas, self).__init__(fig)


class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.canvas = MplCanvas(self, width=5, height=4, dpi=100)
        self.setCentralWidget(self.canvas)

        n_data = 50
        self.xdata = list(range(n_data))
        self.ydata = [random.randint(0, 10) for i in range(n_data)]
        self.update_plot()

        self.show()

        # Setup a timer to trigger the redraw by calling update_plot.
        self.timer = QtCore.QTimer()
        self.timer.setInterval(100)
        self.timer.timeout.connect(self.update_plot)
        self.timer.start()

    def update_plot(self):
        # Drop off the first y element, append a new one.
        self.ydata = self.ydata[1:] + [random.randint(0, 10)]
        self.canvas.axes.cla()  # Clear the canvas.
        self.canvas.axes.plot(self.xdata, self.ydata, 'r')
        # Trigger the canvas to update and redraw.
        self.canvas.draw()


app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
app.exec_()

您可以在
扩展数据上设置所需的值,如下所示:

import sys
import random
import matplotlib
matplotlib.use('Qt5Agg')
from PyQt5 import QtCore, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

class MplCanvas(FigureCanvas):
    def __init__(self, parent=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        super(MplCanvas, self).__init__(fig)

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.canvas = MplCanvas(self, width=5, height=4, dpi=100)
        self.setCentralWidget(self.canvas)

        self.xdata = ["12:30:20", "12:30:21", "12:30:22", "12:30:23", "12:30:24"]
        self.ydata = [random.randint(0, 10) for i in self.xdata]
        self.update_plot()

        self.show()

        # Setup a timer to trigger the redraw by calling update_plot.
        self.timer = QtCore.QTimer()
        self.timer.setInterval(500)
        self.timer.timeout.connect(self.update_plot)
        self.timer.start()

    def update_plot(self):
        # Drop off the first y element, append a new one.
        self.ydata = self.ydata[1:] + [random.randint(0, 10)]
        self.canvas.axes.cla()  # Clear the canvas.
        self.canvas.axes.plot(self.xdata, self.ydata, 'r')
        # Trigger the canvas to update and redraw.
        self.canvas.draw()


app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
app.exec_()
这将产生以下结果:


您可以在此处使用任何想要的值,下面是另一个字母示例:

        self.xdata = ["aa", "bb", "cc", "dd", "ee"]
        self.ydata = [random.randint(0, 10) for i in self.xdata]


以下是评论中后续问题的版本。
如果您想更改扩展数据,您需要对扩展数据执行与
ydata相同的操作

import sys
import random
import datetime
import matplotlib
matplotlib.use('Qt5Agg')
from PyQt5 import QtCore, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class MplCanvas(FigureCanvas):
    def __init__(self, parent=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        super(MplCanvas, self).__init__(fig)


class MainWindow(QtWidgets.QMainWindow):
    def now(self, x):
        n = datetime.datetime.now()
        return (n + datetime.timedelta(seconds=x)).strftime("%H:%M:%S")

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.canvas = MplCanvas(self, width=5, height=4, dpi=100)
        self.setCentralWidget(self.canvas)

        self.xdata = [self.now(-5), self.now(-4), self.now(-3), self.now(-2), self.now(-1)]
        self.ydata = [random.randint(0, 10) for i in self.xdata]
        self.update_plot()
        self.show()

        # Setup a timer to trigger the redraw by calling update_plot.
        self.timer = QtCore.QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.update_plot)
        self.timer.start()

    def update_plot(self):
        # Drop off the first element, append a new one.
        self.xdata = self.xdata[1:] + [self.now(0)]
        self.ydata = self.ydata[1:] + [random.randint(0, 10)]
        self.canvas.axes.cla()  # Clear the canvas.
        self.canvas.axes.plot(self.xdata, self.ydata, 'r')
        # Trigger the canvas to update and redraw.
        self.canvas.draw()


app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
app.exec_()

亲爱的赫尔德,还有其他方式显示轴上的真实时间吗?datetime.now(),time.time()。输入一个信号或值并绘制精确的时间。我想使用如下所示,但有错误。self.xdata.append(dt.datetime.now().strftime('%H:%M:%S.%f'))self.ydata=[random.randint(0,10)for i in self.xdata]self.update_plot()是的,您可以使用它。。。看看我上次添加的内容,我现在添加了一个新函数,可以帮助您在X轴上添加多个实时值亲爱的Helder,谢谢。现在它正是我想要的。@Esc我很高兴它对你有用。。。看起来你是新来问问题的,你应该读一读