comparison paracords_plot.py @ 0:7b2455348edf draft

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/plotly_parallel_coordinates_plot commit 93fcfe0fa6a64246d13e0fb7e35a357985b02465
author bgruening
date Sun, 23 Sep 2018 07:52:27 -0400
parents
children 7b21a9b5922f
comparison
equal deleted inserted replaced
-1:000000000000 0:7b2455348edf
1 import sys
2 import argparse
3 import plotly
4 import plotly.graph_objs as go
5 import pandas as pd
6
7 def main(infile, col_dimensions, col_color):
8 """
9 Produce an interactive paracords plotting html
10 Args:
11 infile: str, tabular file
12 col_dimensions: str, comma separated index numbers. For example: "3,4,5"
13 col_color: str, index number
14 """
15 df = pd.read_csv(infile, sep='\t', parse_dates=True)
16
17 dimensions = []
18 col_dimensions = [int(x)-1 for x in col_dimensions.split(',')]
19 for col in col_dimensions:
20 values = df[df.columns[col]]
21 if all(type(e) is int for e in values ):
22 dimensions.append(
23 dict( values = values,
24 tickformat = ",.2r",
25 label = df.columns[col])
26 )
27 elif all(type(e) is float for e in values ):
28 dimensions.append(
29 dict( values = values,
30 tickformat = "g",
31 label = df.columns[col])
32 )
33 else:
34 unique_values = list(set(values))
35 dimensions.append(
36 dict( range = [0, len(unique_values)-1],
37 tickvals = list(range(len(unique_values))),
38 ticktext = [str(e) for e in unique_values],
39 values = list(map(lambda e: unique_values.index(e), values )),
40 label = df.columns[col])
41 )
42
43 col_color = int(col_color) - 1
44 colors = df[df.columns[col_color]]
45 if all(type(e) is int for e in colors ):
46 tickformat = ",.2r"
47 elif all(type(e) is float for e in colors ):
48 tickformat = "g"
49 else:
50 sys.exit("Error: the column for coloring must contain all numerical values!")
51
52 dimensions.append(
53 dict(
54 values = colors,
55 tickformat = tickformat,
56 label = df.columns[col_color]
57 )
58 )
59
60 line = dict(
61 color = colors,
62 colorscale = 'Jet',
63 showscale = True,
64 reversescale = True
65 )
66
67 data = [
68 go.Parcoords(
69 line = line,
70 dimensions = dimensions
71 )
72 ]
73
74 plotly.offline.plot(data, filename = "output.html", auto_open=False)
75
76 if __name__ == "__main__":
77 aparser = argparse.ArgumentParser()
78 aparser.add_argument( "-i", "--input", dest="infile", required=True)
79 aparser.add_argument( "-d", "--col_dimensions", dest="col_dimensions")
80 aparser.add_argument( "-c", "--col_color", dest="col_color")
81 args = aparser.parse_args()
82
83 main(args.infile, args.col_dimensions, args.col_color)