[update] array_map legend inaxes, add lat/lon status, some fixes and improvements
This commit is contained in:
parent
0168d8923d
commit
7c0de44974
@ -7,6 +7,7 @@ import obspy
|
|||||||
from PySide import QtGui
|
from PySide import QtGui
|
||||||
from mpl_toolkits.basemap import Basemap
|
from mpl_toolkits.basemap import Basemap
|
||||||
from matplotlib.figure import Figure
|
from matplotlib.figure import Figure
|
||||||
|
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
|
||||||
from pylot.core.util.widgets import PickDlg, PylotCanvas
|
from pylot.core.util.widgets import PickDlg, PylotCanvas
|
||||||
from scipy.interpolate import griddata
|
from scipy.interpolate import griddata
|
||||||
|
|
||||||
@ -92,6 +93,7 @@ class Array_map(QtGui.QWidget):
|
|||||||
def connectSignals(self):
|
def connectSignals(self):
|
||||||
self.comboBox_phase.currentIndexChanged.connect(self._refresh_drawings)
|
self.comboBox_phase.currentIndexChanged.connect(self._refresh_drawings)
|
||||||
self.comboBox_am.currentIndexChanged.connect(self._refresh_drawings)
|
self.comboBox_am.currentIndexChanged.connect(self._refresh_drawings)
|
||||||
|
self.canvas.mpl_connect('motion_notify_event', self.mouse_moved)
|
||||||
#self.zoom_id = self.basemap.ax.figure.canvas.mpl_connect('scroll_event', self.zoom)
|
#self.zoom_id = self.basemap.ax.figure.canvas.mpl_connect('scroll_event', self.zoom)
|
||||||
|
|
||||||
def _from_dict(self, function, key):
|
def _from_dict(self, function, key):
|
||||||
@ -109,6 +111,14 @@ class Array_map(QtGui.QWidget):
|
|||||||
def get_max_from_picks(self):
|
def get_max_from_picks(self):
|
||||||
return max(self.picks_rel.values())
|
return max(self.picks_rel.values())
|
||||||
|
|
||||||
|
def mouse_moved(self, event):
|
||||||
|
if not event.inaxes == self.main_ax:
|
||||||
|
return
|
||||||
|
x = event.xdata
|
||||||
|
y = event.ydata
|
||||||
|
lat, lon = self.basemap(x, y, inverse=True)
|
||||||
|
self.status_label.setText('Latitude: {}, Longitude: {}'.format(lat, lon))
|
||||||
|
|
||||||
def current_picks_dict(self):
|
def current_picks_dict(self):
|
||||||
picktype = self.comboBox_am.currentText()
|
picktype = self.comboBox_am.currentText()
|
||||||
auto_manu = {'auto': self.autopicks_dict,
|
auto_manu = {'auto': self.autopicks_dict,
|
||||||
@ -119,16 +129,17 @@ class Array_map(QtGui.QWidget):
|
|||||||
if not self.figure:
|
if not self.figure:
|
||||||
self.figure = Figure()
|
self.figure = Figure()
|
||||||
|
|
||||||
|
self.status_label = QtGui.QLabel()
|
||||||
|
|
||||||
self.main_ax = self.figure.add_subplot(111)
|
self.main_ax = self.figure.add_subplot(111)
|
||||||
self.canvas = PylotCanvas(self.figure, parent=self._parent, multicursor=True,
|
self.canvas = PylotCanvas(self.figure, parent=self._parent, multicursor=True,
|
||||||
panZoomX=False, panZoomY=False)
|
panZoomX=False, panZoomY=False)
|
||||||
#self.canvas.setZoomBorders2content()
|
|
||||||
|
|
||||||
self.main_box = QtGui.QVBoxLayout()
|
self.main_box = QtGui.QVBoxLayout()
|
||||||
self.setLayout(self.main_box)
|
self.setLayout(self.main_box)
|
||||||
|
|
||||||
self.top_row = QtGui.QHBoxLayout()
|
self.top_row = QtGui.QHBoxLayout()
|
||||||
self.main_box.addLayout(self.top_row)
|
self.main_box.addLayout(self.top_row, 1)
|
||||||
|
|
||||||
self.comboBox_phase = QtGui.QComboBox()
|
self.comboBox_phase = QtGui.QComboBox()
|
||||||
self.comboBox_phase.insertItem(0, 'P')
|
self.comboBox_phase.insertItem(0, 'P')
|
||||||
@ -145,7 +156,8 @@ class Array_map(QtGui.QWidget):
|
|||||||
self.top_row.addWidget(self.comboBox_am)
|
self.top_row.addWidget(self.comboBox_am)
|
||||||
self.top_row.setStretch(3, 1) # set stretch of item 1 to 1
|
self.top_row.setStretch(3, 1) # set stretch of item 1 to 1
|
||||||
|
|
||||||
self.main_box.addWidget(self.canvas)
|
self.main_box.addWidget(self.canvas, 1)
|
||||||
|
self.main_box.addWidget(self.status_label, 0)
|
||||||
|
|
||||||
|
|
||||||
def init_stations(self):
|
def init_stations(self):
|
||||||
@ -231,8 +243,10 @@ class Array_map(QtGui.QWidget):
|
|||||||
|
|
||||||
def init_basemap(self, resolution='l'):
|
def init_basemap(self, resolution='l'):
|
||||||
# basemap = Basemap(projection=projection, resolution = resolution, ax=self.main_ax)
|
# basemap = Basemap(projection=projection, resolution = resolution, ax=self.main_ax)
|
||||||
|
width = 5e6
|
||||||
|
height = 2e6
|
||||||
basemap = Basemap(projection='lcc', resolution=resolution, ax=self.main_ax,
|
basemap = Basemap(projection='lcc', resolution=resolution, ax=self.main_ax,
|
||||||
width=5e6, height=2e6,
|
width=width, height=height,
|
||||||
lat_0=(self.latmin + self.latmax) / 2.,
|
lat_0=(self.latmin + self.latmax) / 2.,
|
||||||
lon_0=(self.lonmin + self.lonmax) / 2.)
|
lon_0=(self.lonmin + self.lonmax) / 2.)
|
||||||
|
|
||||||
@ -244,12 +258,16 @@ class Array_map(QtGui.QWidget):
|
|||||||
basemap.drawcoastlines(zorder=6)
|
basemap.drawcoastlines(zorder=6)
|
||||||
# labels = [left,right,top,bottom]
|
# labels = [left,right,top,bottom]
|
||||||
parallels = np.arange(-90, 90, 5.)
|
parallels = np.arange(-90, 90, 5.)
|
||||||
basemap.drawparallels(parallels, labels=[True, True, False, False], zorder=7)
|
parallels_small = np.arange(-90, 90, 2.5)
|
||||||
|
basemap.drawparallels(parallels_small, linewidth=0.5, zorder=7)
|
||||||
|
basemap.drawparallels(parallels, zorder=7)
|
||||||
meridians = np.arange(-180, 180, 5.)
|
meridians = np.arange(-180, 180, 5.)
|
||||||
basemap.drawmeridians(meridians, labels=[False, False, True, True], zorder=7)
|
meridians_small = np.arange(-180, 180, 2.5)
|
||||||
|
basemap.drawmeridians(meridians_small, linewidth=0.5, zorder=7)
|
||||||
|
basemap.drawmeridians(meridians, zorder=7)
|
||||||
self.basemap = basemap
|
self.basemap = basemap
|
||||||
self.figure._tight = True
|
self.figure._tight = True
|
||||||
self.figure.tight_layout(1.15)
|
self.figure.tight_layout()
|
||||||
|
|
||||||
def init_lat_lon_grid(self, nstep=250):
|
def init_lat_lon_grid(self, nstep=250):
|
||||||
# create a regular grid to display colormap
|
# create a regular grid to display colormap
|
||||||
@ -331,10 +349,20 @@ class Array_map(QtGui.QWidget):
|
|||||||
self.annotations.append(self.main_ax.annotate(' %s' % st, xy=(x, y),
|
self.annotations.append(self.main_ax.annotate(' %s' % st, xy=(x, y),
|
||||||
fontsize='x-small', color='white', zorder=12))
|
fontsize='x-small', color='white', zorder=12))
|
||||||
self.legend = self.main_ax.legend(loc=1)
|
self.legend = self.main_ax.legend(loc=1)
|
||||||
|
self.legend.get_frame().set_facecolor((1, 1, 1, 0.75))
|
||||||
|
|
||||||
def add_cbar(self, label):
|
def add_cbar(self, label):
|
||||||
cbar = self.main_ax.figure.colorbar(self.sc_picked, fraction=0.025)
|
self.cbax_bg = inset_axes(self.main_ax, width="6%", height="75%", loc=5)
|
||||||
|
cbax = inset_axes(self.main_ax, width='2%', height='70%', loc=5)
|
||||||
|
cbar = self.main_ax.figure.colorbar(self.sc_picked, cax = cbax)
|
||||||
cbar.set_label(label)
|
cbar.set_label(label)
|
||||||
|
cbax.yaxis.tick_left()
|
||||||
|
cbax.yaxis.set_label_position('left')
|
||||||
|
for spine in self.cbax_bg.spines.values():
|
||||||
|
spine.set_visible(False)
|
||||||
|
self.cbax_bg.yaxis.set_ticks([])
|
||||||
|
self.cbax_bg.xaxis.set_ticks([])
|
||||||
|
self.cbax_bg.patch.set_facecolor((1, 1, 1, 0.75))
|
||||||
return cbar
|
return cbar
|
||||||
|
|
||||||
def refresh_drawings(self, picks=None, autopicks=None):
|
def refresh_drawings(self, picks=None, autopicks=None):
|
||||||
@ -365,7 +393,8 @@ class Array_map(QtGui.QWidget):
|
|||||||
def remove_drawings(self):
|
def remove_drawings(self):
|
||||||
if hasattr(self, 'cbar'):
|
if hasattr(self, 'cbar'):
|
||||||
self.cbar.remove()
|
self.cbar.remove()
|
||||||
del (self.cbar)
|
self.cbax_bg.remove()
|
||||||
|
del (self.cbar, self.cbax_bg)
|
||||||
if hasattr(self, 'sc_picked'):
|
if hasattr(self, 'sc_picked'):
|
||||||
self.sc_picked.remove()
|
self.sc_picked.remove()
|
||||||
del (self.sc_picked)
|
del (self.sc_picked)
|
||||||
|
Loading…
Reference in New Issue
Block a user