Mercurial > repos > bgruening > plotly_parallel_coordinates_plot
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) |
