From 37546c5021578745034cd12b60d132a0977714a1 Mon Sep 17 00:00:00 2001 From: Matt Mackall Date: Mon, 6 Apr 2009 23:19:46 -0700 Subject: [PATCH] break pie chart into separate function --- smem | 72 ++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/smem b/smem index 1f9e6d8..2a465e7 100755 --- a/smem +++ b/smem @@ -390,40 +390,8 @@ def showtable(rows, fields, columns, sort): l.sort(reverse=bool(options.reverse)) if options.pie: - if (l[0][0] < l[-1][0]): - l.reverse() - try: - import pylab - except ImportError: - sys.write.stderr("pie chart requires matplotlib") - sys.exit(-1) - - labels = [r[1][-1] for r in l] - values = [r[0] for r in l] # sort field - - tm = totalmem() / 1024 - s = sum(values) - unused = tm - s - t = 0 - while t + values[-1] < (tm * .02) or values[-1] < (tm * .005): - t += values.pop() - labels.pop() - if t: - values.append(t) - labels.append('other') - - explode = [0] * len(values) - if unused > 0: - values.insert(0, unused) - labels.insert(0, 'unused') - explode.insert(0, .05) - - pylab.figure(1, figsize=(6,6)) - ax = pylab.axes([0.1, 0.1, 0.8, 0.8]) - pylab.pie(values, explode = explode, labels=labels, - autopct="%.2f%%", shadow=True) - pylab.show() - sys.exit(1) + showpie(l, sort) + return if not options.no_header: print header @@ -444,6 +412,42 @@ def showtable(rows, fields, columns, sort): print "-" * len(header) print format % tuple([f(v) for f,v in zip(formatter, t)]) +def showpie(l, sort): + if (l[0][0] < l[-1][0]): + l.reverse() + try: + import pylab + except ImportError: + sys.stderr.write("pie chart requires matplotlib\n") + sys.exit(-1) + + labels = [r[1][-1] for r in l] + values = [r[0] for r in l] # sort field + + tm = totalmem() / 1024 + s = sum(values) + unused = tm - s + t = 0 + while t + values[-1] < (tm * .02) or values[-1] < (tm * .005): + t += values.pop() + labels.pop() + if t: + values.append(t) + labels.append('other') + + explode = [0] * len(values) + if unused > 0: + values.insert(0, unused) + labels.insert(0, 'unused') + explode.insert(0, .05) + + pylab.figure(1, figsize=(6,6)) + ax = pylab.axes([0.1, 0.1, 0.8, 0.8]) + pylab.pie(values, explode = explode, labels=labels, + autopct="%.2f%%", shadow=True) + pylab.title('%s by %s' % (options.pie, sort)) + pylab.show() + parser = optparse.OptionParser("%prog [options]") parser.add_option("-H", "--no-header", action="store_true", help="disable header line")