mi@0
|
1 import numpy as np
|
mi@0
|
2 from numpy import *
|
mi@0
|
3 import sys, resource
|
mi@0
|
4 # import matplotlib.pyplot as plt
|
mi@0
|
5 import subprocess as sp
|
mi@0
|
6 import cPickle as pickle
|
mi@0
|
7
|
mi@0
|
8 # set this True or False to enable/disable plotting
|
mitian@18
|
9 # plot_on = False
|
mitian@18
|
10 plot_on = True
|
mi@0
|
11
|
mi@0
|
12 if plot_on :
|
mi@0
|
13 import matplotlib.pyplot as plt
|
mitian@12
|
14
|
mitian@18
|
15 gt = np.genfromtxt('/Users/mitian/Documents/hg/segmenter/annotation/qupujicheng_annotation_30_3/10hongniang01.csv', delimiter=',')[:,0]
|
mitian@18
|
16 # gt = np.genfromtxt('../annotation/TheBeatles/seg_tut/03LucyInTheSkyWithDiamonds.lab',)[:,0]
|
mitian@12
|
17
|
mi@0
|
18 class OnsetPlot(object):
|
mi@0
|
19 '''This class allows creating a series of plots easily.'''
|
mi@0
|
20
|
mi@0
|
21 def __init__(self):
|
mi@0
|
22 self.signal_plots = []
|
mi@0
|
23 self.marker_plots = []
|
mi@0
|
24 self.subplots = {}
|
mi@0
|
25
|
mi@0
|
26 def reset(self):
|
mi@0
|
27 self.__init__()
|
mi@0
|
28
|
mi@0
|
29 def update(self,obj):
|
mi@0
|
30 self.signal_plots = obj.signal_plots
|
mi@0
|
31 self.marker_plots = obj.marker_plots
|
mi@0
|
32 self.subplots = obj.subplots
|
mi@0
|
33
|
mi@0
|
34 def add_plot(self,signal,subplot=-1,title=""):
|
mi@0
|
35 self.signal_plots.append([signal,subplot,title])
|
mi@0
|
36
|
mi@0
|
37 def plot_signal(self,signal,subplot,title):
|
mi@0
|
38 axes = self.figure.add_subplot(subplot)
|
mi@0
|
39 axes.plot(signal)
|
mitian@12
|
40 axes.get_xaxis().set_visible(False)
|
mitian@12
|
41 axes.vlines(gt / gt[-1] * len(signal), np.min(signal), np.max(signal), colors='k')
|
mitian@12
|
42 if title : axes.set_title(title, fontsize=20)
|
mi@0
|
43 plt.axis('tight')
|
mi@0
|
44 self.subplots.update({subplot:(axes,signal)})
|
mi@0
|
45
|
mi@0
|
46 def plot_markers(self,markers,symbol,subplot):
|
mi@0
|
47 values = zeros(len(markers)) + 1
|
mi@0
|
48 axes,signal = self.subplots[subplot]
|
mitian@12
|
49 axes.plot(markers,np.array(signal)[markers],symbol,markersize=12)
|
mi@0
|
50
|
mi@0
|
51 def add_markers(self,markers,symbol="g^",subplot=-1):
|
mi@0
|
52 self.marker_plots.append([markers,symbol,subplot])
|
mitian@18
|
53
|
mi@0
|
54 def show_in_subprocess(self):
|
mi@0
|
55 '''Marshal the object into a separate subprocess to fix OS/X issues with threading.'''
|
mi@0
|
56 cmd = "python %s" %__file__
|
mi@0
|
57 print "executing:", cmd
|
mi@0
|
58 proc = sp.Popen(cmd, stdin = sp.PIPE, stdout = sp.PIPE, shell=True)
|
mi@0
|
59 pickle.dump(self,proc.stdin)
|
mi@0
|
60 result = proc.stdout.readlines()
|
mi@0
|
61 for item in result:
|
mi@0
|
62 print str(item).strip()
|
mi@0
|
63 proc.wait()
|
mi@0
|
64 return result
|
mi@0
|
65
|
mi@0
|
66 def show(self):
|
mi@0
|
67 self.figure = plt.figure(figsize=(15,6))
|
mi@0
|
68 num_plots = len(self.signal_plots)
|
mi@0
|
69 for i,s in enumerate(self.signal_plots) :
|
mi@0
|
70 j = i+1
|
mi@0
|
71 if s[1] < 1 :
|
mi@0
|
72 s[1] = int("%(num_plots)s1%(j)s" %locals())
|
mi@0
|
73 else :
|
mi@0
|
74 k = s[1]
|
mi@0
|
75 s[1] = int("%(num_plots)s1%(k)s" %locals())
|
mi@0
|
76 print "plotting:",s[2]
|
mi@0
|
77 s = tuple(s)
|
mi@0
|
78 self.plot_signal(*s)
|
mi@0
|
79 # plot marketrs on the last subplot
|
mi@0
|
80 for m in self.marker_plots :
|
mi@0
|
81 if m[2] < 1 or m[2] > num_plots:
|
mi@0
|
82 m[2] = int("%(num_plots)s1%(num_plots)s" %locals())
|
mi@0
|
83 else :
|
mi@0
|
84 k = m[2]
|
mi@0
|
85 m[2] = int("%(num_plots)s1%(k)s" %locals())
|
mi@0
|
86 m = tuple(m)
|
mi@0
|
87 self.plot_markers(*m)
|
mi@0
|
88 plt.show(block=True)
|
mi@0
|
89
|
mi@0
|
90 # create a module-level instance that can be reused across several files
|
mi@0
|
91 onset_plot = OnsetPlot()
|
mi@0
|
92
|
mi@0
|
93 if __name__ == '__main__':
|
mi@0
|
94 obj = pickle.load(sys.stdin)
|
mi@0
|
95 onset_plot = OnsetPlot()
|
mi@0
|
96 onset_plot.update(obj)
|
mi@0
|
97 onset_plot.show()
|
mi@0
|
98
|
mi@0
|
99
|
mi@0
|
100
|