[edit] implemented a plotting method for pdf dictionaries
This commit is contained in:
parent
c7d7acd7e3
commit
63ac0107d0
@ -86,8 +86,8 @@ class Comparison(object):
|
||||
"""
|
||||
compare_pdfs = dict()
|
||||
|
||||
pdf_a = self.get(self.names[0]).pdf_data(type)
|
||||
pdf_b = self.get(self.names[1]).pdf_data(type)
|
||||
pdf_a = self.get(self.names[0]).generate_pdf_data(type)
|
||||
pdf_b = self.get(self.names[1]).generate_pdf_data(type)
|
||||
|
||||
for station, phases in pdf_a.items():
|
||||
if station in pdf_b.keys():
|
||||
@ -206,6 +206,7 @@ class PDFDictionary(object):
|
||||
|
||||
def __init__(self, data):
|
||||
self._pickdata = data
|
||||
self._pdfdata = self.generate_pdf_data()
|
||||
|
||||
def __nonzero__(self):
|
||||
if len(self.pick_data) < 1:
|
||||
@ -213,6 +214,14 @@ class PDFDictionary(object):
|
||||
else:
|
||||
return True
|
||||
|
||||
@property
|
||||
def pdf_data(self):
|
||||
return self._pdfdata
|
||||
|
||||
@pdf_data.setter
|
||||
def pdf_data(self, data):
|
||||
self._pdfdata = data
|
||||
|
||||
@property
|
||||
def pick_data(self):
|
||||
return self._pickdata
|
||||
@ -221,6 +230,14 @@ class PDFDictionary(object):
|
||||
def pick_data(self, data):
|
||||
self._pickdata = data
|
||||
|
||||
@property
|
||||
def stations(self):
|
||||
return self.pick_data.keys()
|
||||
|
||||
@property
|
||||
def nstations(self):
|
||||
return len(self.stations)
|
||||
|
||||
@classmethod
|
||||
def from_quakeml(self, fn):
|
||||
cat = read_events(fn)
|
||||
@ -229,7 +246,7 @@ class PDFDictionary(object):
|
||||
'time is not implemented yet! Sorry!')
|
||||
return PDFDictionary(picksdict_from_picks(cat[0]))
|
||||
|
||||
def pdf_data(self, type='exp'):
|
||||
def generate_pdf_data(self, type='exp'):
|
||||
"""
|
||||
Returns probabiliy density function dictionary containing the
|
||||
representation of the actual pick_data.
|
||||
@ -251,3 +268,50 @@ class PDFDictionary(object):
|
||||
|
||||
return pdf_picks
|
||||
|
||||
def plot(self, stations=None):
|
||||
assert stations is not None or not isinstance(stations, list), \
|
||||
'parameter stations should be a list not {0}'.format(type(stations))
|
||||
if not stations:
|
||||
nstations = self.nstations
|
||||
stations = self.stations
|
||||
else:
|
||||
nstations = len(stations)
|
||||
|
||||
istations = range(nstations)
|
||||
fig, axarr = plt.subplots(nstations, 2, sharex='col', sharey='row')
|
||||
|
||||
for n in istations:
|
||||
station = stations[n]
|
||||
pdfs = self.pdf_data[station]
|
||||
for l, phase in enumerate(pdfs.keys()):
|
||||
hide_labels = True
|
||||
try:
|
||||
axarr[n, l].plot(pdfs[phase].axis, pdfs[phase].data)
|
||||
if n is 0:
|
||||
axarr[n, l].set_title(phase)
|
||||
if l is 0:
|
||||
axann = axarr[n, l].annotate(station, xy=(.05, .5),
|
||||
xycoords='axes fraction')
|
||||
bbox_props = dict(boxstyle='round', facecolor='lightgrey',
|
||||
alpha=.7)
|
||||
axann.set_bbox(bbox_props)
|
||||
if n == int(np.median(istations)) and l is 0:
|
||||
label = 'probability density (qualitative)'
|
||||
axarr[n, l].set_ylabel(label)
|
||||
except IndexError as e:
|
||||
print('trying aligned plotting\n{0}'.format(e))
|
||||
hide_labels = False
|
||||
axarr[l].plot(pdfs[phase].axis, pdfs[phase].data)
|
||||
axarr[l].set_title(phase)
|
||||
if l is 0:
|
||||
axann = axarr[l].annotate(station, xy=(.05, .5),
|
||||
xycoords='axes fraction')
|
||||
bbox_props = dict(boxstyle='round', facecolor='lightgrey',
|
||||
alpha=.7)
|
||||
axann.set_bbox(bbox_props)
|
||||
if hide_labels:
|
||||
plt.setp([a.get_xticklabels() for a in axarr[0, :]], visible=False)
|
||||
plt.setp([a.get_yticklabels() for a in axarr[:, 1]], visible=False)
|
||||
plt.setp([a.get_yticklabels() for a in axarr[:, 0]], visible=False)
|
||||
|
||||
plt.show()
|
||||
|
Loading…
Reference in New Issue
Block a user