1#!/usr/bin/env python 2 3import matplotlib.pyplot as plt 4#from pylab import * 5import cPickle 6import pylab as P 7import numpy as np 8from matplotlib.backends.backend_pdf import PdfPages 9from matplotlib.patches import Polygon 10import itertools 11import os 12 13 14def histplot(data,labels, colors, x_label, y_label, title, fig_name, cdf): 15 fig, ax = plt.subplots() 16 if cdf: 17 n, bins, patches = ax.hist(data, 20, weights=None, histtype='step', normed=True, cumulative=True, label= labels, color = colors) 18 legend = ax.legend(loc='lower left', shadow=False) 19 ax.grid(True) 20 21 else: 22 n, bins, patches = ax.hist( data, 20, weights=None, histtype='bar', label= labels, color = colors) 23 legend = ax.legend(loc='upper right', shadow=False) 24 25 for line in ax.get_lines(): 26 line.set_linewidth(1.5) 27 28 ax.set_xlabel(x_label) 29 ax.set_ylabel(y_label) 30 for label in legend.get_texts(): 31 label.set_fontsize('small') 32 33 for label in legend.get_lines(): 34 label.set_linewidth(1.5) # the legend line width 35 36 fig.suptitle(title, fontsize=12) 37 38 #plt.show() 39 pp = PdfPages(fig_name) 40 pp.savefig(fig) 41 pp.close() 42 return [n, bins, patches] 43 44def accplot(data, labels, colors, x_label, y_label, title, fig_name, annotation): 45 mean = np.zeros(len(data)) 46 for i in range(len(data)): 47 if len(data[i]) > 0: 48 mean[i] = len(data[i]) /(1.0*max(data[i])) 49 50 mean = round(mean) 51 52 fig, ax = plt.subplots() 53 for i in range(len(data)): 54 if len(data[i]) > 0: 55 ax.plot(data[i], range(len(data[i])), colors[i], label= labels[i]+', '+mean[i]+' adv/s, total nr. '+str(len(data[i]))) 56 57 ax.set_xlabel(x_label) 58 ax.set_ylabel(y_label) 59 for tl in ax.get_yticklabels(): 60 tl.set_color('k') 61 62 legend = ax.legend(loc='upper left', shadow=False) 63 64 for label in legend.get_texts(): 65 label.set_fontsize('small') 66 67 for label in legend.get_lines(): 68 label.set_linewidth(1.5) # the legend line width 69 70 for line in ax.get_lines(): 71 line.set_linewidth(1.5) 72 73 fig.suptitle(title, fontsize=12) 74 ax.text(400, 5000, annotation , style='italic', 75 bbox={'facecolor':'gray', 'alpha':0.5, 'pad':10}) 76 77 #plt.show() 78 pp = PdfPages(fig_name) 79 pp.savefig(fig) 80 pp.close() 81 82 return fig 83 84def mean_common_len(data): 85 mcl = 0 86 for i in range(len(data) - 1): 87 if len(data[i]) > 0: 88 if mcl == 0: 89 mcl = len(data[i]) 90 else: 91 mcl = min(mcl, len(data[i])) 92 return mcl 93 94def mean_common_time(data): 95 mct = 0 96 for i in range(len(data) - 1): 97 if len(data[i]) > 0: 98 if mct == 0: 99 mct = max(data[i]) 100 else: 101 mct = min(mct, max(data[i])) 102 return mct 103 104def normalize(s): 105 return map(lambda x: (x - s[0]), s) 106 107def delta(s): 108 rs = list() 109 for i in range(len(s)-1): 110 rs.append(s[i+1] - s[i]) 111 return rs 112 113def round(s): 114 return map(lambda x: "{0:.4f}".format(x), s) 115 116def cut(s, V): 117 r = list() 118 for i in range(len(s)): 119 if s[i] <= V: 120 r.append(s[i]) 121 return r 122 123def prepare_data(exp_name, sensor_name): 124 prefix = '../data/processed/' 125 126 scanning_type = exp_name+'_continuous' 127 mn = cPickle.load(open(prefix+scanning_type+'_mac_'+sensor_name+'.data', 'rb')) # mac nio, 128 mm = cPickle.load(open(prefix+scanning_type+'_mac_mac.data', 'rb')) # mac mac, 129 rn = cPickle.load(open(prefix+scanning_type+'_rug_'+sensor_name+'.data', 'rb')) # ruggear nio, 130 rm = cPickle.load(open(prefix+scanning_type+'_rug_mac.data', 'rb')) # ruggear mac, 131 132 scanning_type = exp_name+'_normal' 133 try: 134 normal_rn = cPickle.load(open(prefix + scanning_type+'_rug_'+sensor_name+'.data', 'rb')) # ruggear mac, normal 135 except: 136 normal_rn = list() 137 138 try: 139 normal_mn = cPickle.load(open(prefix + scanning_type+'_mac_'+sensor_name+'.data', 'rb')) # ruggear mac, normal 140 except: 141 normal_mn = list() 142 143 try: 144 normal_rm = cPickle.load(open(prefix + scanning_type+'_rug_mac.data', 'rb')) # ruggear mac, normal 145 except: 146 normal_rm = list() 147 148 try: 149 normal_mm = cPickle.load(open(prefix + scanning_type+'_mac_mac.data', 'rb')) # ruggear mac, normal 150 except: 151 normal_mm = list() 152 153 154 T = mean_common_time([mm, mn, rm, rn, normal_rm, normal_rn, normal_mm, normal_mn]) 155 L = mean_common_len([mm, mn, rm, rn, normal_rm, normal_rn, normal_mm, normal_mn]) 156 Z = 15 157 158 print "mct %d, mcl %d" % (T,L) 159 mac_mac = normalize(mm) 160 mac_nio = normalize(mn) 161 ruggeer_mac = normalize(rm) 162 ruggeer_nio = normalize(rn) 163 164 ruggeer_nio_normal = normalize(normal_rn) 165 ruggeer_mac_normal = normalize(normal_rm) 166 mac_mac_normal = normalize(normal_mm) 167 mac_nio_normal = normalize(normal_mn) 168 169 170 delta_mn = delta(mac_nio) 171 delta_mm = delta(mac_mac) 172 delta_rn = delta(ruggeer_nio) 173 delta_rm = delta(ruggeer_mac) 174 175 rn_delays = list() 176 for i in range(len(delta_rn)): 177 rn_delays.append(range(delta_rn[i])) 178 179 flattened_rn_delays = list(itertools.chain.from_iterable(rn_delays)) 180 181 plot_data = [cut(mac_mac,T), cut(mac_nio,T), cut(ruggeer_mac,T), cut(ruggeer_nio,T)] 182 plot_data_normal = [cut(mac_mac_normal,T), cut(mac_nio_normal,T), cut(ruggeer_mac_normal,T), cut(ruggeer_nio_normal,T)] 183 184 hist_data = [delta_mm[0:L], delta_mn[0:L], delta_rm[0:L], delta_rn[0:L]] 185 186 zoomed_hist_data = list() 187 if len(hist_data[0]) >= Z and len(hist_data[1]) >= Z and len(hist_data[2]) >= Z and len(hist_data[3]) >= Z : 188 zoomed_hist_data = [cut(hist_data[0],Z), cut(hist_data[1],Z), cut(hist_data[2],Z), cut(hist_data[3],Z)] 189 190 return [plot_data, hist_data, zoomed_hist_data, flattened_rn_delays, plot_data_normal] 191 192def plot(exp_name, sensor_name, sensor_title, prefix): 193 [plot_data0, hist_data0, zoomed_hist_data0, rn_delays0, plot_data_normal0] = prepare_data(exp_name, sensor_name) 194 labels0 = ['Scan. BCM, Adv. BCM', 'Scan. BCM, Adv. '+ sensor_title, 'Scan. RugGear, Adv. BCM', 'Scan. RugGear, Adv. '+sensor_title] 195 plot_colors0 = ['r-','k-','b-','g-'] 196 hist_colors0 = ['red','black','blue','green'] 197 198 group_index1 = 2; 199 group_index2 = 3; 200 201 plot_data = [plot_data0[group_index1], plot_data0[group_index2]] 202 hist_data = [hist_data0[group_index1], hist_data0[group_index2]] 203 zoomed_hist_data = [zoomed_hist_data0[group_index1], zoomed_hist_data0[group_index2]] 204 rn_delays = [rn_delays0[group_index1], rn_delays0[group_index2]] 205 plot_data_normal = [plot_data_normal0[group_index1], plot_data_normal0[group_index2]] 206 labels = [labels0[group_index1], labels0[group_index2]] 207 plot_colors = [plot_colors0[group_index1], plot_colors0[group_index2]] 208 hist_colors = [hist_colors0[group_index1], hist_colors0[group_index2]] 209 210 title = 'Continuous scanning over time' 211 annotation = 'scan window 30ms, scan interval 30ms' 212 213 x_label = 'Time [s]' 214 y_label = 'Number of advertisements' 215 accplot(plot_data, labels, plot_colors, x_label, y_label, title, prefix+sensor_name+'_acc_number_of_advertisements_continuous_scanning.pdf', annotation) 216 217 x_label = 'Time interval between two advertisements [s]' 218 title = 'Continuous scanning - interval distribution' 219 histplot(hist_data, labels, hist_colors, x_label, y_label, title, prefix+sensor_name+'_histogram_advertisements_time_delay.pdf', 0) 220 221 222 #if len(zoomed_hist_data) > 0: 223 # title = 'Continuous scanning - interval distribution [0-15s]' 224 # histplot(zoomed_hist_data, labels, hist_colors, x_label, y_label, title, prefix+sensor_name+'_histogram_advertisements_time_delay_zoomed.pdf', 0) 225 226 # title = 'Continuous scanning - expected waiting time' 227 # x_label = 'Expected waiting time until first scan [s]' 228 # [n, bins, patches] = histplot([rn_delays], [labels0[3]], [hist_colors0[3]], x_label, y_label, title, prefix+sensor_name+'_ruggear_expected_scan_response.pdf', 0) 229 230 # title = 'Continuous scanning - expected waiting time probability distribution' 231 # y_label = 'Advertisement probability' 232 # x_label = 'Time until first scan [s]' 233 # [n, bins, patches] = histplot([rn_delays], [labels0[3]], [hist_colors0[3]], x_label, y_label, title, prefix+sensor_name+'_ruggear_cdf.pdf', 1) 234 235 236 title = 'Normal scanning over time' 237 annotation = 'scan window 30ms, scan interval 300ms' 238 239 x_label = 'Time [s]' 240 y_label = 'Number of advertisements' 241 if len(plot_data_normal[0]) > 0: 242 accplot(plot_data_normal, labels, plot_colors, x_label, y_label, title, prefix+sensor_name+'_acc_number_of_advertisements_normal_scanning.pdf', annotation) 243 244picts_folder = "../picts_experiments/" 245if not os.access(picts_folder, os.F_OK): 246 os.mkdir(picts_folder) 247 248#plot('exp1','nio', 'Nio') 249plot('exp2','xg1', 'XG', picts_folder) 250plot('exp2','xg2', 'XG', picts_folder) 251