def plot_gossip_rate(self): sequences = analysis.gossip_events(self.events) for i in xrange(len(sequences)): # don't want to bucket by address sequences[i] = [t for t,src,dst in sequences[i]] legend = self.leaf_projections scalar = 1./len(self.unique_addresses) xyvals = [analysis.frequency_count(self, sequence, subdivisions=5, bucket_scalar = scalar) for sequence in sequences] ylabel = "Fraction of nodes initiating gossip" xlabel = "Time (rounds)" ipython.analysis_plot_2d_multiple(xyvals, xlabel, ylabel, legend)
def plot_state_change_graph_leaves(self): import matplotlib.pyplot as plt import numpy as np import analysis saved_projection = self.get_projection() n = len(self.unique_addresses) xyvals = [] for leaf_projection in self.leaf_projections: self.set_projection(leaf_projection) xyvals += [analysis.compute_changes_per_round(self, subdivisions=1, bucket_scalar = 1./n)] # restore previous projection self.set_projection(saved_projection) xlabel = "MiCA Rounds (%s ms)" % self.runtime_info.round_ms ylabel = "Fraction of nodes changed state" legend_labels = self.leaf_projections ipython.analysis_plot_2d_multiple(xyvals, xlabel, ylabel, legend_labels)
def plot_notable_events(self, ne_suffix): import matplotlib.pyplot as plt import numpy as np ne_categories = {} # key -> sequence for key, timestamp, address in self.notable_events(ne_suffix): if key not in ne_categories: ne_categories[key] = [] ne_categories[key].append(timestamp) notable_sequences = sorted(ne_categories.items()) xlabel = "Round" ylabel = "Rate (%s events per round)" % ne_suffix legend_labels = [] xyvals = [] for key, sequence in notable_sequences: legend_labels += [key] xy = analysis.frequency_count(self, sequence, subdivisions=5) xyvals += [xy] ipython.analysis_plot_2d_multiple(xyvals, xlabel, ylabel, legend_labels)
def plot_2d(self, x, y, xlabel="x", ylabel = "y"): ipython.analysis_plot_2d_multiple([(x,y)], xlabel, ylabel, )