Matplotlib plot x axis (файл данных дата / время) - PullRequest
0 голосов
/ 01 апреля 2020

Я собираюсь отобразить график с использованием 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_()

GUI_plot

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')

Этот код загружает и отображает данные о землетрясениях в виде семян в чистом коде python без GUI.

NOT_GUI_plot

1 Ответ

0 голосов
/ 01 апреля 2020

Вместо создания нового топора необходимо просто передать рисунок на метод построения:

def pushButtonClicked(self):
    pathfile, _ = QFileDialog.getOpenFileName(self)
    if pathfile:
        fname = basename(pathfile)
        data = read(fname)
        data.plot(fig=self.fig)

enter image description here

...