Repository 'plotly_tabular_tool'
hg clone https://toolshed.g2.bx.psu.edu/repos/fubar/plotly_tabular_tool

Changeset 4:e2d2b080bae3 (2023-08-07)
Previous changeset 3:51a0c2e0fbdf (2023-08-04)
Commit message:
Now refuses to create html for >5k rows. 10k rows will always crash firefox so seems wise to be restrictive. Advises to redo job and select png output...
modified:
plotly_tabular_tool/plotlytabular.xml
plotly_tabular_tool/test-data/htmlout_sample
removed:
plotly_tabular_tool/iris.xls
plotly_tabular_tool/iris_interactive_10k.html
plotly_tabular_tool/plotly_tabular_iris_sample.png
plotly_tabular_tool/plotlytabular_toolform_sample.png
plotly_tabular_tool/test_run.html
b
diff -r 51a0c2e0fbdf -r e2d2b080bae3 plotly_tabular_tool/iris.xls
--- a/plotly_tabular_tool/iris.xls Fri Aug 04 02:00:28 2023 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,151 +0,0 @@
- sepal_length sepal_width petal_length petal_width species species_id
-0 5.1 3.5 1.4 0.2 setosa 1
-1 4.9 3.0 1.4 0.2 setosa 1
-2 4.7 3.2 1.3 0.2 setosa 1
-3 4.6 3.1 1.5 0.2 setosa 1
-4 5.0 3.6 1.4 0.2 setosa 1
-5 5.4 3.9 1.7 0.4 setosa 1
-6 4.6 3.4 1.4 0.3 setosa 1
-7 5.0 3.4 1.5 0.2 setosa 1
-8 4.4 2.9 1.4 0.2 setosa 1
-9 4.9 3.1 1.5 0.1 setosa 1
-10 5.4 3.7 1.5 0.2 setosa 1
-11 4.8 3.4 1.6 0.2 setosa 1
-12 4.8 3.0 1.4 0.1 setosa 1
-13 4.3 3.0 1.1 0.1 setosa 1
-14 5.8 4.0 1.2 0.2 setosa 1
-15 5.7 4.4 1.5 0.4 setosa 1
-16 5.4 3.9 1.3 0.4 setosa 1
-17 5.1 3.5 1.4 0.3 setosa 1
-18 5.7 3.8 1.7 0.3 setosa 1
-19 5.1 3.8 1.5 0.3 setosa 1
-20 5.4 3.4 1.7 0.2 setosa 1
-21 5.1 3.7 1.5 0.4 setosa 1
-22 4.6 3.6 1.0 0.2 setosa 1
-23 5.1 3.3 1.7 0.5 setosa 1
-24 4.8 3.4 1.9 0.2 setosa 1
-25 5.0 3.0 1.6 0.2 setosa 1
-26 5.0 3.4 1.6 0.4 setosa 1
-27 5.2 3.5 1.5 0.2 setosa 1
-28 5.2 3.4 1.4 0.2 setosa 1
-29 4.7 3.2 1.6 0.2 setosa 1
-30 4.8 3.1 1.6 0.2 setosa 1
-31 5.4 3.4 1.5 0.4 setosa 1
-32 5.2 4.1 1.5 0.1 setosa 1
-33 5.5 4.2 1.4 0.2 setosa 1
-34 4.9 3.1 1.5 0.1 setosa 1
-35 5.0 3.2 1.2 0.2 setosa 1
-36 5.5 3.5 1.3 0.2 setosa 1
-37 4.9 3.1 1.5 0.1 setosa 1
-38 4.4 3.0 1.3 0.2 setosa 1
-39 5.1 3.4 1.5 0.2 setosa 1
-40 5.0 3.5 1.3 0.3 setosa 1
-41 4.5 2.3 1.3 0.3 setosa 1
-42 4.4 3.2 1.3 0.2 setosa 1
-43 5.0 3.5 1.6 0.6 setosa 1
-44 5.1 3.8 1.9 0.4 setosa 1
-45 4.8 3.0 1.4 0.3 setosa 1
-46 5.1 3.8 1.6 0.2 setosa 1
-47 4.6 3.2 1.4 0.2 setosa 1
-48 5.3 3.7 1.5 0.2 setosa 1
-49 5.0 3.3 1.4 0.2 setosa 1
-50 7.0 3.2 4.7 1.4 versicolor 2
-51 6.4 3.2 4.5 1.5 versicolor 2
-52 6.9 3.1 4.9 1.5 versicolor 2
-53 5.5 2.3 4.0 1.3 versicolor 2
-54 6.5 2.8 4.6 1.5 versicolor 2
-55 5.7 2.8 4.5 1.3 versicolor 2
-56 6.3 3.3 4.7 1.6 versicolor 2
-57 4.9 2.4 3.3 1.0 versicolor 2
-58 6.6 2.9 4.6 1.3 versicolor 2
-59 5.2 2.7 3.9 1.4 versicolor 2
-60 5.0 2.0 3.5 1.0 versicolor 2
-61 5.9 3.0 4.2 1.5 versicolor 2
-62 6.0 2.2 4.0 1.0 versicolor 2
-63 6.1 2.9 4.7 1.4 versicolor 2
-64 5.6 2.9 3.6 1.3 versicolor 2
-65 6.7 3.1 4.4 1.4 versicolor 2
-66 5.6 3.0 4.5 1.5 versicolor 2
-67 5.8 2.7 4.1 1.0 versicolor 2
-68 6.2 2.2 4.5 1.5 versicolor 2
-69 5.6 2.5 3.9 1.1 versicolor 2
-70 5.9 3.2 4.8 1.8 versicolor 2
-71 6.1 2.8 4.0 1.3 versicolor 2
-72 6.3 2.5 4.9 1.5 versicolor 2
-73 6.1 2.8 4.7 1.2 versicolor 2
-74 6.4 2.9 4.3 1.3 versicolor 2
-75 6.6 3.0 4.4 1.4 versicolor 2
-76 6.8 2.8 4.8 1.4 versicolor 2
-77 6.7 3.0 5.0 1.7 versicolor 2
-78 6.0 2.9 4.5 1.5 versicolor 2
-79 5.7 2.6 3.5 1.0 versicolor 2
-80 5.5 2.4 3.8 1.1 versicolor 2
-81 5.5 2.4 3.7 1.0 versicolor 2
-82 5.8 2.7 3.9 1.2 versicolor 2
-83 6.0 2.7 5.1 1.6 versicolor 2
-84 5.4 3.0 4.5 1.5 versicolor 2
-85 6.0 3.4 4.5 1.6 versicolor 2
-86 6.7 3.1 4.7 1.5 versicolor 2
-87 6.3 2.3 4.4 1.3 versicolor 2
-88 5.6 3.0 4.1 1.3 versicolor 2
-89 5.5 2.5 4.0 1.3 versicolor 2
-90 5.5 2.6 4.4 1.2 versicolor 2
-91 6.1 3.0 4.6 1.4 versicolor 2
-92 5.8 2.6 4.0 1.2 versicolor 2
-93 5.0 2.3 3.3 1.0 versicolor 2
-94 5.6 2.7 4.2 1.3 versicolor 2
-95 5.7 3.0 4.2 1.2 versicolor 2
-96 5.7 2.9 4.2 1.3 versicolor 2
-97 6.2 2.9 4.3 1.3 versicolor 2
-98 5.1 2.5 3.0 1.1 versicolor 2
-99 5.7 2.8 4.1 1.3 versicolor 2
-100 6.3 3.3 6.0 2.5 virginica 3
-101 5.8 2.7 5.1 1.9 virginica 3
-102 7.1 3.0 5.9 2.1 virginica 3
-103 6.3 2.9 5.6 1.8 virginica 3
-104 6.5 3.0 5.8 2.2 virginica 3
-105 7.6 3.0 6.6 2.1 virginica 3
-106 4.9 2.5 4.5 1.7 virginica 3
-107 7.3 2.9 6.3 1.8 virginica 3
-108 6.7 2.5 5.8 1.8 virginica 3
-109 7.2 3.6 6.1 2.5 virginica 3
-110 6.5 3.2 5.1 2.0 virginica 3
-111 6.4 2.7 5.3 1.9 virginica 3
-112 6.8 3.0 5.5 2.1 virginica 3
-113 5.7 2.5 5.0 2.0 virginica 3
-114 5.8 2.8 5.1 2.4 virginica 3
-115 6.4 3.2 5.3 2.3 virginica 3
-116 6.5 3.0 5.5 1.8 virginica 3
-117 7.7 3.8 6.7 2.2 virginica 3
-118 7.7 2.6 6.9 2.3 virginica 3
-119 6.0 2.2 5.0 1.5 virginica 3
-120 6.9 3.2 5.7 2.3 virginica 3
-121 5.6 2.8 4.9 2.0 virginica 3
-122 7.7 2.8 6.7 2.0 virginica 3
-123 6.3 2.7 4.9 1.8 virginica 3
-124 6.7 3.3 5.7 2.1 virginica 3
-125 7.2 3.2 6.0 1.8 virginica 3
-126 6.2 2.8 4.8 1.8 virginica 3
-127 6.1 3.0 4.9 1.8 virginica 3
-128 6.4 2.8 5.6 2.1 virginica 3
-129 7.2 3.0 5.8 1.6 virginica 3
-130 7.4 2.8 6.1 1.9 virginica 3
-131 7.9 3.8 6.4 2.0 virginica 3
-132 6.4 2.8 5.6 2.2 virginica 3
-133 6.3 2.8 5.1 1.5 virginica 3
-134 6.1 2.6 5.6 1.4 virginica 3
-135 7.7 3.0 6.1 2.3 virginica 3
-136 6.3 3.4 5.6 2.4 virginica 3
-137 6.4 3.1 5.5 1.8 virginica 3
-138 6.0 3.0 4.8 1.8 virginica 3
-139 6.9 3.1 5.4 2.1 virginica 3
-140 6.7 3.1 5.6 2.4 virginica 3
-141 6.9 3.1 5.1 2.3 virginica 3
-142 5.8 2.7 5.1 1.9 virginica 3
-143 6.8 3.2 5.9 2.3 virginica 3
-144 6.7 3.3 5.7 2.5 virginica 3
-145 6.7 3.0 5.2 2.3 virginica 3
-146 6.3 2.5 5.0 1.9 virginica 3
-147 6.5 3.0 5.2 2.0 virginica 3
-148 6.2 3.4 5.4 2.3 virginica 3
-149 5.9 3.0 5.1 1.8 virginica 3
b
diff -r 51a0c2e0fbdf -r e2d2b080bae3 plotly_tabular_tool/iris_interactive_10k.html
--- a/plotly_tabular_tool/iris_interactive_10k.html Fri Aug 04 02:00:28 2023 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,2 +0,0 @@\n-<div>                        <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n-        <script src="https://cdn.plot.ly/plotly-2.12.1.min.js"></script>                <div id="ae192753-a8f5-4918-80d2-4f1062788658" class="plotly-graph-div" style="height:100%; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("ae192753-a8f5-4918-80d2-4f1062788658")) {                    Plotly.newPlot(                        "ae192753-a8f5-4918-80d2-4f1062788658",                        [{"hovertemplate":"<b>%{hovertext}</b><br><br>sepal_length=%{x}<br>sepal_width=%{y}<br>petal_width=%{marker.color}<extra></extra>","hovertext":["setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica"],"legendgroup":"","marker":{"color":[0.2,0.2,0.2,0.2,0.2,0.4,0.3,0.2,0.2,0.1,0.2,0.2,0.1,0.1,0.2,0.4,0.4,0.3,0.3,0.3,0.2,0.4,0.2,0.5,0.2,0.2,0.4,0.2,0.2,0.2,0.2,0.4,0.1,0.2,0.1,0.2,0.2,0.1,0.2,0.2,0.3,0.3,0.2,0.6,0.4,0.3,0.2,0.2,0.2,0.2,1.4,1.5,1.5,1.3,1.5,1.3,1.6,1.0,1.3,1.4,1.0,1.5,1.0,1.4,1.3,1.4,1.5,1.0,1.5,1.1,1.8,1.3,1.5,1.2,1.3,1.4,1.4,1.7,1.5,1.0,1.1,1.0,1.2,1.6,1.5,1.6,1.5,1.3,1.3,1.3,1.2,1.4,1.2,1.0,1.3,1.2,1.3,1.3,1.1,1.3,2.5,1.9,2.1,1.8,2.2,2.1,1.7,1.8,1.8,2.5,2.0,1.9,2.1,2.0,2.4,2.3,1.8,2.2,2.3,1.5,2.3,2.0,2.0,1.8,2.1,1.8,1.8,1.8,2.1,1.6,1.9,2.0,2.2,1.5,1.4,2.3,2.4,1.8,1.8,2.1,2.4,2.3,1.9,2.3,2.5,2.3,1.9,2.0,2.3,1.8],"coloraxis":"coloraxis","symbol":"circle"},"mode":"markers","name":"","orientation":"v","showlegend":false,"x":[5.1,4.9,4.7,4.6,5.0,5.4,4.6,5.0,4.4,4.9,5.4,4.8,4.8,4.3,5.8,5.7,5.4,5.1,5.7,5.1,5.4,5.1,4.6,5.1,4.8,5.0,5.0,5.2,5.2,4.7,4.8,5.4,5.2,5.5,4.9,5.0,5.5,4.9,4.4,5.1,5.0,4.5,4.4,5.0,5.1,4.8,5.1,4.6,5.3,5.0,7.0,6.4,6.9,5.5,6.5,5.7,6.3,4.9,6.6,5.2,5.0,5.9,6.0,6.1,5.6,6.7,5.6,5.8,6.2,5.6,5.9,6.1,6.3,6.1,6.4,6.6,6.8,6.7,6.0,5.7,5.5,5.5,5.8,6.0,5.4,6.0,6.7,6.3,5.6,5.5,5.5,6.1,5.8,5.0,5.6,5.7,5.7,6.2,5.1,5.7,6.3,5.8,7.1,6.3,6.5,7.6,4.9,7.3,6.7,7.2,6.5,6.4,6.8,5.7,5.8,6.4,6.5,7.7,7.7,6.0,6.9,5.6,7.7,6.3,6.7,7.2,6.2,6.1,6.4,7.2,7.4,7.9,6.4,6.3,6.1,7.7,6.3,6.4,6.0,6.9,6.7,6.9,5.8,6.8,6.7,6.7,6.3,6.5,6.2,5.9],"xaxis":"x","y":[3.5,3.0,3.2,3.1,3.6,3.9,3.4,3.4,2.9,3.1,3.7,3.4,3.0,3.0,4.0,4.4,3.9,3.5,3.8,3.8,3.4,3.7,3.6,3.3,3.4,3.0,3.'..b'":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"sepal_length"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"sepal_width"}},"coloraxis":{"colorbar":{"title":{"text":"petal_width"}},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]},"legend":{"tracegroupgap":0},"margin":{"t":60},"title":{"font":{"size":50},"text":"Iris data"}},                        {"responsive": true}                    )                };                            </script>        </div>\n'
b
diff -r 51a0c2e0fbdf -r e2d2b080bae3 plotly_tabular_tool/plotly_tabular_iris_sample.png
b
Binary file plotly_tabular_tool/plotly_tabular_iris_sample.png has changed
b
diff -r 51a0c2e0fbdf -r e2d2b080bae3 plotly_tabular_tool/plotlytabular.xml
--- a/plotly_tabular_tool/plotlytabular.xml Fri Aug 04 02:00:28 2023 +0000
+++ b/plotly_tabular_tool/plotlytabular.xml Mon Aug 07 06:06:35 2023 +0000
[
b'@@ -1,6 +1,6 @@\n <tool name="plotlytabular" id="plotlytabular" version="3.0">\n   <!--Source in git at: https://github.com/fubar2/galaxy_tf_overlay-->\n-  <!--Created by toolfactory@galaxy.org at 04/08/2023 10:38:13 using the Galaxy Tool Factory.-->\n+  <!--Created by toolfactory@galaxy.org at 07/08/2023 15:43:09 using the Galaxy Tool Factory.-->\n   <description>Plotly plot generator for Galaxy tabular data.</description>\n   <requirements>\n     <requirement version="1.5.3" type="package">pandas</requirement>\n@@ -42,6 +42,7 @@\n import pandas as pd\n # Ross Lazarus July 2023\n # based on various plotly tutorials\n+MAXHTMLROWS = 5000 # empirically, browsers die at 10k so stop here for safety and give png\n parser = argparse.ArgumentParser()\n a = parser.add_argument\n a(\'--input_tab\',default=\'\')\n@@ -63,21 +64,35 @@\n df = pd.read_csv(args.input_tab, sep=\'\\t\')\n MAXLEN=35\n NCOLS = df.columns.size\n+NROWS = len(df.index)\n defaultcols = [\'col%d\' % (x+1) for x in range(NCOLS)]\n testcols = df.columns\n+if args.image_type in [\'short_html\', \'long_html\']: # refuse to create browser crashing gob stopper html\n+    if NROWS > MAXHTMLROWS:\n+        sys.stderr.write(\'#### CRITICAL: As advised on the tool form, 5k+ rows (you supplied %d) in html breaks browsers, so redo the job and change to png format output.\' % NROWS)\n+        sys.exit(6)\n if len(args.header.strip()) > 0:\n     newcols = args.header.split(\',\')\n     if len(newcols) == NCOLS:\n-        df.columns = newcols\n+        if (args.xcol in newcols) and (args.ycol in newcols):\n+            df.columns = newcols\n+        else:\n+            sys.stderr.write(\'#### xcol and ycol not found in supplied header parameter\' % (args.xcol, args.ycol, args.header))\n+            sys.exit(4)\n     else:\n-        sys.stderr.write(\'#### Supplied header %s has %d comma delimited header names - does not match the input tabular file %d columns - using col1,...coln\' % (args.header, len(newcols), NCOLS))\n-        df.columns = defaultcols\n+        sys.stderr.write(\'#### Supplied header %s has %d comma delimited header names - does not match the input tabular file %d columns\' % (args.header, len(newcols), NCOLS))\n+        sys.exit(5)\n else: # no header supplied - check for a real one that matches the x and y axis column names\n     colsok = (args.xcol in testcols) and (args.ycol in testcols) # if they match, probably ok...should use more code and logic..\n-    if not colsok:\n-        sys.stderr.write(\'replacing first row of data derived header %s with %s\' % (testcols, defaultcols))\n-        df.columns = defaultcols\n-#df[\'col11\'] = [-math.log(x) for x in df[\'col11\']] # convert so large values reflect statistical surprise\n+    if colsok:\n+        df.columns = testcols # use actual header\n+    else:\n+        colsok = (args.xcol in defaultcols) and (args.ycol in defaultcols)\n+        if colsok:\n+            sys.stderr.write(\'replacing first row of data derived header %s with %s\' % (testcols, defaultcols))\n+            df.columns = defaultcols\n+        else:\n+            sys.stderr.write(\'#### xcol %s and ycol %s do not match anything in the file header, supplied header parameter or automatic default column names\' % (args.xcol, args.ycol))\n if isHover and isColour:\n     fig = px.scatter(df, x=args.xcol, y=args.ycol, color=args.colourcol, hover_name=args.hovercol)\n elif isHover:\n@@ -112,17 +127,18 @@\n     shutil.copyfile(\'plotly.png\', args.htmlout)\n \n \n+\n #end raw]]></configfile>\n   </configfiles>\n   <inputs>\n-    <param name="input_tab" type="data" optional="false" label="Tabular input file to plot" help="" format="tabular" multiple="false"/>\n+    <param name="input_tab" type="data" optional="false" label="Tabular input file to plot" help="If 5000+ rows, html output will fail, but png will work." format="tabular" multiple="false"/>\n     <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 '..b't 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.">\n+    <param name="outputimagetype" type="select" label="Select the output format for this plot image. If over 5000 rows of data, HTML breaks browsers, so your job will fail. Use png only if more than 5k rows." help="Small and large png are not interactive but best for many (+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.">\n       <option value="short_html">Short HTML interactive format</option>\n       <option value="long_html">Long HTML for stand-alone viewing where network access to libraries is not available.</option>\n       <option value="large_png">Large (1920x1200) png image - not interactive so hover column ignored</option>\n@@ -227,6 +243,7 @@\n     import pandas as pd\n     # Ross Lazarus July 2023\n     # based on various plotly tutorials\n+    MAXHTMLROWS = 5000 # empirically, browsers die at 10k so stop here for safety and give png\n     parser = argparse.ArgumentParser()\n     a = parser.add_argument\n     a(\'--input_tab\',default=\'\')\n@@ -248,21 +265,35 @@\n     df = pd.read_csv(args.input_tab, sep=\'\\t\')\n     MAXLEN=35\n     NCOLS = df.columns.size\n+    NROWS = len(df.index)\n     defaultcols = [\'col%d\' % (x+1) for x in range(NCOLS)]\n     testcols = df.columns\n+    if args.image_type in [\'short_html\', \'long_html\']: # refuse to create browser crashing gob stopper html\n+        if NROWS > MAXHTMLROWS:\n+            sys.stderr.write(\'#### CRITICAL: As advised on the tool form, 5k+ rows (you supplied %d) in html breaks browsers, so redo the job and change to png format output.\' % NROWS)\n+            sys.exit(6)\n     if len(args.header.strip()) > 0:\n         newcols = args.header.split(\',\')\n         if len(newcols) == NCOLS:\n-            df.columns = newcols\n+            if (args.xcol in newcols) and (args.ycol in newcols):\n+                df.columns = newcols\n+            else:\n+                sys.stderr.write(\'#### xcol and ycol not found in supplied header parameter\' % (args.xcol, args.ycol, args.header))\n+                sys.exit(4)\n         else:\n-            sys.stderr.write(\'#### Supplied header %s has %d comma delimited header names - does not match the input tabular file %d columns - using col1,...coln\' % (args.header, len(newcols), NCOLS))\n-            df.columns = defaultcols\n+            sys.stderr.write(\'#### Supplied header %s has %d comma delimited header names - does not match the input tabular file %d columns\' % (args.header, len(newcols), NCOLS))\n+            sys.exit(5)\n     else: # no header supplied - check for a real one that matches the x and y axis column names\n         colsok = (args.xcol in testcols) and (args.ycol in testcols) # if they match, probably ok...should use more code and logic..\n-        if not colsok:\n-            sys.stderr.write(\'replacing first row of data derived header %s with %s\' % (testcols, defaultcols))\n-            df.columns = defaultcols\n-    #df[\'col11\'] = [-math.log(x) for x in df[\'col11\']] # convert so large values reflect statistical surprise\n+        if colsok:\n+            df.columns = testcols # use actual header\n+        else:\n+            colsok = (args.xcol in defaultcols) and (args.ycol in defaultcols)\n+            if colsok:\n+                sys.stderr.write(\'replacing first row of data derived header %s with %s\' % (testcols, defaultcols))\n+                df.columns = defaultcols\n+            else:\n+                sys.stderr.write(\'#### xcol %s and ycol %s do not match anything in the file header, supplied header parameter or automatic default column names\' % (args.xcol, args.ycol))\n     if isHover and isColour:\n         fig = px.scatter(df, x=args.xcol, y=args.ycol, color=args.colourcol, hover_name=args.hovercol)\n     elif isHover:\n'
b
diff -r 51a0c2e0fbdf -r e2d2b080bae3 plotly_tabular_tool/plotlytabular_toolform_sample.png
b
Binary file plotly_tabular_tool/plotlytabular_toolform_sample.png has changed
b
diff -r 51a0c2e0fbdf -r e2d2b080bae3 plotly_tabular_tool/test-data/htmlout_sample
--- a/plotly_tabular_tool/test-data/htmlout_sample Fri Aug 04 02:00:28 2023 +0000
+++ b/plotly_tabular_tool/test-data/htmlout_sample Mon Aug 07 06:06:35 2023 +0000
[
b'@@ -1,2 +1,2 @@\n <div>                        <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n-        <script src="https://cdn.plot.ly/plotly-2.12.1.min.js"></script>                <div id="93401de9-019d-4e44-b26f-9df93fda92ee" class="plotly-graph-div" style="height:100%; width:100%;"></div>            <script type="text/javascript">                                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById("93401de9-019d-4e44-b26f-9df93fda92ee")) {                    Plotly.newPlot(                        "93401de9-019d-4e44-b26f-9df93fda92ee",                        [{"hovertemplate":"<b>%{hovertext}</b><br><br>sepal_length=%{x}<br>sepal_width=%{y}<br>petal_width=%{marker.color}<extra></extra>","hovertext":["setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","setosa","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","versicolor","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica","virginica"],"legendgroup":"","marker":{"color":[0.2,0.2,0.2,0.2,0.2,0.4,0.3,0.2,0.2,0.1,0.2,0.2,0.1,0.1,0.2,0.4,0.4,0.3,0.3,0.3,0.2,0.4,0.2,0.5,0.2,0.2,0.4,0.2,0.2,0.2,0.2,0.4,0.1,0.2,0.1,0.2,0.2,0.1,0.2,0.2,0.3,0.3,0.2,0.6,0.4,0.3,0.2,0.2,0.2,0.2,1.4,1.5,1.5,1.3,1.5,1.3,1.6,1.0,1.3,1.4,1.0,1.5,1.0,1.4,1.3,1.4,1.5,1.0,1.5,1.1,1.8,1.3,1.5,1.2,1.3,1.4,1.4,1.7,1.5,1.0,1.1,1.0,1.2,1.6,1.5,1.6,1.5,1.3,1.3,1.3,1.2,1.4,1.2,1.0,1.3,1.2,1.3,1.3,1.1,1.3,2.5,1.9,2.1,1.8,2.2,2.1,1.7,1.8,1.8,2.5,2.0,1.9,2.1,2.0,2.4,2.3,1.8,2.2,2.3,1.5,2.3,2.0,2.0,1.8,2.1,1.8,1.8,1.8,2.1,1.6,1.9,2.0,2.2,1.5,1.4,2.3,2.4,1.8,1.8,2.1,2.4,2.3,1.9,2.3,2.5,2.3,1.9,2.0,2.3,1.8],"coloraxis":"coloraxis","symbol":"circle"},"mode":"markers","name":"","orientation":"v","showlegend":false,"x":[5.1,4.9,4.7,4.6,5.0,5.4,4.6,5.0,4.4,4.9,5.4,4.8,4.8,4.3,5.8,5.7,5.4,5.1,5.7,5.1,5.4,5.1,4.6,5.1,4.8,5.0,5.0,5.2,5.2,4.7,4.8,5.4,5.2,5.5,4.9,5.0,5.5,4.9,4.4,5.1,5.0,4.5,4.4,5.0,5.1,4.8,5.1,4.6,5.3,5.0,7.0,6.4,6.9,5.5,6.5,5.7,6.3,4.9,6.6,5.2,5.0,5.9,6.0,6.1,5.6,6.7,5.6,5.8,6.2,5.6,5.9,6.1,6.3,6.1,6.4,6.6,6.8,6.7,6.0,5.7,5.5,5.5,5.8,6.0,5.4,6.0,6.7,6.3,5.6,5.5,5.5,6.1,5.8,5.0,5.6,5.7,5.7,6.2,5.1,5.7,6.3,5.8,7.1,6.3,6.5,7.6,4.9,7.3,6.7,7.2,6.5,6.4,6.8,5.7,5.8,6.4,6.5,7.7,7.7,6.0,6.9,5.6,7.7,6.3,6.7,7.2,6.2,6.1,6.4,7.2,7.4,7.9,6.4,6.3,6.1,7.7,6.3,6.4,6.0,6.9,6.7,6.9,5.8,6.8,6.7,6.7,6.3,6.5,6.2,5.9],"xaxis":"x","y":[3.5,3.0,3.2,3.1,3.6,3.9,3.4,3.4,2.9,3.1,3.7,3.4,3.0,3.0,4.0,4.4,3.9,3.5,3.8,3.8,3.4,3.7,3.6,3.3,3.4,3.0,3.'..b'type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"sepal_length"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"sepal_width"}},"coloraxis":{"colorbar":{"title":{"text":"petal_width"}},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]},"legend":{"tracegroupgap":0},"margin":{"t":60},"title":{"font":{"size":50},"text":"Iris data"}},                        {"responsive": true}                    )                };                            </script>        </div>\n\\ No newline at end of file\n'
b
diff -r 51a0c2e0fbdf -r e2d2b080bae3 plotly_tabular_tool/test_run.html
--- a/plotly_tabular_tool/test_run.html Fri Aug 04 02:00:28 2023 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,14 +0,0 @@\n-<html>\n-<head><meta charset="utf-8" /></head>\n-<body>\n-    <div>                        <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: \'local\'};</script>\n-        <script type="text/javascript">/**\n-* plotly.js v2.24.1\n-* Copyright 2012-2023, Plotly, Inc.\n-* All rights reserved.\n-* Licensed under the MIT license\n-*/\n-/*! For license information please see plotly.min.js.LICENSE.txt */\n-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Plotly=e():t.Plotly=e()}(self,(function(){return function(){var t={98847:function(t,e,r){"use strict";var n=r(71828),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;","X .ease-bg":"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;","X .modebar--hover>:not(.watermark)":"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;","X:hover .modebar--hover .modebar-group":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;","X .modebar-btn svg":"position:relative;top:2px;","X .modebar.vertical":"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;","X .modebar.vertical svg":"top:-1px;","X .modebar.vertical .modebar-group":"display:block;float:none;padding-left:0px;padding-bottom:8px;","X .modebar.vertical .modebar-group .modebar-btn":"display:block;text-align:center;","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:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;\',"X [data-title]:after":"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;fon'..b'arker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"col1"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"col2"}},"coloraxis":{"colorbar":{"title":{"text":"col11"}},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]},"legend":{"tracegroupgap":0},"margin":{"t":60},"title":{"font":{"size":50},"text":"Default plot title","automargin":true}},                        {"responsive": true}                    )                };                            </script>        </div>\n-</body>\n-</html>\n\\ No newline at end of file\n'