Matplotlib 绘图 x 轴(数据文件日期时间)
Posted
技术标签:
【中文标题】Matplotlib 绘图 x 轴(数据文件日期时间)【英文标题】:Matplotlib plot x axis (data file datetime) 【发布时间】:2020-04-01 06:07:11 【问题描述】:我将使用 Python 的 GUI 显示图形。 GUI 代码和通用代码的应用方式不同(x 轴)。我没有在剧情中专门设置任何选项,但原因未知。使用obspy模块,加载地震数据格式的mseed文件并显示图形是简单的代码。 到目前为止,为了将x轴作为日期时间,我尝试使用'arange'函数和'for in'函数将其放入绘图中,但GUI程序无法正常运行并结束。 问题是绘图正常绘制,但x轴显示为数据的采样率,而不是时间。
完整的代码如下所示:
import sys, os
from os.path import basename
import numpy as np
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import matplotlib.pyplot as plt
import obspy.signal.util as sig
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from obspy import read, UTCDateTime
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setupUI()
def setupUI(self):
# GUI WINDOW
self.setGeometry(100, 100, 1000, 700)
self.setWindowTitle("TEST TITLE")
# OPEN FILE DIALOG
self.pushButton = QPushButton("LOAD FILE")
self.pushButton.clicked.connect(self.pushButtonClicked)
# LABLE, NOT USED
self.label = QLabel("", self)
self.label.resize(1000, 30)
# PLOT FIGURE, CANVAS AND NAVIGATION TOOLBAR
self.fig = plt.Figure()
self.canvas = FigureCanvas(self.fig)
self.toolbar = NavigationToolbar(self.canvas, self)
# LAYOUT(CANVAS, TOOLBAR)
topLayout = QVBoxLayout()
topLayout.addWidget(self.toolbar)
topLayout.addWidget(self.canvas)
# LAYOUT(BUTTON)
bottomLayout = QHBoxLayout()
bottomLayout.addWidget(self.pushButton)
bottomLayout.addStretch(1)
# ALL LAYOUT
layout = QVBoxLayout()
layout.addLayout(topLayout)
layout.addLayout(bottomLayout)
layout.setStretchFactor(topLayout, 1)
layout.setStretchFactor(bottomLayout, 0)
# SET LOAYOUT
self.setLayout(layout)
# LOAD DATA FILE, DIALOG BUTTON
def pushButtonClicked(self):
#LOAD FILE
pathfile0 = QFileDialog.getOpenFileName(self)
fname = basename(pathfile0[0])
data = read(fname)
self.fig.clear()
self.ax = self.fig.add_subplot(111)
self.ax.cla()
self.ax.plot(data[0])
self.ax.set_ylabel("Count")
self.ax.set_xlabel("Time Domain [s]")
self.ax.grid()
self.canvas.draw()
self.canvas.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyWindow()
window.show()
app.exec_()
from obspy import read, UTCDateTime
def check_ms(fname) :
data = read(fname)
#myS = UTCDateTime("2020-02-12T02:30:00")
#myE = myS + 120
#data.trim(myS, myE)
data.plot()
check_ms('KE2.TS.00.BGE.2020.043')
此代码在没有 GUI 的情况下以纯 Python 代码加载和绘制 mseed 地震数据。
【问题讨论】:
【参考方案1】:只需将 Figure 传递给 plot 方法,而不是创建新的 ax:
def pushButtonClicked(self):
pathfile, _ = QFileDialog.getOpenFileName(self)
if pathfile:
fname = basename(pathfile)
data = read(fname)
data.plot(fig=self.fig)
【讨论】:
改代码很流畅。成功的。谢谢。以上是关于Matplotlib 绘图 x 轴(数据文件日期时间)的主要内容,如果未能解决你的问题,请参考以下文章