blob: f825be41fdc90665e8928b09bd1902894182f83a [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
# This script is used to plot simulation dynamics.
# Able to plot each flow separately. Other plot boxes can be added,
# currently one for Throughput, one for Latency and one for Packet Loss.
import matplotlib
import matplotlib.pyplot as plt
import math
import numpy
import re
import sys
class Variable:
def __init__(self, variable):
self._ID = variable[0]
self._xlabel = variable[1]
self._ylabel = variable[2]
self._subplot = variable[3]
self._y_max = variable[4]
self._samples = dict()
def getID(self):
return self._ID
def getXLabel(self):
return self._xlabel
def getYLabel(self):
return self._ylabel
def getSubplot(self):
return self._subplot
def getYMax(self):
return self._y_max
def getNumberOfFlows(self):
return len(self._samples)
def addSample(self, line):
groups = re.search(r'/\d_(\w+)#\d@(\w*)', line)
var_name = groups.group(1)
alg_name = groups.group(2)
if alg_name not in self._samples.keys():
self._samples[alg_name] = {}
if var_name not in self._samples[alg_name].keys():
self._samples[alg_name][var_name] = []
sample = re.search(r'(\d+\.\d+)\t([-]?\d+\.\d+)', line)
s = (sample.group(1),sample.group(2))
self._samples[alg_name][var_name].append(s)
def plotVar(v, ax, show_legend, show_x_label):
if show_x_label:
ax.set_xlabel(v.getXLabel(), fontsize='large')
ax.set_ylabel(v.getYLabel(), fontsize='large')
for alg in v._samples.keys():
i = 1
for series in v._samples[alg].keys():
x = [sample[0] for sample in v._samples[alg][series]]
y = [sample[1] for sample in v._samples[alg][series]]
x = numpy.array(x)
y = numpy.array(y)
line = plt.plot(x, y, label=alg, linewidth=4.0)
colormap = {'Available1':'#AAAAAA',
'Available2':'#AAAAAA',
'GCC1':'#80D000',
'GCC2':'#008000',
'GCC3':'#00F000',
'GCC4':'#00B000',
'GCC5':'#70B020',
'NADA1':'#0000AA',
'NADA2':'#A0A0FF',
'NADA3':'#0000FF',
'NADA4':'#C0A0FF',
'NADA5':'#9060B0',
'TCP1':'#AAAAAA',
'TCP2':'#AAAAAA',
'TCP3':'#AAAAAA',
'TCP4':'#AAAAAA',
'TCP5':'#AAAAAA',
'TCP6':'#AAAAAA',
'TCP7':'#AAAAAA',
'TCP8':'#AAAAAA',
'TCP9':'#AAAAAA',
'TCP10':'#AAAAAA',}
plt.setp(line, color=colormap[alg + str(i)])
if alg.startswith('Available'):
plt.setp(line, linestyle='--')
plt.grid(True)
x1, x2, y1, y2 = plt.axis()
if v.getYMax() >= 0:
y2 = v.getYMax()
plt.axis((0, x2, 0, y2))
i += 1
if show_legend:
legend = plt.legend(loc='upper right', shadow=True,
fontsize='large', ncol=len(v._samples))
if __name__ == '__main__':
variables = [
('Throughput_kbps', "Time (s)", "Throughput (kbps)", 1, 4000),
('Delay_ms', "Time (s)", "One-way Delay (ms)", 2, 500),
('Packet_Loss', "Time (s)", "Packet Loss Ratio", 3, 1.0),
]
var = []
# Create objects.
for variable in variables:
var.append(Variable(variable))
# Add samples to the objects.
for line in sys.stdin:
if line.startswith("[ RUN ]"):
test_name = re.search('\.(\w+)', line).group(1)
if line.startswith("PLOT"):
for v in var:
if v.getID() in line:
v.addSample(line)
matplotlib.rcParams.update({'font.size': 20})
# Plot variables.
fig = plt.figure()
# Offest and threshold on the same plot.
n = var[-1].getSubplot()
i = 0
for v in var:
ax = fig.add_subplot(n, 1, v.getSubplot())
plotVar(v, ax, i == 0, i == n - 1)
i += 1
#fig.savefig(test_name+".jpg")
plt.show()