Python 如何在轴上绘制时间图形
我正在尝试编写一些代码来实时绘制一些值,我发现下面的示例很有效,但我想显示轴12:30:20、12:30:21上的时间。。。。。而不是显示10,20,30 有什么解决办法吗?我在哪里可以看到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
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我很高兴它对你有用。。。看起来你是新来问问题的,你应该读一读