Repository 'plotly_parallel_coordinates_plot'
hg clone https://toolshed.g2.bx.psu.edu/repos/bgruening/plotly_parallel_coordinates_plot

Changeset 0:7b2455348edf (2018-09-23)
Next changeset 1:7b21a9b5922f (2018-10-10)
Commit message:
planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/plotly_parallel_coordinates_plot commit 93fcfe0fa6a64246d13e0fb7e35a357985b02465
added:
paracords_plot.py
paracords_plot.xml
test-data/parcoords01.tabular
test-data/parcoords02.tabular
test-data/parcoords_plot01.html
test-data/parcoords_plot02.html
b
diff -r 000000000000 -r 7b2455348edf paracords_plot.py
--- /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
b
diff -r 000000000000 -r 7b2455348edf paracords_plot.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/paracords_plot.xml Sun Sep 23 07:52:27 2018 -0400
[
@@ -0,0 +1,50 @@
+<tool id="plotly_parallel_coordinates_plot" name="Parallel Coordinates Plot" version="0.1">
+    <description>of tabular data</description>
+    <requirements>
+        <requirement type="package" version="3.6">python</requirement>
+        <requirement type="package" version="0.22.0">pandas</requirement>
+        <requirement type="package" version="3.1.1">plotly</requirement>
+    </requirements>
+    <version_command>echo $version</version_command>
+    <command detect_errors="aggressive"><![CDATA[
+    python '$__tool_directory__/paracords_plot.py'
+        -i '$infile'
+        -d '$col_dimensions'
+        -c '$col_color'
+]]>
+    </command>
+    <inputs>
+        <param name="infile" type="data" format="tabular" label="Select data file :"/>
+        <param name="col_dimensions" multiple="true" type="data_column" data_ref="infile" use_header_names="true" display="checkboxes" label="Select the columns for dimentions:"/>
+        <param name="col_color" type="data_column" data_ref="infile" use_header_names="true" label="Select a column containg the values for coloring:" help="e.g. mean_test_score"/>
+    </inputs>
+
+    <outputs>
+        <data name="output" format="html" from_work_dir="output.html" label="Plot visualization of tabular data on ${on_string}"/>
+    </outputs>
+    <tests>
+        <test>
+            <param name="infile" value="parcoords01.tabular" ftype="tabular"/>
+            <param name="col_dimensions" value="4,5"/>
+            <param name="col_color" value="3"/>
+            <output name="output" file="parcoords_plot01.html" compare="sim_size"/>
+        </test>
+        <test>
+            <param name="infile" value="parcoords02.tabular" ftype="tabular"/>
+            <param name="col_dimensions" value="4,5"/>
+            <param name="col_color" value="3"/>
+            <output name="output" file="parcoords_plot02.html" compare="sim_size"/>
+        </test>
+    </tests>
+    <help><![CDATA[
+**What it does**
+
+
+Produce a `parallel coordinates plot <https://plot.ly/python/parallel-coordinates-plot/>`_ from a tabular file.
+Multiple columns are chosen for dimensions and a single column for coloring. The plot is buried in a html file which
+provides rich interactive features. Image can be saved in various format, such as 'png', 'svg', 'jpeg' and so on.
+
+
+    ]]>
+    </help>
+</tool>
b
diff -r 000000000000 -r 7b2455348edf test-data/parcoords01.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/parcoords01.tabular Sun Sep 23 07:52:27 2018 -0400
b
@@ -0,0 +1,21 @@
+mean_fit_time mean_score_time mean_test_score param_estimator__C param_preprocessing_2__k params rank_test_score split0_test_score split1_test_score split2_test_score std_fit_time std_score_time std_test_score
+0.0008893807729085287 0.0 0.0 1 -1 {u'estimator__C': 1, u'preprocessing_2__k': -1} 17 0.0 0.0 0.0 0.0002001698111627413 0.0 0.0
+0.005897998809814453 0.0006273587544759115 0.7104173862063515 1 3 {u'estimator__C': 1, u'preprocessing_2__k': 3} 13 0.7343996871246798 0.7417527475529206 0.655099723941454 0.0011778246691045516 0.000130497581592697 0.0392305127271727
+0.0043866634368896484 0.0007084210713704427 0.7727810607699421 1 5 {u'estimator__C': 1, u'preprocessing_2__k': 5} 9 0.771515656506971 0.7527052831977578 0.7941222426050976 0.0002401647992627138 0.00024091292632273708 0.01693206165038913
+0.0042876402537028 0.000507354736328125 0.7884200773575789 1 7 {u'estimator__C': 1, u'preprocessing_2__k': 7} 3 0.8337293212274764 0.7482926039856558 0.7832383068596044 0.0002709806131418131 2.436617660189741e-05 0.03507131992939495
+0.004957675933837891 0.0005903244018554688 0.7938837807353147 1 9 {u'estimator__C': 1, u'preprocessing_2__k': 9} 1 0.8426657572705988 0.7542580823607264 0.784727502574619 0.00020288510531872486 2.4974464706042437e-05 0.03666839982018526
+0.0009076595306396484 0.0 0.0 10 -1 {u'estimator__C': 10, u'preprocessing_2__k': -1} 17 0.0 0.0 0.0 8.050432012007906e-05 0.0 0.0
+0.008490721384684244 0.0007415612538655599 0.6964967631489266 10 3 {u'estimator__C': 10, u'preprocessing_2__k': 3} 14 0.7446910527620116 0.6904780454148434 0.6543211912699249 0.001563277277825898 0.0001715582888325998 0.03713800110306298
+0.005631049474080403 0.000587622324625651 0.7548120191889218 10 5 {u'estimator__C': 10, u'preprocessing_2__k': 5} 10 0.7716860817215373 0.6864563697215776 0.8062936061236508 0.0003878558746535774 0.0001247907126998644 0.05035733178586511
+0.004897356033325195 0.0005120436350504557 0.7816262883430569 10 7 {u'estimator__C': 10, u'preprocessing_2__k': 7} 6 0.8502810525482809 0.695034968349346 0.7995628441315439 0.00010891963452719922 4.032274655021451e-05 0.06463552526766699
+0.006504058837890625 0.0006016095479329427 0.7892707238057951 10 9 {u'estimator__C': 10, u'preprocessing_2__k': 9} 2 0.8566443610793398 0.7030451244270151 0.8081226859110302 0.000614871577463233 4.3557942685511835e-05 0.06410787123516704
+0.0016646385192871094 0.0 0.0 100 -1 {u'estimator__C': 100, u'preprocessing_2__k': -1} 17 0.0 0.0 0.0 0.0007425448564300234 0.0 0.0
+0.01219940185546875 0.0010093053181966145 0.6936822719445683 100 3 {u'estimator__C': 100, u'preprocessing_2__k': 3} 15 0.7477066644894652 0.6812918848407985 0.6520482665034413 0.005464220817015395 0.00042272585996138215 0.04002310620753206
+0.011892954508463541 0.0010009606679280598 0.751406681938562 100 5 {u'estimator__C': 100, u'preprocessing_2__k': 5} 12 0.768624772882289 0.6797852691816515 0.8058100037517455 0.0007243971607516297 0.00022965706673197417 0.052870315695895634
+0.015247027079264322 0.001065651575724284 0.780353600621928 100 7 {u'estimator__C': 100, u'preprocessing_2__k': 7} 7 0.8501332206882686 0.6869532193186081 0.8039743618589076 0.0016621871966479448 0.00041067567761326383 0.0686798538282826
+0.024774789810180664 0.000926971435546875 0.7862118205161561 100 9 {u'estimator__C': 100, u'preprocessing_2__k': 9} 4 0.8575095848829983 0.693096967262038 0.8080289094034317 0.007803944173115239 0.00019574615459401132 0.06887121427650549
+0.0009613037109375 0.0 0.0 1000 -1 {u'estimator__C': 1000, u'preprocessing_2__k': -1} 17 0.0 0.0 0.0 0.0002434119417931474 0.0 0.0
+0.025811036427815754 0.0009682973225911459 0.6926668993618743 1000 3 {u'estimator__C': 1000, u'preprocessing_2__k': 3} 16 0.7494954690157997 0.677124152164965 0.6513810769048582 0.006503047963414654 0.0002558118647454582 0.041535456561393944
+0.08626842498779297 0.0014065901438395183 0.7514165183827944 1000 5 {u'estimator__C': 1000, u'preprocessing_2__k': 5} 11 0.7684665422059135 0.6797430247352857 0.806039988207184 0.035840170189150804 0.00041956478276977655 0.052951287235421717
+0.21045462290445963 0.0009483496348063151 0.7800159337722933 1000 7 {u'estimator__C': 1000, u'preprocessing_2__k': 7} 8 0.8495071574714655 0.6864874567307644 0.8040531871146499 0.17032759330924754 0.0004962102711314027 0.06868865927055896
+0.18308266003926596 0.0009226799011230469 0.7854772046965829 1000 9 {u'estimator__C': 1000, u'preprocessing_2__k': 9} 5 0.8569025232106273 0.6903587533500763 0.8091703375290451 0.12143508018264616 0.00022723913124792145 0.07002490141563245
b
diff -r 000000000000 -r 7b2455348edf test-data/parcoords02.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/parcoords02.tabular Sun Sep 23 07:52:27 2018 -0400
b
@@ -0,0 +1,3 @@
+mean_fit_time mean_score_time mean_test_score param_estimator__dual param_estimator__penalty params rank_test_score split0_test_score split1_test_score split2_test_score std_fit_time std_score_time std_test_score
+0.6255233287811279 0.0008620421091715494 0.968186638388123 False l1 {u'estimator__dual': False, u'estimator__penalty': 'l1'} 2 0.9697933227344993 0.9697933227344993 0.964968152866242 0.011841861534965003 0.00024772262760403203 0.0022740031457860075
+0.05705531438191732 0.0006122589111328125 0.9684517497348887 False l2 {u'estimator__dual': False, u'estimator__penalty': 'l2'} 1 0.9697933227344993 0.9705882352941176 0.964968152866242 0.008102407793155115 2.7493704443217997e-05 0.00248262907456837
b
diff -r 000000000000 -r 7b2455348edf test-data/parcoords_plot01.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/parcoords_plot01.html Sun Sep 23 07:52:27 2018 -0400
[
b'@@ -0,0 +1,7 @@\n+<html><head><meta charset="utf-8" /></head><body><script type="text/javascript">/**\n+* plotly.js v1.39.4\n+* Copyright 2012-2018, Plotly, Inc.\n+* All rights reserved.\n+* Licensed under the MIT license\n+*/\n+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Plotly=t()}}(function(){return function(){return function t(e,r,n){function i(o,s){if(!r[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(a)return a(o,!0);var c=new Error("Cannot find module \'"+o+"\'");throw c.code="MODULE_NOT_FOUND",c}var u=r[o]={exports:{}};e[o][0].call(u.exports,function(t){var r=e[o][1][t];return i(r||t)},u,u.exports,t,e,r,n)}return r[o].exports}for(var a="function"==typeof require&&require,o=0;o<n.length;o++)i(n[o]);return i}}()({1:[function(t,e,r){"use strict";var n=t("../src/lib"),i={"X,X div":"direction:ltr;font-family:\'Open Sans\', verdana, arial, sans-serif;margin:0;padding:0;","X input,X button":"font-family:\'Open Sans\', verdana, arial, sans-serif;","X input:focus,X button:focus":"outline:none;","X a":"text-decoration:none;","X a:hover":"text-decoration:none;","X .crisp":"shape-rendering:crispEdges;","X .user-select-none":"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;","X svg":"overflow:hidden;","X svg a":"fill:#447adb;","X svg a:hover":"fill:#3c6dc5;","X .main-svg":"position:absolute;top:0;left:0;pointer-events:none;","X .main-svg .draglayer":"pointer-events:all;","X .cursor-default":"cursor:default;","X .cursor-pointer":"cursor:pointer;","X .cursor-crosshair":"cursor:crosshair;","X .cursor-move":"cursor:move;","X .cursor-col-resize":"cursor:col-resize;","X .cursor-row-resize":"cursor:row-resize;","X .cursor-ns-resize":"cursor:ns-resize;","X .cursor-ew-resize":"cursor:ew-resize;","X .cursor-sw-resize":"cursor:sw-resize;","X .cursor-s-resize":"cursor:s-resize;","X .cursor-se-resize":"cursor:se-resize;","X .cursor-w-resize":"cursor:w-resize;","X .cursor-e-resize":"cursor:e-resize;","X .cursor-nw-resize":"cursor:nw-resize;","X .cursor-n-resize":"cursor:n-resize;","X .cursor-ne-resize":"cursor:ne-resize;","X .cursor-grab":"cursor:-webkit-grab;cursor:grab;","X .modebar":"position:absolute;top:2px;right:2px;z-index:1001;background:rgba(255,255,255,0.7);","X .modebar--hover":"opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;","X:hover .modebar--hover":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;margin-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-group:first-child":"margin-left:0px;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;cursor:pointer;line-height:normal;box-sizing:border-box;","X .modebar-btn svg":"position:relative;top:2px;","X .modebar-btn path":"fill:rgba(0,31,95,0.3);","X .modebar-btn.active path,X .modebar-btn:hover path":"fill:rgba(0,22,72,0.5);","X .modebar-btn.modebar-btn--logo":"padding:3px 1px;","X .modebar-btn.modebar-btn--logo path":"fill:#447adb !important;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":"content:\'\';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;","X [data-title]:after":"content:attr(data-title);backgro'..b'(!s("enabled"))return o;s("groups"),s("nameformat",i._dataLength>1?"%{group} (%{trace})":"%{group}");var l=t.styles,c=o.styles=[];if(l)for(a=0;a<l.length;a++){var u=c[a]={};n.coerce(l[a],c[a],r.attributes.styles,"target");var h=n.coerce(l[a],c[a],r.attributes.styles,"value");n.isPlainObject(h)?u.value=n.extendDeep({},h):h&&delete u.value}return o},r.transform=function(t,e){var r,n,i,a=[];for(n=0;n<t.length;n++)for(r=s(t[n],e),i=0;i<r.length;i++)a.push(r[i]);return a}},{"../lib":684,"../plot_api/plot_schema":721,"../plots/plots":795,"./helpers":1128}],1128:[function(t,e,r){"use strict";r.pointsAccessorFunction=function(t,e){for(var r,n,i=0;i<t.length&&(r=t[i])!==e;i++)r._indexToPoints&&!1!==r.enabled&&(n=r._indexToPoints);return n?function(t){return n[t]}:function(t){return[t]}}},{}],1129:[function(t,e,r){"use strict";var n=t("../lib"),i=t("../plots/cartesian/axes"),a=t("./helpers").pointsAccessorFunction;r.moduleType="transform",r.name="sort",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},order:{valType:"enumerated",values:["ascending","descending"],dflt:"ascending",editType:"calc"},editType:"calc"},r.supplyDefaults=function(t){var e={};function i(i,a){return n.coerce(t,e,r.attributes,i,a)}return i("enabled")&&(i("target"),i("order")),e},r.calcTransform=function(t,e,r){if(r.enabled){var o=n.getTargetArray(e,r);if(o){var s=r.target,l=o.length;e._length&&(l=Math.min(l,e._length));var c,u,h=e._arrayAttrs,f=function(t,e,r,n){var i,a=new Array(n),o=new Array(n);for(i=0;i<n;i++)a[i]={v:e[i],i:i};for(a.sort(function(t,e){switch(t.order){case"ascending":return function(t,r){return e(t.v)-e(r.v)};case"descending":return function(t,r){return e(r.v)-e(t.v)}}}(t,r)),i=0;i<n;i++)o[i]=a[i].i;return o}(r,o,i.getDataToCoordFunc(t,e,s,o),l),p=a(e.transforms,r),d={};for(c=0;c<h.length;c++){var g=n.nestedProperty(e,h[c]),m=g.get(),v=new Array(l);for(u=0;u<l;u++)v[u]=m[f[u]];g.set(v)}for(u=0;u<l;u++)d[u]=p(f[u]);r._indexToPoints=d,e._length=l}}}},{"../lib":684,"../plots/cartesian/axes":732,"./helpers":1128}]},{},[21])(21)});</script><div id="e012ddf6-b86b-422d-b2c3-4c627150c999" style="height: 100%; width: 100%;" class="plotly-graph-div"></div><script type="text/javascript">window.PLOTLYENV=window.PLOTLYENV || {};window.PLOTLYENV.BASE_URL="https://plot.ly";Plotly.newPlot("e012ddf6-b86b-422d-b2c3-4c627150c999", [{"line": {"color": [0.0, 0.7104173862063515, 0.7727810607699421, 0.7884200773575789, 0.7938837807353147, 0.0, 0.6964967631489266, 0.7548120191889218, 0.7816262883430569, 0.7892707238057951, 0.0, 0.6936822719445683, 0.751406681938562, 0.7803536006219279, 0.7862118205161561, 0.0, 0.6926668993618743, 0.7514165183827944, 0.7800159337722933, 0.7854772046965829], "reversescale": true, "showscale": true, "colorscale": "Jet"}, "type": "parcoords", "dimensions": [{"values": [1.0, 1.0, 1.0, 1.0, 1.0, 10.0, 10.0, 10.0, 10.0, 10.0, 100.0, 100.0, 100.0, 100.0, 100.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0], "tickformat": ",.2r", "label": "param_estimator__C"}, {"values": [-1.0, 3.0, 5.0, 7.0, 9.0, -1.0, 3.0, 5.0, 7.0, 9.0, -1.0, 3.0, 5.0, 7.0, 9.0, -1.0, 3.0, 5.0, 7.0, 9.0], "tickformat": ",.2r", "label": "param_preprocessing_2__k"}, {"values": [0.0, 0.7104173862063515, 0.7727810607699421, 0.7884200773575789, 0.7938837807353147, 0.0, 0.6964967631489266, 0.7548120191889218, 0.7816262883430569, 0.7892707238057951, 0.0, 0.6936822719445683, 0.751406681938562, 0.7803536006219279, 0.7862118205161561, 0.0, 0.6926668993618743, 0.7514165183827944, 0.7800159337722933, 0.7854772046965829], "tickformat": "g", "label": "mean_test_score"}], "uid": "c86204d7-bc85-11e8-89eb-acbc32846fd5"}], {}, {"linkText": "Export to plot.ly", "showLink": true})</script><script type="text/javascript">window.addEventListener("resize", function(){Plotly.Plots.resize(document.getElementById("e012ddf6-b86b-422d-b2c3-4c627150c999"));});</script></body></html>\n\\ No newline at end of file\n'
b
diff -r 000000000000 -r 7b2455348edf test-data/parcoords_plot02.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/parcoords_plot02.html Sun Sep 23 07:52:27 2018 -0400
[
b'@@ -0,0 +1,7 @@\n+<html><head><meta charset="utf-8" /></head><body><script type="text/javascript">/**\n+* plotly.js v1.39.4\n+* Copyright 2012-2018, Plotly, Inc.\n+* All rights reserved.\n+* Licensed under the MIT license\n+*/\n+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Plotly=t()}}(function(){return function(){return function t(e,r,n){function i(o,s){if(!r[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(a)return a(o,!0);var c=new Error("Cannot find module \'"+o+"\'");throw c.code="MODULE_NOT_FOUND",c}var u=r[o]={exports:{}};e[o][0].call(u.exports,function(t){var r=e[o][1][t];return i(r||t)},u,u.exports,t,e,r,n)}return r[o].exports}for(var a="function"==typeof require&&require,o=0;o<n.length;o++)i(n[o]);return i}}()({1:[function(t,e,r){"use strict";var n=t("../src/lib"),i={"X,X div":"direction:ltr;font-family:\'Open Sans\', verdana, arial, sans-serif;margin:0;padding:0;","X input,X button":"font-family:\'Open Sans\', verdana, arial, sans-serif;","X input:focus,X button:focus":"outline:none;","X a":"text-decoration:none;","X a:hover":"text-decoration:none;","X .crisp":"shape-rendering:crispEdges;","X .user-select-none":"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;","X svg":"overflow:hidden;","X svg a":"fill:#447adb;","X svg a:hover":"fill:#3c6dc5;","X .main-svg":"position:absolute;top:0;left:0;pointer-events:none;","X .main-svg .draglayer":"pointer-events:all;","X .cursor-default":"cursor:default;","X .cursor-pointer":"cursor:pointer;","X .cursor-crosshair":"cursor:crosshair;","X .cursor-move":"cursor:move;","X .cursor-col-resize":"cursor:col-resize;","X .cursor-row-resize":"cursor:row-resize;","X .cursor-ns-resize":"cursor:ns-resize;","X .cursor-ew-resize":"cursor:ew-resize;","X .cursor-sw-resize":"cursor:sw-resize;","X .cursor-s-resize":"cursor:s-resize;","X .cursor-se-resize":"cursor:se-resize;","X .cursor-w-resize":"cursor:w-resize;","X .cursor-e-resize":"cursor:e-resize;","X .cursor-nw-resize":"cursor:nw-resize;","X .cursor-n-resize":"cursor:n-resize;","X .cursor-ne-resize":"cursor:ne-resize;","X .cursor-grab":"cursor:-webkit-grab;cursor:grab;","X .modebar":"position:absolute;top:2px;right:2px;z-index:1001;background:rgba(255,255,255,0.7);","X .modebar--hover":"opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;","X:hover .modebar--hover":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;margin-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-group:first-child":"margin-left:0px;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;cursor:pointer;line-height:normal;box-sizing:border-box;","X .modebar-btn svg":"position:relative;top:2px;","X .modebar-btn path":"fill:rgba(0,31,95,0.3);","X .modebar-btn.active path,X .modebar-btn:hover path":"fill:rgba(0,22,72,0.5);","X .modebar-btn.modebar-btn--logo":"padding:3px 1px;","X .modebar-btn.modebar-btn--logo path":"fill:#447adb !important;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":"content:\'\';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;","X [data-title]:after":"content:attr(data-title);backgro'..b']]=b(s),E[x[s]]++}for(r=0;r<_.length;r++)f=_[r],p=w[r],a.clearExpandedTraceDefaultColors(p),p=n.extendDeepNoArrays(p,T[f]||{});return w}function l(t,e){return function(r,i,a){n.keyedContainer(r,"transforms["+e+"].styles","target","value."+i).set(String(t),a)}}r.moduleType="transform",r.name="groupby",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"data_array",dflt:[],editType:"calc"},nameformat:{valType:"string",editType:"calc"},styles:{_isLinkedToArray:"style",target:{valType:"string",editType:"calc"},value:{valType:"any",dflt:{},editType:"calc",_compareAsJSON:!0},editType:"calc"},editType:"calc"},r.supplyDefaults=function(t,e,i){var a,o={};function s(e,i){return n.coerce(t,o,r.attributes,e,i)}if(!s("enabled"))return o;s("groups"),s("nameformat",i._dataLength>1?"%{group} (%{trace})":"%{group}");var l=t.styles,c=o.styles=[];if(l)for(a=0;a<l.length;a++){var u=c[a]={};n.coerce(l[a],c[a],r.attributes.styles,"target");var h=n.coerce(l[a],c[a],r.attributes.styles,"value");n.isPlainObject(h)?u.value=n.extendDeep({},h):h&&delete u.value}return o},r.transform=function(t,e){var r,n,i,a=[];for(n=0;n<t.length;n++)for(r=s(t[n],e),i=0;i<r.length;i++)a.push(r[i]);return a}},{"../lib":684,"../plot_api/plot_schema":721,"../plots/plots":795,"./helpers":1128}],1128:[function(t,e,r){"use strict";r.pointsAccessorFunction=function(t,e){for(var r,n,i=0;i<t.length&&(r=t[i])!==e;i++)r._indexToPoints&&!1!==r.enabled&&(n=r._indexToPoints);return n?function(t){return n[t]}:function(t){return[t]}}},{}],1129:[function(t,e,r){"use strict";var n=t("../lib"),i=t("../plots/cartesian/axes"),a=t("./helpers").pointsAccessorFunction;r.moduleType="transform",r.name="sort",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},order:{valType:"enumerated",values:["ascending","descending"],dflt:"ascending",editType:"calc"},editType:"calc"},r.supplyDefaults=function(t){var e={};function i(i,a){return n.coerce(t,e,r.attributes,i,a)}return i("enabled")&&(i("target"),i("order")),e},r.calcTransform=function(t,e,r){if(r.enabled){var o=n.getTargetArray(e,r);if(o){var s=r.target,l=o.length;e._length&&(l=Math.min(l,e._length));var c,u,h=e._arrayAttrs,f=function(t,e,r,n){var i,a=new Array(n),o=new Array(n);for(i=0;i<n;i++)a[i]={v:e[i],i:i};for(a.sort(function(t,e){switch(t.order){case"ascending":return function(t,r){return e(t.v)-e(r.v)};case"descending":return function(t,r){return e(r.v)-e(t.v)}}}(t,r)),i=0;i<n;i++)o[i]=a[i].i;return o}(r,o,i.getDataToCoordFunc(t,e,s,o),l),p=a(e.transforms,r),d={};for(c=0;c<h.length;c++){var g=n.nestedProperty(e,h[c]),m=g.get(),v=new Array(l);for(u=0;u<l;u++)v[u]=m[f[u]];g.set(v)}for(u=0;u<l;u++)d[u]=p(f[u]);r._indexToPoints=d,e._length=l}}}},{"../lib":684,"../plots/cartesian/axes":732,"./helpers":1128}]},{},[21])(21)});</script><div id="054f3c70-fce3-4a63-891e-a1100cb9c47d" style="height: 100%; width: 100%;" class="plotly-graph-div"></div><script type="text/javascript">window.PLOTLYENV=window.PLOTLYENV || {};window.PLOTLYENV.BASE_URL="https://plot.ly";Plotly.newPlot("054f3c70-fce3-4a63-891e-a1100cb9c47d", [{"line": {"color": [0.9681866383881229, 0.9684517497348888], "reversescale": true, "showscale": true, "colorscale": "Jet"}, "type": "parcoords", "dimensions": [{"range": [0, 0], "tickvals": [0], "values": [0, 0], "ticktext": ["False"], "label": "param_estimator__dual"}, {"range": [0, 1], "tickvals": [0, 1], "values": [1, 0], "ticktext": ["l2", "l1"], "label": "param_estimator__penalty"}, {"values": [0.9681866383881229, 0.9684517497348888], "tickformat": "g", "label": "mean_test_score"}], "uid": "9cdf6e23-bc86-11e8-b043-acbc32846fd5"}], {}, {"linkText": "Export to plot.ly", "showLink": true})</script><script type="text/javascript">window.addEventListener("resize", function(){Plotly.Plots.resize(document.getElementById("054f3c70-fce3-4a63-891e-a1100cb9c47d"));});</script></body></html>\n\\ No newline at end of file\n'