Mercurial > repos > bgruening > plotly_parallel_coordinates_plot
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paracords_plot.py Sun Sep 23 07:52:27 2018 -0400 @@ -0,0 +1,83 @@ +import sys +import argparse +import plotly +import plotly.graph_objs as go +import pandas as pd + +def main(infile, col_dimensions, col_color): + """ + Produce an interactive paracords plotting html + Args: + infile: str, tabular file + col_dimensions: str, comma separated index numbers. For example: "3,4,5" + col_color: str, index number + """ + df = pd.read_csv(infile, sep='\t', parse_dates=True) + + dimensions = [] + col_dimensions = [int(x)-1 for x in col_dimensions.split(',')] + for col in col_dimensions: + values = df[df.columns[col]] + if all(type(e) is int for e in values ): + dimensions.append( + dict( values = values, + tickformat = ",.2r", + label = df.columns[col]) + ) + elif all(type(e) is float for e in values ): + dimensions.append( + dict( values = values, + tickformat = "g", + label = df.columns[col]) + ) + else: + unique_values = list(set(values)) + dimensions.append( + dict( range = [0, len(unique_values)-1], + tickvals = list(range(len(unique_values))), + ticktext = [str(e) for e in unique_values], + values = list(map(lambda e: unique_values.index(e), values )), + label = df.columns[col]) + ) + + col_color = int(col_color) - 1 + colors = df[df.columns[col_color]] + if all(type(e) is int for e in colors ): + tickformat = ",.2r" + elif all(type(e) is float for e in colors ): + tickformat = "g" + else: + sys.exit("Error: the column for coloring must contain all numerical values!") + + dimensions.append( + dict( + values = colors, + tickformat = tickformat, + label = df.columns[col_color] + ) + ) + + line = dict( + color = colors, + colorscale = 'Jet', + showscale = True, + reversescale = True + ) + + data = [ + go.Parcoords( + line = line, + dimensions = dimensions + ) + ] + + plotly.offline.plot(data, filename = "output.html", auto_open=False) + +if __name__ == "__main__": + aparser = argparse.ArgumentParser() + aparser.add_argument( "-i", "--input", dest="infile", required=True) + aparser.add_argument( "-d", "--col_dimensions", dest="col_dimensions") + aparser.add_argument( "-c", "--col_color", dest="col_color") + args = aparser.parse_args() + + main(args.infile, args.col_dimensions, args.col_color) \ No newline at end of file