comparison tools/plotting/plotter.py @ 0:9071e359b9a3

Uploaded
author xuebing
date Fri, 09 Mar 2012 19:37:19 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:9071e359b9a3
1 #!/usr/bin/env python
2
3 # python histogram input_file output_file column bins
4 import sys, os
5 import matplotlib; matplotlib.use('Agg')
6
7 from pylab import *
8
9 assert sys.version_info[:2] >= ( 2, 4 )
10
11 def stop_err(msg):
12 sys.stderr.write(msg)
13 sys.exit()
14
15 if __name__ == '__main__':
16 # parse the arguments
17
18 if len(sys.argv) != 6:
19 stop_err('Usage: python histogram.py input_file column bins output_file style')
20 sys.exit()
21
22 mode = sys.argv[5]
23 HIST = mode == 'hist'
24 try:
25 col = int(float(sys.argv[2]))
26 if HIST:
27 bin = int(float(sys.argv[3]))
28 else:
29 # hack, this parameter is the plotting style for scatter plots
30 if sys.argv[3] == 'P':
31 style = 'o'
32 elif sys.argv[3] == 'LP':
33 style = 'o-'
34 else:
35 style = '-'
36
37 except:
38 msg = 'Parameter were not numbers %s, %s' % (sys.argv[3], sys.argv[4])
39 stop_err(msg)
40
41 # validate arguments
42 inp_file = sys.argv[1]
43 out_file = sys.argv[4]
44
45 if HIST:
46 print "Histogram on column %s (%s bins)" % (col, bin)
47 else:
48 print "Scatterplot on column %s" % (col)
49
50 xcol= col -1
51 # read the file
52 values = []
53 try:
54 count = 0
55 for line in file(inp_file):
56 count += 1
57 line = line.strip()
58 if line and line[0] != '#':
59 values.append(float(line.split()[xcol]))
60 except Exception, e:
61 stop_err('%s' % e)
62 stop_err("Non numerical data at line %d, column %d" % (count, col) )
63
64 # plot the data
65
66 if HIST:
67 n, bins, patches = hist(values, bins=bin, normed=0)
68 else:
69 plot(values, style)
70
71 xlabel('values')
72 ylabel('counts')
73
74 if HIST:
75 title('Histogram of values over column %s (%s bins)' % (col, len(bins)) )
76 else:
77 title('Scatterplot over column %s' % col )
78 grid(True)
79
80 # the plotter detects types by file extension
81 png_out = out_file + '.png' # force it to png
82 savefig(png_out)
83
84 # shuffle it back and clean up
85 data = file(png_out, 'rb').read()
86 fp = open(out_file, 'wb')
87 fp.write(data)
88 fp.close()
89 os.remove(png_out)