annotate src/breadcrumbs/scripts/scriptPlotFeature.py @ 0:0de566f21448 draft default tip

v2
author sagun98
date Thu, 03 Jun 2021 18:13:32 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
sagun98
parents:
diff changeset
1 #!/usr/bin/env python
sagun98
parents:
diff changeset
2 """
sagun98
parents:
diff changeset
3 Author: Timothy Tickle
sagun98
parents:
diff changeset
4 Description: Plots feaures
sagun98
parents:
diff changeset
5 """
sagun98
parents:
diff changeset
6
sagun98
parents:
diff changeset
7 __author__ = "Timothy Tickle"
sagun98
parents:
diff changeset
8 __copyright__ = "Copyright 2012"
sagun98
parents:
diff changeset
9 __credits__ = ["Timothy Tickle"]
sagun98
parents:
diff changeset
10 __license__ = ""
sagun98
parents:
diff changeset
11 __version__ = ""
sagun98
parents:
diff changeset
12 __maintainer__ = "Timothy Tickle"
sagun98
parents:
diff changeset
13 __email__ = "ttickle@sph.harvard.edu"
sagun98
parents:
diff changeset
14 __status__ = "Development"
sagun98
parents:
diff changeset
15
sagun98
parents:
diff changeset
16 import sys
sagun98
parents:
diff changeset
17 import argparse
sagun98
parents:
diff changeset
18 import csv
sagun98
parents:
diff changeset
19 import os
sagun98
parents:
diff changeset
20 from src.BoxPlot import BoxPlot
sagun98
parents:
diff changeset
21 from src.Histogram import Histogram
sagun98
parents:
diff changeset
22 from src.ScatterPlot import ScatterPlot
sagun98
parents:
diff changeset
23
sagun98
parents:
diff changeset
24 def funcPlotBoxPlot(lxVariable1,lxVariable2,fOneIsNumeric):
sagun98
parents:
diff changeset
25
sagun98
parents:
diff changeset
26 ly,lsLabels = [lxVariable1,lxVariable2] if fOneIsNumeric else [lxVariable2,lxVariable1]
sagun98
parents:
diff changeset
27
sagun98
parents:
diff changeset
28 # Group data
sagun98
parents:
diff changeset
29 dictGroups = {}
sagun98
parents:
diff changeset
30 for iIndex in xrange(len(ly)):
sagun98
parents:
diff changeset
31 lsList = dictGroups.get(lsLabels[iIndex],[])
sagun98
parents:
diff changeset
32 lsList.append(ly[iIndex])
sagun98
parents:
diff changeset
33 dictGroups.setdefault(lsLabels[iIndex],lsList)
sagun98
parents:
diff changeset
34 ly = [dictGroups[sKey] for sKey in dictGroups.keys()]
sagun98
parents:
diff changeset
35 lsLabels = dictGroups.keys()
sagun98
parents:
diff changeset
36
sagun98
parents:
diff changeset
37 BoxPlot.funcPlot(ly=ly, lsLabels=lsLabels, strOutputFigurePath=args.strOutputFile, strTitle=args.strTitle, strXTitle=args.strX, strYTitle=args.strY, strColor=args.strColor, fJitter=True, fInvert=args.fColor, fInvertY=args.fAxis)
sagun98
parents:
diff changeset
38
sagun98
parents:
diff changeset
39
sagun98
parents:
diff changeset
40 #Set up arguments reader
sagun98
parents:
diff changeset
41 argp = argparse.ArgumentParser( prog = "scriptBoxPlot.py\nExample: python scriptBoxPlot.py Input.pcl valuesID groupID",
sagun98
parents:
diff changeset
42 description = "Make a box plot from an abundance table.")
sagun98
parents:
diff changeset
43
sagun98
parents:
diff changeset
44 #Sepecify output if needed
sagun98
parents:
diff changeset
45 argp.add_argument("-o","--output", dest="strOutputFile", action="store", default=None, help="Output file name.")
sagun98
parents:
diff changeset
46
sagun98
parents:
diff changeset
47 # Text annotation
sagun98
parents:
diff changeset
48 argp.add_argument("-t","--title", dest="strTitle", action="store", default=None, help="Test for the title.")
sagun98
parents:
diff changeset
49 argp.add_argument("-x","--xaxis", dest="strX", action="store", default=None, help="Text for the x-axis.")
sagun98
parents:
diff changeset
50 argp.add_argument("-y","--yaxis", dest="strY", action="store", default=None, help="Text for the y-axis.")
sagun98
parents:
diff changeset
51
sagun98
parents:
diff changeset
52 # Color options
sagun98
parents:
diff changeset
53 argp.add_argument("-c","--color", dest="strColor", action="store", default="#83C8F9", help="Fill color as a Hex number (including the #).")
sagun98
parents:
diff changeset
54 argp.add_argument("-r","--invertcolor", dest="fColor", action="store_true", default=False, help="Flag to invert the background to black.")
sagun98
parents:
diff changeset
55
sagun98
parents:
diff changeset
56 # Axis adjustments
sagun98
parents:
diff changeset
57 argp.add_argument("-s","--invertyaxis", dest="fAxis", action="store_true", default=False, help="Flag to invert the y axis.")
sagun98
parents:
diff changeset
58
sagun98
parents:
diff changeset
59 # Required
sagun98
parents:
diff changeset
60 argp.add_argument("strFileAbund", help ="Input data file")
sagun98
parents:
diff changeset
61 argp.add_argument("strFeatures", nargs = "+", help="Features to plot (from one to two metadata).")
sagun98
parents:
diff changeset
62
sagun98
parents:
diff changeset
63 args = argp.parse_args( )
sagun98
parents:
diff changeset
64
sagun98
parents:
diff changeset
65 #Holds the data
sagun98
parents:
diff changeset
66 lxVariable1 = None
sagun98
parents:
diff changeset
67 lxVariable2 = None
sagun98
parents:
diff changeset
68 fOneIsNumeric = False
sagun98
parents:
diff changeset
69 fTwoIsNumeric = False
sagun98
parents:
diff changeset
70
sagun98
parents:
diff changeset
71 strFeatureOneID = args.strFeatures[0]
sagun98
parents:
diff changeset
72 strFeatureTwoID = None if len(args.strFeatures)<2 else args.strFeatures[1]
sagun98
parents:
diff changeset
73
sagun98
parents:
diff changeset
74 # If the output file is not specified, make it up
sagun98
parents:
diff changeset
75 if not args.strOutputFile:
sagun98
parents:
diff changeset
76 lsPieces = os.path.splitext(args.strFileAbund)
sagun98
parents:
diff changeset
77 args.strOutputFile = [lsPieces[0],strFeatureOneID]
sagun98
parents:
diff changeset
78 if strFeatureTwoID:
sagun98
parents:
diff changeset
79 args.strOutputFile = args.strOutputFile+[strFeatureTwoID]
sagun98
parents:
diff changeset
80 args.strOutputFile = "-".join(args.strOutputFile+["plotfeature.pdf"])
sagun98
parents:
diff changeset
81
sagun98
parents:
diff changeset
82 if not args.strTitle:
sagun98
parents:
diff changeset
83 args.strTitle = [strFeatureOneID]
sagun98
parents:
diff changeset
84 if strFeatureTwoID:
sagun98
parents:
diff changeset
85 args.strTitle = args.strTitle+[strFeatureTwoID]
sagun98
parents:
diff changeset
86 args.strTitle = " vs ".join(args.strTitle)
sagun98
parents:
diff changeset
87
sagun98
parents:
diff changeset
88 csvReader = csv.reader(open(args.strFileAbund, 'rU') if isinstance(args.strFileAbund,str) else args.strFileAbund, delimiter="\t")
sagun98
parents:
diff changeset
89
sagun98
parents:
diff changeset
90 if args.strX is None:
sagun98
parents:
diff changeset
91 args.strX = strFeatureOneID
sagun98
parents:
diff changeset
92
sagun98
parents:
diff changeset
93 if args.strY is None:
sagun98
parents:
diff changeset
94 args.strY = strFeatureTwoID
sagun98
parents:
diff changeset
95
sagun98
parents:
diff changeset
96 # Get values and groupings
sagun98
parents:
diff changeset
97 for lsLine in csvReader:
sagun98
parents:
diff changeset
98 if lsLine[0] == strFeatureOneID:
sagun98
parents:
diff changeset
99 lxVariable1 = lsLine[1:]
sagun98
parents:
diff changeset
100 if not strFeatureTwoID is None:
sagun98
parents:
diff changeset
101 if lsLine[0] == strFeatureTwoID:
sagun98
parents:
diff changeset
102 lxVariable2 = lsLine[1:]
sagun98
parents:
diff changeset
103
sagun98
parents:
diff changeset
104 # Remove NAs
sagun98
parents:
diff changeset
105 liNAs = [i for i,x in enumerate(lxVariable1) if x.lower() == "na"]
sagun98
parents:
diff changeset
106 liNAs = set([i for i,x in enumerate(lxVariable1) if x.lower() == "na"]+liNAs)
sagun98
parents:
diff changeset
107 lxVariable1 = [x for i,x in enumerate(lxVariable1) if not i in liNAs]
sagun98
parents:
diff changeset
108
sagun98
parents:
diff changeset
109 if not lxVariable2 is None:
sagun98
parents:
diff changeset
110 lxVariable2 = [x for i,x in enumerate(lxVariable2) if not i in liNAs]
sagun98
parents:
diff changeset
111
sagun98
parents:
diff changeset
112 # Type variables
sagun98
parents:
diff changeset
113 if not lxVariable1 is None:
sagun98
parents:
diff changeset
114 try:
sagun98
parents:
diff changeset
115 float(lxVariable1[0])
sagun98
parents:
diff changeset
116 lxVariable1 = [float(xItem) for xItem in lxVariable1]
sagun98
parents:
diff changeset
117 fOneIsNumeric = True
sagun98
parents:
diff changeset
118 except ValueError:
sagun98
parents:
diff changeset
119 pass
sagun98
parents:
diff changeset
120
sagun98
parents:
diff changeset
121 if not lxVariable2 is None:
sagun98
parents:
diff changeset
122 try:
sagun98
parents:
diff changeset
123 float(lxVariable2[0])
sagun98
parents:
diff changeset
124 lxVariable2 = [float(xItem) for xItem in lxVariable2]
sagun98
parents:
diff changeset
125 fTwoIsNumeric = True
sagun98
parents:
diff changeset
126 except ValueError:
sagun98
parents:
diff changeset
127 pass
sagun98
parents:
diff changeset
128
sagun98
parents:
diff changeset
129 if lxVariable1 is None:
sagun98
parents:
diff changeset
130 print("scriptPlotFeature:: Sorry, could not find the feature "+ strFeatureOneID +" in the file "+args.strFileAbund+" .")
sagun98
parents:
diff changeset
131 elif( (lxVariable2 is None) and (not strFeatureTwoID is None) ):
sagun98
parents:
diff changeset
132 print("scriptPlotFeature:: Sorry, could not find the feature "+ strFeatureTwoID +" in the file "+args.strFileAbund+" .")
sagun98
parents:
diff changeset
133 else:
sagun98
parents:
diff changeset
134 # Plot as needed
sagun98
parents:
diff changeset
135 if((not lxVariable1 is None ) and (not lxVariable2 is None)):
sagun98
parents:
diff changeset
136 if(sum([fOneIsNumeric, fTwoIsNumeric])==0):
sagun98
parents:
diff changeset
137 print "scriptPlotFeature:: Error, If plotting 2 variables, atleast 1 should be numeric."
sagun98
parents:
diff changeset
138 elif(sum([fOneIsNumeric, fTwoIsNumeric])==1):
sagun98
parents:
diff changeset
139 funcPlotBoxPlot(lxVariable1,lxVariable2, fOneIsNumeric=fOneIsNumeric)
sagun98
parents:
diff changeset
140 elif(sum([fOneIsNumeric, fTwoIsNumeric])==2):
sagun98
parents:
diff changeset
141 ScatterPlot.funcPlot(lxVariable1, lxVariable2, args.strOutputFile, strTitle=args.strTitle, strXTitle=args.strX, strYTitle=args.strY, strColor=args.strColor, fInvert=args.fColor)
sagun98
parents:
diff changeset
142 elif(not lxVariable1 is None ):
sagun98
parents:
diff changeset
143 if fOneIsNumeric:
sagun98
parents:
diff changeset
144 Histogram.funcPlot(lxVariable1, args.strOutputFile, strTitle=args.strTitle, strXTitle=args.strX, strYTitle="Frequency", strColor=args.strColor, fInvert=args.fColor)
sagun98
parents:
diff changeset
145 else:
sagun98
parents:
diff changeset
146 print "Sorry currently histograms are support for only numeric data."