from __future__ import print_function from future.builtins import super import os import sys import numpy import matplotlib from matplotlib.figure import Figure from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg from PyQt5.QtGui import QIcon from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QSizePolicy, QMainWindow, QApplication, QAction from PyQt5.QtWidgets import QMenu, QWidget, QVBoxLayout, QMessageBox from PyQt5.QtWidgets import QSlider, QHBoxLayout, QLabel, QDialog from PyQt5.QtWidgets import QDialogButtonBox class GravityModelCanvas(FigureCanvasQTAgg): def __init__(self, parent=None, width=5, height=4, dpi=100): self.fig = Figure(figsize=(width, height), dpi=dpi) super().__init__(self.fig) self.setParent(parent) self._x, self._z = None, None self._min_depth, self._max_depth = 0., 35000. self.predicted = None self.data = None self.polygons = None self._plotted = False FigureCanvasQTAgg.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding) FigureCanvasQTAgg.updateGeometry(self) @property def x(self): return self._x @x.setter def x(self, new_value): self._x = new_value @property def z(self): return self._z @z.setter def z(self, new_value): self._z = new_value @property def min_depth(self): return self._min_depth @min_depth.setter def min_depth(self, new_value): self._min_depth = new_value @property def max_depth(self): return self._max_depth @max_depth.setter def max_depth(self, new_value): self._max_depth = new_value def update_plot(self): if self._plotted: pass else: self._figure_setup() def _figure_setup(self, **kwargs): self.dataax, self.modelax = self.fig.subplots(2, 1, sharex=True) if self.data is not None: self.data_line, = self.dataax.plot(self.x, self.data, '.k') self.dataax.set_ylabel('Gravity anomaly [mGal]') self.dataax.set_xlim(self.x.min(), self.x.max()) self.dataax.set_ylim((-200, 200)) self.dataax.grid(True) self.modelax.set_xlabel('x [m]') self.modelax.set_xlim(self.x.min(), self.x.max()) self.modelax.set_ylim(self.min_depth, self.max_depth) self.modelax.grid(True) self.modelax.invert_yaxis() self.modelax.set_ylabel('z [m]') self.fig.subplots_adjust(top=0.95, left=0.1, right=0.95, bottom=0.1, hspace=0.1) self.figure = self.fig self.canvas = self.fig.canvas self.fig.canvas.draw()