"""generate boxplot for an aribitrary xml attribute"""
from __future__ import absolute_import
from __future__ import print_function
import os
import sys
sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '..'))
from sumolib.output import parse
from sumolib.miscutils import Statistics, parseTime
from sumolib.options import ArgumentParser
def parse_args():
optParser = ArgumentParser()
optParser.add_argument("tag", help="XML tag containing the attribute to be plotted")
optParser.add_argument("attr", help="XML attribute to be plotted")
optParser.add_argument("xmlfiles", help="XML file(s)", nargs='*')
return optParser.parse_args()
def main(tag, attr, xmlfiles):
data = []
for xmlfile in xmlfiles:
stats = Statistics('%s %s' % (tag, attr))
for elem in parse(xmlfile, tag):
stats.add(parseTime(elem.getAttribute(attr)), elem.id)
print(stats)
data.append(stats.values)
try:
import matplotlib.pyplot as plt
plt.figure()
plt.xticks(range(len(xmlfiles)), xmlfiles)
plt.ylabel("%s %s" % (tag, attr))
plt.boxplot(data)
plt.show()
except ImportError:
print("Matplotlib not found, cannot generate plot.", file=sys.stderr)
if __name__ == "__main__":
options = parse_args()
main(options.tag, options.attr, options.xmlfiles)