Mercurial > repos > fubar > plotly_tabular_tool
diff plotly_tabular_tool/plotlytabular.xml @ 3:51a0c2e0fbdf draft
Updated with latest ToolFactory with change_format for outputs so can make a png or html and it has an informative label since on $foo can be used.
author | fubar |
---|---|
date | Fri, 04 Aug 2023 02:00:28 +0000 |
parents | 08cc7a481af8 |
children | e2d2b080bae3 |
line wrap: on
line diff
--- a/plotly_tabular_tool/plotlytabular.xml Fri Jul 28 06:01:53 2023 +0000 +++ b/plotly_tabular_tool/plotlytabular.xml Fri Aug 04 02:00:28 2023 +0000 @@ -1,10 +1,11 @@ <tool name="plotlytabular" id="plotlytabular" version="3.0"> <!--Source in git at: https://github.com/fubar2/galaxy_tf_overlay--> - <!--Created by toolfactory@galaxy.org at 28/07/2023 15:52:28 using the Galaxy Tool Factory.--> - <description>Plotly plot generator for any small-ish Galaxy tabular data.</description> + <!--Created by toolfactory@galaxy.org at 04/08/2023 10:38:13 using the Galaxy Tool Factory.--> + <description>Plotly plot generator for Galaxy tabular data.</description> <requirements> <requirement version="1.5.3" type="package">pandas</requirement> <requirement version="5.9.0" type="package">plotly</requirement> + <requirement version="0.2.1" type="package">python-kaleido</requirement> </requirements> <stdio> <exit_code range="1:" level="fatal"/> @@ -27,11 +28,14 @@ --title "$title" --header -"$header"]]></command> +"$header" +--image_type +"$outputimagetype"]]></command> <configfiles> <configfile name="runme"><![CDATA[#raw import argparse +import shutil import sys import math import plotly.express as px @@ -48,6 +52,7 @@ a('--colourcol',default='') a('--hovercol',default='') a('--title',default='Default plot title') +a('--image_type',default='short_html') args = parser.parse_args() isColour = False isHover = False @@ -91,7 +96,20 @@ sl = str(scatter['legendgroup']) if len(sl) > MAXLEN: scatter['legendgroup'] = sl[:MAXLEN] -fig.write_html(args.htmlout) +if args.image_type == "short_html": + fig.write_html(args.htmlout, full_html=False, include_plotlyjs='cdn') +elif args.image_type == "long_html": + fig.write_html(args.htmlout) +elif args.image_type == "small_png": + ht = 768 + wdth = 1024 + fig.write_image('plotly.png', height=ht, width=wdth) + shutil.copyfile('plotly.png', args.htmlout) +else: + ht = 1200 + wdth = 1920 + fig.write_image('plotly.png', height=ht, width=wdth) + shutil.copyfile('plotly.png', args.htmlout) #end raw]]></configfile> @@ -101,12 +119,23 @@ <param name="xcol" type="text" value="sepal_length" label="x axis for plot" help="Use a column name from the header if the file has one, or use one from the list supplied below, or use col1....colN otherwise to select the correct column"/> <param name="ycol" type="text" value="sepal_width" label="y axis for plot" help="Use a column name from the header if the file has one, or use one from the list supplied below, or use col1....colN otherwise to select the correct column"/> <param name="colourcol" type="text" value="petal_width" label="column containing a groupable variable for colour. Default none." help="Adds a legend so choose wisely "/> - <param name="hovercol" type="text" value="species_id" label="columname for hover string" help="Use a column name from the header if the file has one, or use one from the list supplied below, or use col1....colN otherwise to select the correct column"/> + <param name="hovercol" type="text" value="species" label="columname for hover string" help="Use a column name from the header if the file has one, or use one from the list supplied below, or use col1....colN otherwise to select the correct column"/> <param name="title" type="text" value="Iris data" label="Title for the plot" help="Special characters will probably be escaped so do not use them"/> - <param name="header" type="text" value="" label="Use this comma delimited list of column header names for this tabular file. Default is None when col1...coln will be used" help="Default for Galaxy blast outputs with 25 columns. The column names supplied for xcol, ycol, hover and colour MUST match either the supplied list, or if none, col1...coln."/> + <param name="header" type="text" value="" label="Use this comma delimited list of column header names for this tabular file. Default is None when col1...coln will be used" help="The column names supplied for xcol, ycol, hover and colour MUST match either this supplied list, or if none, col1...coln."/> + <param name="outputimagetype" type="select" label="Select the output format for this plot image" help="Small and large png are not interactive but best for many (__gt__10k) points. Stand-alone HTML includes 3MB of javascript. Short form HTML gets it the usual way so can be cut and paste into documents."> + <option value="short_html">Short HTML interactive format</option> + <option value="long_html">Long HTML for stand-alone viewing where network access to libraries is not available.</option> + <option value="large_png">Large (1920x1200) png image - not interactive so hover column ignored</option> + <option value="small_png">small (1024x768) png image - not interactive so hover column ignored</option> + </param> </inputs> <outputs> - <data name="htmlout" format="html" label="htmlout" hidden="false"/> + <data name="htmlout" format="html" label="Plotlytabular $title on $input_tab.element_identifier" hidden="false"> + <change_format> + <when input="outputimagetype" format="png" value="small_png"/> + <when input="outputimagetype" format="png" value="large_png"/> + </change_format> + </data> </outputs> <tests> <test> @@ -115,26 +144,37 @@ <param name="xcol" value="sepal_length"/> <param name="ycol" value="sepal_width"/> <param name="colourcol" value="petal_width"/> - <param name="hovercol" value="species_id"/> + <param name="hovercol" value="species"/> <param name="title" value="Iris data"/> <param name="header" value=""/> + <param name="outputimagetype" value="short_html"/> </test> </tests> <help><![CDATA[ This is a generic version of the plotlyblast specific blastn Galaxy search output file plotter. +PNG images are not interactive but best for very large numbers of data points. Hover column will be ignored. +HTML interactive plots are best for a few thousand data points at most because -.. class:: warningmark +the hover information becomes uncontrollable with very dense points. -NOTE: Long strings in x and y tickmarks WILL BE TRUNCATED if they are too long - ".." is added to indicate truncation - otherwise some plots are squished. +Using the shorter format HTML relies on internet access when viewed, and saves 3MB of javascript being embedded. + +The long format is useful if potentially viewed offline. .. class:: warningmark -NOTE: Columns with very small scientific notation floats will need to be pre-scaled in a way that doesn't confuse plotly.express with their values. +Long strings in x and y tickmarks WILL BE TRUNCATED if they are too long - ".." is added to indicate truncation - otherwise some plots are squished. + + + +.. class:: warningmark + +Columns with very small scientific notation floats will need to be pre-scaled in a way that doesn't confuse plotly.express with their values. @@ -142,15 +182,17 @@ -The main reason to run this tool is to have an interactive hover text specified so it appears when hovering over each data point to supply useful information. +This tool can plot an interactive scatter plot with a hover text column specified, that appears when hovering over each data point, to supply useful additional information. + +It is only useful with a relatively small number of points when they can be distinguished. If many thousands, the density makes them relatively useless so use png output and + +forget the hover text. -Assumes you want a hover display for an interactive plot to be informative - +Column names are auto-generated as col1,...coln *unless* a comma separated list of column names is supplied as the header parameter, *or* pandas can - -Column names are auto-generated as col1,...coln unless a comma separated list of column names is supplied as the header parameter. +find the values supplied as parameters by the user in the first row of data. This sounds more complex than it is. @@ -178,6 +220,7 @@ Script:: import argparse + import shutil import sys import math import plotly.express as px @@ -194,6 +237,7 @@ a('--colourcol',default='') a('--hovercol',default='') a('--title',default='Default plot title') + a('--image_type',default='short_html') args = parser.parse_args() isColour = False isHover = False @@ -237,7 +281,20 @@ sl = str(scatter['legendgroup']) if len(sl) > MAXLEN: scatter['legendgroup'] = sl[:MAXLEN] - fig.write_html(args.htmlout) + if args.image_type == "short_html": + fig.write_html(args.htmlout, full_html=False, include_plotlyjs='cdn') + elif args.image_type == "long_html": + fig.write_html(args.htmlout) + elif args.image_type == "small_png": + ht = 768 + wdth = 1024 + fig.write_image('plotly.png', height=ht, width=wdth) + shutil.copyfile('plotly.png', args.htmlout) + else: + ht = 1200 + wdth = 1920 + fig.write_image('plotly.png', height=ht, width=wdth) + shutil.copyfile('plotly.png', args.htmlout) ]]></help> <citations>