5 # Created by Ali Mortazavi on 12/13/07.
20 print "%prog: version 3.2"
27 usage = "usage: python %prog infile1 [infile2] [infile3] [options] outfile.png"
29 parser = optparse.OptionParser(usage=usage)
30 parser.add_option("--bins", type="int", dest="bins")
31 parser.add_option("--field", type="int", dest="binnedField")
32 parser.add_option("--binSize", type="float", dest="binLength")
33 parser.add_option("--doLog", type="int", dest="logBase")
34 parser.add_option("--ymax", type="int", dest="maxY")
35 parser.add_option("--xlabel", dest="xLabel")
36 parser.add_option("--ylabel", dest="yLabel")
37 parser.add_option("--binLabels", dest="binLabels", help="comma separated list")
38 parser.add_option("--title", dest="figTitle")
39 parser.add_option("--legend", dest="barsLegend", help="comma separated list")
40 parser.add_option("--xoffset", type="float", dest="pointOffset")
41 parser.add_option("--figsize", dest="figSizes", help="x,y pair")
42 parser.set_defaults(bins=10, binnedField=-1, binLength=-1, logBase=None, maxY=0,
43 xLabel="bins", yLabel="count", binLabels=None, figTitle="",
44 barsLegend=None, pointOffset=0., figSizes=None)
46 (options, args) = parser.parse_args(argv[1:])
49 if len(args) < 2 or len(args) > 4:
51 print "where labelList and legendList are comma delimited strings of the form 'labelA,labelB,...,labelN'"
55 pngfilename = args[-1]
57 plotbardist(fileList, pngfilename, options.bins, options.binnedField, options.binLength,
58 options.logBase, options.maxY, options.xLabel, options.yLabel, options.binLabels,
59 options.figTitle, options.barsLegend, options.pointOffset, options.figSizes)
62 def plotbardist(fileList, pngfilename, bins=10, binnedField=-1, binLength=-1, logBase=None,
63 maxY=0, xLabel="bins", yLabel="count", binLabels=None, figTitle="",
64 barsLegend=None, pointOffset=0., figSizes=None):
67 plotParameters = {1: {"width": 0.5,
72 "offset": [-0.2, 0., 0.2]}
75 colorList = ["b", "r", "c"]
76 width = plotParameters[len(fileList)]["width"]
77 offset = plotParameters[len(fileList)]["offset"]
80 if logBase is not None:
82 print "taking log%d of x datapoints" % logBase
83 xLabel = "log%d(%s)" % (logBase, xLabel)
87 if figSizes is not None:
88 sizes = figSizes.strip().split(",")
89 figure(figsize=(float(sizes[0]),float(sizes[1])))
92 if binLabels is not None:
93 binLabels = binLabels.strip().split(",")
98 if barsLegend is not None:
99 barsLegend = barsLegend.strip().split(",")
108 for fileName in fileList:
109 aFile = open(fileName)
114 fields = line.strip().split()
116 point = float(fields[binnedField]) + pointOffset
121 point = log(point, logBase)
123 dataList.append(point)
127 print "%d data points" % len(dataList)
130 print "low = %f high = %f" % (dataList[0], dataList[-1])
133 binLength = abs(dataList[-1] - dataList[0]) / bins
135 for point in dataList:
137 distbin[int(round(point/binLength))] += 1
141 print binLength, int(round(point/binLength))
143 bars.append(bar(ind2 + offset[index], distbin, width, color=colorList[index]))
144 barsColors.append(bars[-1][0])
147 halfCount = sum(distbin) / 2
150 while not foundMedian:
151 if sum(distbin[:median]) < halfCount:
159 xlim(-1 * width - 0.2, bins + 0.2)
161 if len(barsLegend) > 0:
162 legend(barsColors, barsLegend)
168 setp(gca(), "xticklabels", binLabels)
173 if len(figTitle) > 0:
176 gca().get_xaxis().tick_bottom()
177 gca().get_yaxis().tick_left()
182 if __name__ == "__main__":