diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index e399a9db..a9d8e1b7 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
 ## Enforcement
 
 Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at accounts@plot.ly. All
+reported by contacting the project team at <accounts@plot.ly>. All
 complaints will be reviewed and investigated and will result in a response that
 is deemed necessary and appropriate to the circumstances. The project team is
 obligated to maintain confidentiality with regard to the reporter of an incident.
diff --git a/LICENSE b/LICENSE
index 5b0fa326..59a47e2a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
-The MIT License (MIT)
+MIT License
 
-Copyright (c) 2017 Plotly, Inc
+Copyright (c) 2017-2024 Plotly Technologies Inc.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
old mode 100755
new mode 100644
index 2f9225bc..2a63c250
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ Version: 3.0.0
 The latest version of the wrapper can be downloaded [here](https://github.com/plotly/MATLAB-Online/archive/master.zip).
 
 Once downloaded, run `plotlysetup_offline()` to get started.
-If you have a plotly bundle url of the form 'http://cdn.plot.ly/plotly-latest.min.js', then run instead
+If you have a plotly bundle url of the form '<http://cdn.plot.ly/plotly-latest.min.js>', then run instead
 `plotlysetup_offline('plotly_bundle_url')
 
 For online use, run `plotlysetup_online('your_username', 'your_api_key')` to get started.
@@ -61,7 +61,7 @@ Convert your MATLAB® figures into online [Plotly](https://plot.ly) graphs with
 
 [![MATLAB® Contour Plot](https://plot.ly/~matlab_user_guide/1522.png)](https://plot.ly/~matlab_user_guide/1522)
 
-Also, access other Plotly services and graphs programatically. Like, publication-quality image export:
+Also, access other Plotly services and graphs programmatically. Like, publication-quality image export:
 
 ```MATLAB
  saveplotlyfig(p, 'testimage.svg')
@@ -79,7 +79,7 @@ This lives here: [https://plot.ly/matlab](https://plot.ly/matlab)
 
 ## Questions & troubleshooting
 
-- https://community.plotly.com/c/api/matlab/
+Ask on the [Plotly Community Forum](https://community.plotly.com/c/plotly-r-matlab-julia-net)
 
 ## Contribute
 
diff --git a/plotly/README.txt b/plotly/README.txt
old mode 100755
new mode 100644
index db59c590..aba56b75
--- a/plotly/README.txt
+++ b/plotly/README.txt
@@ -3,24 +3,24 @@ Plotly - Create publication quality graphs, all in your web browser!
 
 Plotly (https://plot.ly) is a browser-based data analysis and visualization tool that creates interactive, customizable, publication quality figures.
 
-This API allows MATLAB users to generate Plotly graphs from their desktop MATLAB environment. 
+This API allows MATLAB users to generate Plotly graphs from their desktop MATLAB environment.
 
 All graphs can be styled and shared through Plotly's interactive web application.
 To use, simply:
 
-0. sign-up (either online or using signup.m) 
+0. sign-up (either online or using signup.m)
 1. run plotlysetup('username','api_key') (both username and api_key can be found online!)
 3. call: >> fig2plotly to convert your MATLAB figure!
 4. View, style and share your plot in your browser at Plotly (https://plot.ly)
 
-See full documentation and examples at https://plot.ly/matlab 
+See full documentation and examples at https://plot.ly/matlab
 
 New Features
 ------------
-- plotlyupdate: automatically update the Plotly API Matlab libraries in your MATLAB search path to match the latest release! 
-- getplotlyfig('username','figure_id'): grab the data and layout information from any publicly available graph online! 
+- plotlyupdate: automatically update the Plotly API Matlab libraries in your MATLAB search path to match the latest release!
+- getplotlyfig('username','figure_id'): grab the data and layout information from any publicly available graph online!
 - saveplotlyfig(figure,'image_name','ext'): convert your plotly figure into a high-quality static (png,pdf,svg,jpef) image for your publications!
-- plotlystream: stream your data directly from MATLAB to your plotly account in real-time! 
+- plotlystream: stream your data directly from MATLAB to your plotly account in real-time!
 
 Example Graphs
 --------------
diff --git a/plotly/Test_plotlyfig.m b/plotly/Test_plotlyfig.m
new file mode 100644
index 00000000..72630a63
--- /dev/null
+++ b/plotly/Test_plotlyfig.m
@@ -0,0 +1,2085 @@
+classdef Test_plotlyfig < matlab.unittest.TestCase
+    methods (Test)
+        function testLinePlotData(tc)
+            fig = figure("Visible","off");
+            y = [0.0301 0.4411 0.7007 0.7030 0.5102 0.6122 0.7464 0.8014 0.3367 0.5641];
+            x = 1:10;
+            plot(x,y);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'lines', ...
+                x = x, ...
+                y = y, ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+        end
+
+        function testLinePlotLayout(tc)
+            fig = figure("Visible","off");
+            y = [0.0301 0.4411 0.7007 0.7030 0.5102 0.6122 0.7464 0.8014 0.3367 0.5641];
+            x = 1:10;
+            plot(x,y);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyEqual(p.layout, struct( ...
+                autosize = false, ...
+                margin = struct( ...
+                    pad = 0, ...
+                    l = 0, ...
+                    r = 0, ...
+                    b = 0, ...
+                    t = 0 ...
+                ), ...
+                showlegend = false, ...
+                width = 840, ...
+                height = 630, ...
+                paper_bgcolor = "rgb(255,255,255)", ...
+                hovermode = 'closest', ...
+                xaxis1 = struct( ...
+                    side = 'bottom', ...
+                    zeroline = false, ...
+                    autorange = false, ...
+                    linecolor = "rgb(38,38,38)", ...
+                    linewidth = 1, ...
+                    exponentformat = 'none', ...
+                    tickfont = struct( ...
+                        size = 10, ...
+                        family = "Arial, sans-serif", ...
+                        color = "rgb(38,38,38)" ...
+                    ), ...
+                    ticklen = 6.51, ...
+                    tickcolor = "rgb(38,38,38)", ...
+                    tickwidth = 1, ...
+                    tickangle = 0, ...
+                    ticks = "inside", ...
+                    showgrid = false, ...
+                    gridcolor = "rgba(38,38,38,0.150000)", ...
+                    type = 'linear', ...
+                    showticklabels = true, ...
+                    tickmode = "array", ...
+                    tickvals = [1 2 3 4 5 6 7 8 9 10], ...
+                    range = [1 10], ...
+                    mirror = "ticks", ...
+                    ticktext = {{'1'; '2'; '3'; '4'; '5'; '6'; '7'; '8'; '9'; '10'}}, ...
+                    titlefont = struct( ...
+                        color = "rgb(38,38,38)", ...
+                        family = "Arial, sans-serif", ...
+                        size = 11 ...
+                    ), ...
+                    showline = true, ...
+                    domain = [0.13 0.905], ...
+                    anchor = "y1" ...
+                ), ...
+                scene1 = struct( ...
+                    domain = struct( ...
+                        x = [0.13 0.905], ...
+                        y = [0.11 0.925] ...
+                    ) ...
+                ), ...
+                yaxis1 = struct( ...
+                    side = 'left', ...
+                    zeroline = false, ...
+                    autorange = false, ...
+                    linecolor = "rgb(38,38,38)", ...
+                    linewidth = 1, ...
+                    exponentformat = 'none', ...
+                    tickfont = struct( ...
+                        size = 10, ...
+                        family = "Arial, sans-serif", ...
+                        color = "rgb(38,38,38)" ...
+                    ), ...
+                    ticklen = 6.51, ...
+                    tickcolor = "rgb(38,38,38)", ...
+                    tickwidth = 1, ...
+                    tickangle = 0, ...
+                    ticks = "inside", ...
+                    showgrid = false, ...
+                    gridcolor = "rgba(38,38,38,0.150000)", ...
+                    type = 'linear', ...
+                    showticklabels = true, ...
+                    tickmode = "array", ...
+                    tickvals = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9], ...
+                    range = [0 0.9], ...
+                    mirror = "ticks", ...
+                    ticktext = {{'0'; '0.1'; '0.2'; '0.3'; '0.4'; '0.5'; '0.6'; '0.7'; '0.8'; '0.9'}}, ...
+                    titlefont = struct( ...
+                        color = "rgb(38,38,38)", ...
+                        family = "Arial, sans-serif", ...
+                        size = 11 ...
+                    ), ...
+                    showline = true, ...
+                    domain = [0.11 0.925], ...
+                    anchor = "x1" ...
+                ), ...
+                annotations = {{struct( ...
+                    showarrow = false, ...
+                    xref = "paper", ...
+                    yref = "paper", ...
+                    xanchor = 'center', ...
+                    align = 'center', ...
+                    yanchor = "bottom", ...
+                    text = "<b><b></b></b>", ...
+                    x = 0.5175, ...
+                    y = 0.935, ...
+                    font = struct( ...
+                        color = "rgb(0,0,0)", ...
+                        family = "Arial, sans-serif", ...
+                        size = 11 ...
+                    ), ...
+                    bordercolor = "rgba(0,0,0,0)", ...
+                    textangle = 0, ...
+                    borderwidth = 0.5, ...
+                    borderpad = 3 ...
+                )}} ...
+            ), AbsTol=1e-15);
+        end
+
+        function testAreaPlotData(tc)
+            fig = figure("Visible","off");
+            y = [0.6297 0.9559 0.7551 0.5261 0.8501 0.8160 0.1321 0.7607 0.6172 0.3976];
+            x = 1:10;
+            area(x,y);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "scatter", ...
+                x = x, ...
+                y = y, ...
+                name = '', ...
+                visible = true, ...
+                fill = "tozeroy", ...
+                mode = "lines", ...
+                line = struct( ...
+                    color = "rgba(0,0,0,1.000000)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                fillcolor = "rgba(0,114,189,1.000000)", ...
+                showlegend = true ...
+            ));
+        end
+
+        function testScatterPlotData(tc)
+            fig = figure("Visible","off");
+            x = linspace(0,3*pi,200);
+            y = cos(x) + rand(1,200);
+            scatter(x,y);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                mode = "markers", ...
+                visible = true, ...
+                name = '', ...
+                x = x, ...
+                y = y, ...
+                marker = struct( ...
+                    sizeref = 1, ...
+                    sizemode = "area", ...
+                    size = 36 * ones(size(x)), ...
+                    line = struct( ...
+                        width = 0.7500, ...
+                        color = "rgb(0,114,189)" ...
+                    ), ...
+                    symbol = "circle", ...
+                    color = "rgba(0,0,0,0)", ...
+                    opacity = 1 ...
+                ), ...
+                showlegend = false ...
+            ));
+        end
+
+        function testSingleScatterPlotData(tc)
+            fig = figure("Visible","off");
+            x = 1;
+            y = 1;
+            scatter(x,y);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                mode = "markers", ...
+                visible = true, ...
+                name = '', ...
+                x = {{x}}, ...
+                y = {{y}}, ...
+                marker = struct( ...
+                    sizeref = 1, ...
+                    sizemode = "area", ...
+                    size = {{36}}, ...
+                    line = struct( ...
+                        width = 0.7500, ...
+                        color = "rgb(0,114,189)" ...
+                    ), ...
+                    symbol = "circle", ...
+                    color = "rgba(0,0,0,0)", ...
+                    opacity = 1 ...
+                ), ...
+                showlegend = false ...
+            ));
+        end
+
+        function testScatter3DPlotData(tc)
+            fig = figure("Visible","off");
+            [X,Y,Z] = sphere(16);
+            x = [0.5*X(:); 0.75*X(:); X(:)]';
+            y = [0.5*Y(:); 0.75*Y(:); Y(:)]';
+            z = [0.5*Z(:); 0.75*Z(:); Z(:)]';
+            scatter3(x,y,z);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter3d", ...
+                scene = "scene1", ...
+                mode = "markers", ...
+                visible = true, ...
+                name = '', ...
+                x = x, ...
+                y = y, ...
+                z = z, ...
+                marker = struct( ...
+                    sizeref = 1, ...
+                    sizemode = "area", ...
+                    size = 72 * ones(size(x)), ...
+                    line = struct( ...
+                        width = 0.7500, ...
+                        color = "rgb(0,114,189)" ...
+                    ), ...
+                    symbol = "circle", ...
+                    color = "rgba(0,0,0,0)", ...
+                    opacity = 1 ...
+                ), ...
+                showlegend = false ...
+            ));
+        end
+
+        function testSurfacePlotData(tc)
+            fig = figure("Visible","off");
+            points = linspace(-2, 2, 40);
+            [x, y] = meshgrid(points, points);
+            z = 2./exp((x-0.5).^2+y.^2)-2./exp((x+0.5).^2+y.^2);
+            surf(x, y, z)
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(rmfield(p.data{1}, ["colorscale" "surfacecolor"]), struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "surface", ...
+                x = x, ...
+                y = y, ...
+                z = z, ...
+                contours = struct( ...
+                    x = struct( ...
+                        "end", 2, ...
+                        start = -2, ...
+                        size = 0.102564102564103, ...
+                        show = true, ...
+                        color = "black" ...
+                    ), ...
+                    y = struct( ...
+                        "end", 2, ...
+                        start = -2, ...
+                        size = 0.102564102564103, ...
+                        show = true, ...
+                        color = "black" ...
+                    ) ...
+                ), ...
+                name = '', ...
+                showscale = false, ...
+                visible = true, ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testPolarScatterData(tc)
+            fig = figure("Visible","off");
+            t = pi/4:pi/4:2*pi;
+            r = [19 6 12 18 16 11 15 15];
+            polarscatter(t,r)
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                subplot = 'polar2', ...
+                type = 'scatterpolar', ...
+                visible = true, ...
+                name = '', ...
+                r = r, ...
+                theta = rad2deg(t), ...
+                mode = 'markers', ...
+                marker = struct( ...
+                    sizeref = 1, ...
+                    sizemode = "area", ...
+                    size = [36 36 36 36 36 36 36 36], ...
+                    line = struct( ...
+                        width = 0.75, ...
+                        color = "rgb(0,114,189)" ...
+                    ), ...
+                    symbol = "circle", ...
+                    color = "rgba(0,0,0,0)", ...
+                    opacity = 1 ...
+                ), ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testPolarPlotData(tc)
+            fig = figure("Visible","off");
+            t = 0:0.01:2*pi;
+            r = abs(sin(2*t).*cos(2*t));
+            polarplot(t, r)
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                subplot = 'polar2', ...
+                type = 'scatterpolar', ...
+                visible = true, ...
+                name = '', ...
+                r = r, ...
+                theta = rad2deg(t), ...
+                mode = 'lines', ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 1, ...
+                    dash = "solid" ...
+                ), ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testComplexPolarPlotData(tc)
+            fig = figure("Visible","off");
+            Z = [2+3i 2 -1+4i 3-4i 5+2i -4-2i -2+3i -2 -3i 3i-2i];
+            polarplot(Z,'*')
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                subplot = 'polar2', ...
+                type = 'scatterpolar', ...
+                visible = true, ...
+                name = '', ...
+                r = fig.Children.Children.RData, ...
+                theta = rad2deg(fig.Children.Children.ThetaData), ...
+                mode = 'markers', ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    symbol = "asterisk-open", ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                line = struct(), ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testHistogramPlotData(tc)
+            fig = figure("Visible","off");
+            values = [0.6297 0.9559 0.7551 0.5261 0.8501 0.8160 0.1321 0.7607 0.6172 0.3976];
+            histogram(values);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "bar", ...
+                x = [0.15 0.45 0.75 1.05], ...
+                width = [0.3 0.3 0.3 0.3], ...
+                y = [1 2 6 1], ...
+                name = 'values', ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)" ...
+                    ), ...
+                    color = "rgba(0,114,189,0.600000)" ...
+                ), ...
+                opacity = 0.75, ...
+                visible = true, ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testPolarHistogramPlotData(tc)
+            fig = figure("Visible","off");
+            values = [0.6297 0.9559 0.7551 0.5261 0.8501 0.8160 0.1321 0.7607 0.6172 0.3976];
+            polarhistogram(values);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "barpolar", ...
+                r = [1 6 3 0], ...
+                width = [22.5 22.5 22.5 22.5], ...
+                theta = [11.25 33.75 56.25 78.75], ...
+                name = 'values', ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)" ...
+                    ), ...
+                    color = "rgba(0,114,189,0.600000)" ...
+                ), ...
+                opacity = 0.6, ...
+                visible = true, ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testEasyToUsePolarPlotData(tc)
+            fig = figure("Visible","off");
+            ezpolar("1+cos(theta)")
+
+            p = plotlyfig(fig,"visible","off","treatAs",'ezpolar');
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(rmfield(p.data{1},["r" "theta"]), struct( ...
+                type = "scatterpolar", ...
+                subplot = "polar2", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'lines', ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 0.75, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+        end
+
+        function testLogLogPlot(tc)
+            fig = figure("Visible","off");
+            zeta = 0.5; % damping factor
+            color = "r";
+            w = logspace(-1, 1, 1000); % values equally spaced logarithmically
+            a = w.^2 - 1;
+            b = 2*w*zeta;
+            gain = sqrt(1./(a.^2 + b.^2));
+            loglog(w, gain, color=color);
+            axis([0.1 10 0.01 100]);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = w, ...
+                y = gain, ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(255,0,0)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(255,0,0)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+        end
+
+        function testSingleBarPlotData(tc)
+            fig = figure("Visible","off");
+            bar(1,1);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "bar", ...
+                name = '', ...
+                visible = true, ...
+                orientation = "v", ...
+                x = {{1}}, ...
+                y = {{1}}, ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)", ...
+                        dash = "solid" ...
+                    ), ...
+                    color = "rgba(0,114,189,1.000000)" ...
+                ), ...
+                showlegend = true ...
+            ));
+        end
+
+        function testDateBarPlotData(tc)
+            fig = figure("Visible","off");
+            x = datetime("today");
+            y = 1;
+            bar(x,y)
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "bar", ...
+                name = '', ...
+                visible = true, ...
+                orientation = "v", ...
+                x = {{x}}, ...
+                y = {{y}}, ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)", ...
+                        dash = "solid" ...
+                    ), ...
+                    color = "rgba(0,114,189,1.000000)" ...
+                ), ...
+                showlegend = true ...
+            ));
+        end
+
+        function testVerticalBarPlotData(tc)
+            fig = figure("Visible","off");
+            x = 1:12;
+            y = [38556 24472 14556 18060 19549 8122 28541 7880 3283 4135 7953 1884];
+            bar(x,y);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "bar", ...
+                name = '', ...
+                visible = true, ...
+                orientation = "v", ...
+                x = x, ...
+                y = y, ...
+                marker = struct( ...
+                    line = struct( ...
+                        color = "rgba(0,0,0,1.000000)", ...
+                        width = 0.5, ...
+                        dash = "solid" ...
+                    ), ...
+                    color = "rgba(0,114,189,1.000000)" ...
+                ), ...
+                showlegend = true ...
+            ));
+        end
+
+        function testHorizontalBarPlotData(tc)
+            fig = figure("Visible","off");
+            x = 1:12;
+            y = [38556 24472 14556 18060 19549 8122 28541 7880 3283 4135 7953 1884];
+            barh(x,y);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "bar", ...
+                name = '', ...
+                visible = true, ...
+                orientation = "h", ...
+                x = y, ...
+                y = x, ...
+                marker = struct( ...
+                    line = struct( ...
+                        color = "rgba(0,0,0,1.000000)", ...
+                        width = 0.5, ...
+                        dash = "solid" ...
+                    ), ...
+                    color = "rgba(0,114,189,1.000000)" ...
+                ), ...
+                showlegend = true ...
+            ));
+        end
+
+        function testPieChartPlotData(tc)
+            fig = figure("Visible","off");
+            count = [35 29 28 40 27 30 34 28 36 29 29 30 31 60 90];
+            label = 1:15;
+            pie(count,label);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 15);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = 'scatter', ...
+                x = [-0.0196 -0.0196 -0.0761 -0.1324 -0.1883 -0.2437 -0.2984 -0.3522 -0.4049 -0.0196 -0.0196], ...
+                y = [0.0981 1.0981 1.0965 1.0917 1.0837 1.0726 1.0584 1.0411 1.0208 0.0981 0.0981], ...
+                name = '', ...
+                visible = true, ...
+                fill = 'tozeroy', ...
+                mode = 'lines', ...
+                marker = struct( ...
+                    sizeref = 1, ...
+                    sizemode = "diameter", ...
+                    size = 6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,0,0)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(0,0,0)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                fillcolor = "rgba(62,38,168,1.000000)", ...
+                showlegend = false ...
+            ), AbsTol=1e-4);
+        end
+
+        function testStairsPlotData(tc)
+            fig = figure("Visible","off");
+            x = 2:2:8;
+            y = [1 1 2 2];
+            stairs(x,y,'-or')
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'lines+markers', ...
+                x = x, ...
+                y = y, ...
+                line = struct( ...
+                    color = "rgb(255,0,0)", ...
+                    width = 0.5, ...
+                    dash = "solid", ...
+                    shape = "hv" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgb(255,0,0)" ...
+                    ), ...
+                    color = "rgba(0,0,0,0)" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-4);
+        end
+
+        function testPlotmatrixData(tc)
+            fig = figure("Visible","off");
+            columns = [ ...
+                0.67  0.77  0.42;
+                0.43  0.70  0.66;
+                0.45  0.13  0.72;
+                0.61  0.13  0.53;
+                0.06  0.09  0.11;
+                0.32  0.01  0.63];
+            plotmatrix(columns);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 10); % 3x3 matrix of plots + 1 parent plot
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "scatter", ...
+                mode = "none", ...
+                x = [], ...
+                y = [], ...
+                name = "", ...
+                showlegend = false ...
+            ));
+            tc.verifyEqual(p.data{2}, struct( ...
+                type = "scatter", ...
+                xaxis = "x2", ...
+                yaxis = "y2", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'markers', ...
+                x = columns(:,2)', ...
+                y = columns(:,3)', ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ));
+            tc.verifyEqual(p.data{3}, struct( ...
+                type = "scatter", ...
+                xaxis = "x3", ...
+                yaxis = "y3", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'markers', ...
+                x = columns(:,1)', ...
+                y = columns(:,3)', ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ));
+            tc.verifyEqual(p.data{4}, struct( ...
+                type = "scatter", ...
+                xaxis = "x4", ...
+                yaxis = "y4", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'markers', ...
+                x = columns(:,3)', ...
+                y = columns(:,2)', ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ));
+            tc.verifyEqual(p.data{5}, struct( ...
+                type = "scatter", ...
+                xaxis = "x5", ...
+                yaxis = "y5", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'markers', ...
+                x = columns(:,1)', ...
+                y = columns(:,2)', ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ));
+            tc.verifyEqual(p.data{6}, struct( ...
+                type = "scatter", ...
+                xaxis = "x6", ...
+                yaxis = "y6", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'markers', ...
+                x = columns(:,3)', ...
+                y = columns(:,1)', ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ));
+            tc.verifyEqual(p.data{7}, struct( ...
+                type = "scatter", ...
+                xaxis = "x7", ...
+                yaxis = "y7", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'markers', ...
+                x = columns(:,2)', ...
+                y = columns(:,1)', ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ));
+            tc.verifyEqual(p.data{8}, struct( ...
+                xaxis = "x8", ...
+                yaxis = "y8", ...
+                type = "bar", ...
+                x = [0.25 0.75], ...
+                width = [0.5 0.5], ...
+                y = [2 4], ...
+                name = '', ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)" ...
+                    ), ...
+                    color = "rgba(0,114,189,0.600000)" ...
+                ), ...
+                opacity = 0.75, ...
+                visible = true, ...
+                showlegend = true ...
+            ));
+            tc.verifyEqual(p.data{9}, struct( ...
+                xaxis = "x9", ...
+                yaxis = "y9", ...
+                type = "bar", ...
+                x = [0.25 0.75], ...
+                width = [0.5 0.5], ...
+                y = [4 2], ...
+                name = '', ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)" ...
+                    ), ...
+                    color = "rgba(0,114,189,0.600000)" ...
+                ), ...
+                opacity = 0.75, ...
+                visible = true, ...
+                showlegend = true ...
+            ));
+            tc.verifyEqual(p.data{10}, struct( ...
+                xaxis = "x10", ...
+                yaxis = "y10", ...
+                type = "bar", ...
+                x = [0.25 0.75], ...
+                width = [0.5 0.5], ...
+                y = [4 2], ...
+                name = '', ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)" ...
+                    ), ...
+                    color = "rgba(0,114,189,0.600000)" ...
+                ), ...
+                opacity = 0.75, ...
+                visible = true, ...
+                showlegend = true ...
+            ));
+        end
+
+        function testContourPlotData(tc)
+            fig = figure("Visible","off");
+            range = 0:0.1:3;
+            [xVals,yVals] = meshgrid(range,range);
+            zVals = sin(3*xVals).*cos(xVals+yVals);
+            contour(xVals,yVals,zVals);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(rmfield(p.data{1}, "colorscale"), struct( ...
+                type = "contour", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                name = '', ...
+                visible = true, ...
+                xtype = "array", ...
+                ytype = "array", ...
+                x = range, ...
+                y = range', ...
+                z = zVals, ...
+                autocontour = false, ...
+                contours = struct( ...
+                    "end", 0.8, ...
+                    start = -0.8, ...
+                    size = 0.2, ...
+                    coloring = "lines", ...
+                    showlines = true ...
+                ), ...
+                zauto = false, ...
+                zmin = -0.8, ...
+                zmax = 0.8, ...
+                showscale = false, ...
+                reversescale = false, ...
+                line = struct( ...
+                    width = 0.75, ...
+                    dash = "solid", ...
+                    color = "rgba(0,0,0,0)", ...
+                    smoothing = 0 ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-16);
+        end
+
+        function testFunctionContourPlotData(tc)
+            fig = figure("Visible","off");
+            fcontour(@(x,y) sin(3*x).*cos(x+y),[0 3 0 3],Fill="on",LineColor="k");
+            chartTitle = "f(x,y) = sin(3*x)*cos(x+y)";
+            title(chartTitle);
+            colormap("spring");
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(rmfield(p.data{1}, ["colorscale" "x" "y" "z"]), struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                name = '{sin}({3} {x}) {cos}({x}+{y})', ...
+                type = "contour", ...
+                visible = true, ...
+                xtype = "array", ...
+                ytype = "array", ...
+                autocontour = false, ...
+                contours = struct( ...
+                    "end", 0.8, ...
+                    start = -1, ...
+                    size = 0.2, ...
+                    coloring = "fill" ...
+                ), ...
+                zauto = false, ...
+                zmin = -1, ...
+                zmax = 0.8, ...
+                showscale = false, ...
+                reversescale = false, ...
+                line = struct( ...
+                    width = 0.5, ...
+                    dash = "solid", ...
+                    color = "rgb(0,0,0)", ...
+                    smoothing = 0 ...
+                ), ...
+                showlegend = true ...
+            ), AbsTol=1e-2);
+        end
+
+        function testStemPlotData(tc)
+            fig = figure("Visible","off");
+            x = 1:10;
+            y = rand(10,1);
+            stem(x, y, 'filled');
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "scatter", ...
+                visible = true, ...
+                name = '', ...
+                mode = "lines+markers", ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 1, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 1, ...
+                        color = {repmat({"rgba(0,0,0,0)" "rgb(0,114,189)" "rgba(0,0,0,0)"},1,10)'} ...
+                    ), ...
+                    color = {repmat({"rgba(0,0,0,0)" "rgba(0, 0.4470, 0.7410,1)" "rgba(0,0,0,0)"},1,10)'} ...
+                ), ...
+                x = reshape([x; x; nan(1,length(x))], [], 1), ...
+                y = reshape([zeros(1,length(y)); y'; nan(1,length(y))], [], 1), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+        end
+
+        function testStackedBarData(tc)
+            fig = figure("Visible","off");
+            data = [10 20 30; 15 25 35; 5 15 25];
+            bar(1:3, data, 'stack');
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 3); % One for each stack
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "bar", ...
+                name = '', ...
+                visible = true, ...
+                orientation = "v", ...
+                x = [1 2 3], ...
+                y = [10 15 5], ...
+                marker = struct( ...
+                    color = "rgba(0,114,189,1.000000)", ...
+                    line = struct( ...
+                        color = "rgba(0,0,0,1.000000)", ...
+                        width = 0.5, ...
+                        dash = "solid" ...
+                    ) ...
+                ), ...
+                showlegend = true ...
+            ));
+            tc.verifyEqual(p.data{2}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "bar", ...
+                name = '', ...
+                visible = true, ...
+                orientation = "v", ...
+                x = [1 2 3], ...
+                y = [20 25 15], ...
+                marker = struct( ...
+                    color = "rgba(217,83,25,1.000000)", ...
+                    line = struct( ...
+                        color = "rgba(0,0,0,1.000000)", ...
+                        width = 0.5, ...
+                        dash = "solid" ...
+                    ) ...
+                ), ...
+                showlegend = true ...
+            ));
+            tc.verifyEqual(p.data{3}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "bar", ...
+                name = '', ...
+                visible = true, ...
+                orientation = "v", ...
+                x = [1 2 3], ...
+                y = [30 35 25], ...
+                marker = struct( ...
+                    color = "rgba(237,177,32,1.000000)", ...
+                    line = struct( ...
+                        color = "rgba(0,0,0,1.000000)", ...
+                        width = 0.5, ...
+                        dash = "solid" ...
+                    ) ...
+                ), ...
+                showlegend = true ...
+            ));
+        end
+
+        function testHeatmapData(tc)
+            fig = figure("Visible","off");
+            data = magic(5);
+            heatmap(data);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(rmfield(p.data{1}, "colorscale"), struct( ...
+                type = "heatmap", ...
+                x = {num2cell(num2str((1:5)'))}, ...
+                y = {num2cell(num2str(flip(1:5)'))}, ...
+                z = flip(data), ...
+                connectgaps = false, ...
+                hoverongaps = false, ...
+                hoverinfo = "text", ...
+                text = flip(data), ...
+                hoverlabel = struct( ...
+                    bgcolor = "white" ...
+                ), ...
+                showscale = true, ...
+                colorbar = struct( ...
+                    x = 0.87, ...
+                    y = 0.52, ...
+                    ypad = 55, ...
+                    xpad = 0, ...
+                    outlinecolor = "rgb(150,150,150)" ...
+                ), ...
+                visible = true, ...
+                opacity = 0.9500, ...
+                showlegend = false, ...
+                name = "" ...
+            ));
+        end
+
+        function testErrorbarData(tc)
+            fig = figure("Visible","off");
+            x = 1:10;
+            y = rand(1,10);
+            err = 0.1*ones(1,10);
+            errorbar(x,y,err);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'lines', ...
+                x = x, ...
+                y = y, ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false, ...
+                error_y = struct( ...
+                    visible = true, ...
+                    type = "data", ...
+                    symmetric = false, ...
+                    array = err, ...
+                    arrayminus = err, ...
+                    thickness = 0.5, ...
+                    width = 6, ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                error_x = struct( ...
+                    visible = true, ...
+                    type = "data", ...
+                    array = zeros(1,0), ...
+                    arrayminus = zeros(1,0), ...
+                    thickness = 0.5, ...
+                    width = 6, ...
+                    color = "rgb(0,114,189)" ...
+                ) ...
+            ), AbsTol=1e-15);
+        end
+
+        function testDoubleYAxisLinePlotData(tc)
+            fig = figure("Visible","off");
+            x = linspace(0,10);
+            y = sin(3*x);
+            yyaxis left
+            plot(x,y);
+            y2 = sin(3*x).*exp(0.5*x);
+            yyaxis right
+            plot(x,y2);
+            ylim([-150 150]);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 4);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'lines', ...
+                x = x, ...
+                y = y, ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{2}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y2", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'lines', ...
+                x = x, ...
+                y = y2, ...
+                line = struct( ...
+                    color = "rgb(217,83,25)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(217,83,25)" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+        end
+
+        function testVerticalConstantLinePlotData(tc)
+            fig = figure("Visible","off");
+            xline(1);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "scatter", ...
+                visible = true, ...
+                x = [1 1], ...
+                y = [0 1], ...
+                name = '', ...
+                mode = "lines", ...
+                line = struct( ...
+                    color = "rgb(38,38,38)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testVerticalConstantLineWithLabel(tc)
+            fig = figure("Visible","off");
+            label = "label";
+            alignment = "left";
+            width = 3;
+            xl = xline(1,'r--',label,LineWidth=width);
+            xl.LabelHorizontalAlignment = alignment;
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}.line, struct( ...
+                color = "rgb(255,0,0)", ...
+                width = width, ...
+                dash = "dash" ...
+            ));
+            tc.verifyTrue(any(cellfun(@(ann) contains(ann.text,label), p.layout.annotations)));
+            tc.verifyTrue(any(cellfun(@(ann) ann.xanchor == alignment, p.layout.annotations)));
+        end
+
+        function testStackedPlotData(tc)
+            fig = figure("Visible","off");
+            x = 1:5;
+            a = cos(x);
+            b = exp(x);
+            dt = datetime(2010,1,1) + years(x);
+            tb = table(dt',a',b',VariableNames=["date" "a" "b"]);
+            stackedplot(tb);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 3);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                visible = true, ...
+                name = 'date', ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                x = x, ...
+                y = b', ...
+                mode = "lines", ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                showlegend = false ...
+            ));
+            tc.verifyEqual(p.data{2}, struct( ...
+                type = "scatter", ...
+                visible = true, ...
+                name = 'a', ...
+                xaxis = "x1", ...
+                yaxis = "y2", ...
+                x = x, ...
+                y = a', ...
+                mode = "lines", ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ) ...
+            ));
+            tc.verifyEqual(p.data{3}, struct( ...
+                type = "scatter", ...
+                visible = true, ...
+                name = 'b', ...
+                xaxis = "x1", ...
+                yaxis = "y3", ...
+                x = x, ...
+                y = dt', ...
+                mode = "lines", ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ) ...
+            ));
+        end
+
+        function testDoubleYAxisAreaPlotData(tc)
+            fig = figure("Visible","off");
+            x = linspace(0,10);
+            y = sin(3*x);
+            yyaxis left
+            area(x,y);
+            y2 = sin(3*x).*exp(0.5*x);
+            yyaxis right
+            area(x,y2);
+            ylim([-150 150]);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 4);
+            tc.verifyEqual(p.data{1}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                type = "scatter", ...
+                x = x, ...
+                y = y, ...
+                name = '', ...
+                visible = true, ...
+                fill = "tozeroy", ...
+                mode = "lines", ...
+                line = struct( ...
+                    color = "rgba(0,0,0,1.000000)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                fillcolor = "rgba(0,114,189,1.000000)", ...
+                showlegend = true ...
+            ));
+            tc.verifyEqual(p.data{2}, struct( ...
+                xaxis = "x1", ...
+                yaxis = "y2", ...
+                type = "scatter", ...
+                x = x, ...
+                y = y2, ...
+                name = '', ...
+                visible = true, ...
+                fill = "tozeroy", ...
+                mode = "lines", ...
+                line = struct( ...
+                    color = "rgba(0,0,0,1.000000)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                fillcolor = "rgba(217,83,25,1.000000)", ...
+                showlegend = true ...
+            ));
+        end
+
+        function testBoxPlotData(tc)
+            fig = figure("Visible","off");
+            data = [0.4394; -0.0896; 1.0212; -0.8740; 0.4147];
+            boxplot(data);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 7);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = 'scatter', ...
+                mode = 'markers', ...
+                visible = true, ...
+                name = '', ...
+                xaxis = 'x1', ...
+                yaxis = 'y1', ...
+                x = [NaN NaN], ...
+                y = [NaN NaN], ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    symbol = "cross-thin-open", ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(255,0,0)" ...
+                ), ...
+                line = struct(), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{2}, struct( ...
+                type = 'scatter', ...
+                mode = 'lines', ...
+                visible = true, ...
+                name = '', ...
+                xaxis = 'x1', ...
+                yaxis = 'y1', ...
+                x = [0.9250 1.0750], ...
+                y = [0.4147 0.4147], ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(255,0,0)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(255,0,0)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{3}, struct( ...
+                type = 'scatter', ...
+                mode = 'lines', ...
+                visible = true, ...
+                name = '', ...
+                xaxis = 'x1', ...
+                yaxis = 'y1', ...
+                x = [0.9250 0.9250 1.0750 1.0750 0.9250], ...
+                y = [-0.2857 0.58485 0.58485 -0.2857 -0.2857], ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,0,255)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(0,0,255)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{4}, struct( ...
+                type = 'scatter', ...
+                mode = 'lines', ...
+                visible = true, ...
+                name = '', ...
+                xaxis = 'x1', ...
+                yaxis = 'y1', ...
+                x = [0.9625 1.0375], ...
+                y = [-0.874 -0.874], ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,0,0)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(0,0,0)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{5}, struct( ...
+                type = 'scatter', ...
+                mode = 'lines', ...
+                visible = true, ...
+                name = '', ...
+                xaxis = 'x1', ...
+                yaxis = 'y1', ...
+                x = [0.9625 1.0375], ...
+                y = [1.0212 1.0212], ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,0,0)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(0,0,0)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{6}, struct( ...
+                type = 'scatter', ...
+                mode = 'lines', ...
+                visible = true, ...
+                name = '', ...
+                xaxis = 'x1', ...
+                yaxis = 'y1', ...
+                x = [1 1], ...
+                y = [-0.874 -0.2857], ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,0,0)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(0,0,0)", ...
+                    width = 0.5, ...
+                    dash = "dash" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{7}, struct( ...
+                type = 'scatter', ...
+                mode = 'lines', ...
+                visible = true, ...
+                name = '', ...
+                xaxis = 'x1', ...
+                yaxis = 'y1', ...
+                x = [1 1], ...
+                y = [0.58485 1.0212], ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,0,0)" ...
+                ), ...
+                line = struct( ...
+                    color = "rgb(0,0,0)", ...
+                    width = 0.5, ...
+                    dash = "dash" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+        end
+
+        function testContour3PlotData(tc)
+            fig = figure("Visible","off");
+            [X,Y,Z] = peaks(25);
+            contour3(X,Y,Z,20);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(rmfield(p.data{1}, "colorscale"), struct( ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                name = '', ...
+                type = "surface", ...
+                x = X, ...
+                y = Y, ...
+                z = Z, ...
+                contours = struct( ...
+                    z = struct( ...
+                        "end", 7.314565743495028, ...
+                        start = -5.644469721095063, ...
+                        size = 0.682054498136321, ...
+                        show = true, ...
+                        usecolormap = true, ...
+                        width = 1 ...
+                    ) ...
+                ), ...
+                hidesurface = true, ...
+                visible = true, ...
+                showscale = false, ...
+                reversescale = false, ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testFunctionSurfacePlotData(tc)
+            fig = figure("Visible","off");
+            fsurf(@(x,y) sin(x).*cos(y), [-pi pi -pi pi]);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 2);
+            tc.verifyEqual(rmfield(p.data{1}, ["colorscale" "x" "y" "z" "surfacecolor"]), struct( ...
+                scene = "scene1", ...
+                type = "surface", ...
+                opacity = 1, ...
+                name = '{sin}({x}) {cos}({y})', ...
+                showscale = false, ...
+                visible = true, ...
+                showlegend = true ...
+            ));
+            tc.verifyEqual(rmfield(p.data{2}, ["x" "y" "z"]), struct( ...
+                scene = "scene1", ...
+                type = "scatter3d", ...
+                mode = "lines", ...
+                line = struct( ...
+                    color = "rgb(0,0,0)", ...
+                    width = 1.5, ...
+                    dash = "solid" ...
+                ), ...
+                name = '{sin}({x}) {cos}({y})', ...
+                showscale = false, ...
+                visible = true ...
+            ));
+        end
+
+        function testIsosurfacePlotData(tc)
+            fig = figure("Visible","off");
+            [X,Y,Z] = meshgrid(linspace(-1,1,20),linspace(-1,1,20),linspace(-1,1,20));
+            V = X.^2 + Y.^2 + Z.^2;
+            isosurface(X,Y,Z,V,0.5);
+
+            plotData = fig.Children.Children(2);
+            p = plotlyfig(fig,"visible","off","treatAs",'isosurface');
+
+            tc.verifyNumElements(p.data, 1);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "mesh3d", ...
+                name = '', ...
+                showscale = false, ...
+                x = plotData.Vertices(:,1), ...
+                y = plotData.Vertices(:,2), ...
+                z = plotData.Vertices(:,3), ...
+                i = plotData.Faces(:,1) - 1, ...
+                j = plotData.Faces(:,2) - 1, ...
+                k = plotData.Faces(:,3) - 1, ...
+                color = "rgb(16,190,186)", ...
+                lighting = struct( ...
+                    diffuse = 0.6, ...
+                    ambient = 0.3, ...
+                    specular = 0.9, ...
+                    roughness = 0.2, ...
+                    fresnel = 0.5, ...
+                    vertexnormalsepsilon = 1e-12, ...
+                    facenormalsepsilon = 1e-06 ...
+                ), ...
+                scene = "scene1", ...
+                showlegend = false ...
+            ));
+        end
+
+        function testScatterHistPlotData(tc)
+            fig = figure("Visible","off");
+            x = [0.15 0.19 0.04 0.64 0.28 0.54 0.70 0.50 0.54 0.45];
+            y = [0.12 0.49 0.85 0.87 0.27 0.21 0.56 0.64 0.42 0.21];
+            scatterhist(x,y);
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 3);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                visible = true, ...
+                name = '', ...
+                mode = 'markers', ...
+                x = x, ...
+                y = y, ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgb(0,114,189)" ...
+                    ), ...
+                    color = "rgba(0,0,0,0)" ...
+                ), ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{2}, struct( ...
+                xaxis = "x2", ...
+                yaxis = "y2", ...
+                type = "bar", ...
+                name = '', ...
+                x = [0.8 1.2], ...
+                width = [0.5 0.5], ...
+                y = [0.25 0.75], ...
+                orientation = "h", ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)" ...
+                    ), ...
+                    color = "rgba(0,114,189,0.600000)" ...
+                ), ...
+                opacity = 0.75, ...
+                visible = true, ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{3}, struct( ...
+                xaxis = "x3", ...
+                yaxis = "y3", ...
+                type = "bar", ...
+                name = '', ...
+                x = [0.15 0.45 0.75], ...
+                width = [0.3 0.3 0.3], ...
+                y = [4/3 4/3 2/3], ...
+                marker = struct( ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgba(0,0,0,1.000000)" ...
+                    ), ...
+                    color = "rgba(0,114,189,0.600000)" ...
+                ), ...
+                opacity = 0.75, ...
+                visible = true, ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+        end
+
+        function testGroupedKernelScatterHistPlotData(tc)
+            fig = figure("Visible","off");
+            x = [0.15 0.19 0.04 0.64 0.28 0.54 0.70 0.50 0.54 0.45];
+            y = [0.12 0.49 0.85 0.87 0.27 0.21 0.56 0.64 0.42 0.21];
+            species = [repelem("setosa",4) repelem("versicolor",4) repelem("virginica",2)]';
+
+            scatterhist(x,y,"Group",species,"Kernel","on");
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyNumElements(p.data, 12);
+            tc.verifyEqual(p.data{1}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                visible = true, ...
+                name = 'setosa', ...
+                mode = 'markers', ...
+                x = x(species == "setosa"), ...
+                y = y(species == "setosa"), ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgb(0,114,189)" ...
+                    ), ...
+                    color = "rgba(0,0,0,0)" ...
+                ), ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{2}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                visible = true, ...
+                name = 'versicolor', ...
+                mode = 'markers', ...
+                x = x(species == "versicolor"), ...
+                y = y(species == "versicolor"), ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgb(217,83,25)" ...
+                    ), ...
+                    color = "rgba(0,0,0,0)" ...
+                ), ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{3}, struct( ...
+                type = "scatter", ...
+                xaxis = "x1", ...
+                yaxis = "y1", ...
+                visible = true, ...
+                name = 'virginica', ...
+                mode = 'markers', ...
+                x = x(species == "virginica"), ...
+                y = y(species == "virginica"), ...
+                line = struct(), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    symbol = "circle", ...
+                    line = struct( ...
+                        width = 0.5, ...
+                        color = "rgb(237,177,32)" ...
+                    ), ...
+                    color = "rgba(0,0,0,0)" ...
+                ), ...
+                showlegend = true ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{4}, []);
+            tc.verifyEqual(p.data{5}, struct( ...
+                type = "scatter", ...
+                xaxis = "x3", ...
+                yaxis = "y3", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = fig.Children(3).Children(4).XData, ...
+                y = fig.Children(3).Children(4).YData, ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 2, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 2 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{6}, struct( ...
+                type = "scatter", ...
+                xaxis = "x3", ...
+                yaxis = "y3", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = fig.Children(3).Children(3).XData, ...
+                y = fig.Children(3).Children(3).YData, ...
+                line = struct( ...
+                    color = "rgb(217,83,25)", ...
+                    width = 2, ...
+                    dash = "dot" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 2 ...
+                    ), ...
+                    color = "rgb(217,83,25)" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{7}, struct( ...
+                type = "scatter", ...
+                xaxis = "x3", ...
+                yaxis = "y3", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = fig.Children(3).Children(2).XData, ...
+                y = fig.Children(3).Children(2).YData, ...
+                line = struct( ...
+                    color = "rgb(237,177,32)", ...
+                    width = 2, ...
+                    dash = "dashdot" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 2 ...
+                    ), ...
+                    color = "rgb(237,177,32)" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{8}, struct( ...
+                type = "scatter", ...
+                xaxis = "x3", ...
+                yaxis = "y3", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = [0.045 0.945], ...
+                y = [0 0], ...
+                line = struct( ...
+                    color = "rgb(0,0,0)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,0,0)" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{9}, struct( ...
+                type = "scatter", ...
+                xaxis = "x4", ...
+                yaxis = "y4", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = fig.Children(2).Children(4).XData, ...
+                y = fig.Children(2).Children(4).YData, ...
+                line = struct( ...
+                    color = "rgb(0,114,189)", ...
+                    width = 2, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 2 ...
+                    ), ...
+                    color = "rgb(0,114,189)" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{10}, struct( ...
+                type = "scatter", ...
+                xaxis = "x4", ...
+                yaxis = "y4", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = fig.Children(2).Children(3).XData, ...
+                y = fig.Children(2).Children(3).YData, ...
+                line = struct( ...
+                    color = "rgb(217,83,25)", ...
+                    width = 2, ...
+                    dash = "dot" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 2 ...
+                    ), ...
+                    color = "rgb(217,83,25)" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{11}, struct( ...
+                type = "scatter", ...
+                xaxis = "x4", ...
+                yaxis = "y4", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = fig.Children(2).Children(2).XData, ...
+                y = fig.Children(2).Children(2).YData, ...
+                line = struct( ...
+                    color = "rgb(237,177,32)", ...
+                    width = 2, ...
+                    dash = "dashdot" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 2 ...
+                    ), ...
+                    color = "rgb(237,177,32)" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+            tc.verifyEqual(p.data{12}, struct( ...
+                type = "scatter", ...
+                xaxis = "x4", ...
+                yaxis = "y4", ...
+                name = '', ...
+                mode = 'lines', ...
+                x = [-0.026 0.766], ...
+                y = [0 0], ...
+                line = struct( ...
+                    color = "rgb(0,0,0)", ...
+                    width = 0.5, ...
+                    dash = "solid" ...
+                ), ...
+                marker = struct( ...
+                    size = 3.6, ...
+                    line = struct( ...
+                        width = 0.5 ...
+                    ), ...
+                    color = "rgb(0,0,0)" ...
+                ), ...
+                visible = true, ...
+                showlegend = false ...
+            ), AbsTol=1e-15);
+        end
+
+        function testTitleFont(tc)
+            fig = figure("Visible","off");
+            x = 1:10;
+            y = x;
+            plot(x,y);
+            title("Custom Title","FontSize",24,"Color","g","FontName","Arial");
+
+            p = plotlyfig(fig,"visible","off");
+
+            annotation = p.layout.annotations{1};
+            tc.verifyEqual(annotation.text, "<b><b>Custom Title</b></b>");
+            tc.verifyEqual(annotation.font, struct( ...
+                color = "rgb(0,255,0)", ...
+                family = "Arial, sans-serif", ...
+                size = 24 ...
+            ));
+        end
+
+        function testAxisLabelSizeFont(tc)
+            fig = figure("Visible","off");
+            x = 1:10;
+            y = x;
+            plot(x,y);
+            xlabel("X Label","FontSize",20,"Color","b", ...
+                    FontName ="Comic Sans MS");
+            ylabel("Y Label","FontSize",20,"Color","r", ...
+                    FontName ="Comic Sans MS");
+
+            p = plotlyfig(fig,"visible","off");
+
+            tc.verifyEqual(p.layout.xaxis1.title, 'X Label');
+            tc.verifyEqual(p.layout.xaxis1.titlefont, struct( ...
+                color = "rgb(0,0,255)", ...
+                size = 20, ...
+                family = "Droid Sans, sans-serif" ...
+            ));
+            tc.verifyEqual(p.layout.yaxis1.title, 'Y Label');
+            tc.verifyEqual(p.layout.yaxis1.titlefont, struct( ...
+                color = "rgb(255,0,0)", ...
+                size = 20, ...
+                family = "Droid Sans, sans-serif" ...
+            ));
+        end
+    end
+end
diff --git a/plotly/addtheme.m b/plotly/addtheme.m
index 56e50f4c..e7aed3b3 100644
--- a/plotly/addtheme.m
+++ b/plotly/addtheme.m
@@ -26,16 +26,14 @@
         throw(ME)
     end
 
-    %---------------------------------------------------------------------%
-        
     %-add theme to figure-%
-    
+
     fname = sprintf('%s/%s.json', themePath, theme);
     % fname = strcat('plotly/themes/', theme, '.json');
-    fid = fopen(fname); 
-    raw = fread(fid,inf); 
-    str = char(raw'); 
-    fclose(fid); 
+    fid = fopen(fname);
+    raw = fread(fid,inf);
+    str = char(raw');
+    fclose(fid);
     theme_template = jsondecode(str);
 
     f.layout.template = theme_template;
@@ -44,7 +42,7 @@
         disp(strcat('layout.bg_paper:::',...
             f.layout.template.layout.paper_bgcolor))
     end
-    
+
     if isfield(f.layout.template.layout, 'plot_bgcolor')
         disp(strcat('layout.plot_bgcolor:::',...
             f.layout.template.layout.plot_bgcolor))
diff --git a/plotly/export_fig2/export_fig2.m b/plotly/export_fig2/export_fig2.m
old mode 100755
new mode 100644
index 5ab72a1f..be5df46c
--- a/plotly/export_fig2/export_fig2.m
+++ b/plotly/export_fig2/export_fig2.m
@@ -1,21 +1,13 @@
 function export_fig2(fig, beautify, filename, format)
-
-%----INPUT----% 
-% fig: handle of figure to be converted
-% beautify: binary flag 1 = use Plotly defaults, 0 = use MATLAB defaults
-% fielname: name of file to be saved to specified directory
-% format: one of 'png' (default), 'pdf', 'jpeg', 'svg'
-
-%-------------------------------------------------------------------------%
-
-%--CONSTRUCT PLOTLY FIGURE OBJECT--%
-p = plotlyfig(fig, 'strip', beautify);
-
-%-------------------------------------------------------------------------%
-
-%----SAVE IMAGE-----%
-saveplotlyfig(p, filename, format);
-
-%-------------------------------------------------------------------------%
-
-end
\ No newline at end of file
+    %----INPUT----%
+    % fig: handle of figure to be converted
+    % beautify: binary flag 1 = use Plotly defaults, 0 = use MATLAB defaults
+    % filename: name of file to be saved to specified directory
+    % format: one of 'png' (default), 'pdf', 'jpeg', 'svg'
+
+    %--CONSTRUCT PLOTLY FIGURE OBJECT--%
+    p = plotlyfig(fig, 'strip', beautify);
+
+    %----SAVE IMAGE-----%
+    saveplotlyfig(p, filename, format);
+end
diff --git a/plotly/fig2plotly.m b/plotly/fig2plotly.m
index 660135ac..1dc04214 100644
--- a/plotly/fig2plotly.m
+++ b/plotly/fig2plotly.m
@@ -31,16 +31,14 @@
 
     % For full documentation and examples, see https://plot.ly/matlab
 
-    %---------------------------------------------------------------------%
-
     %--FIGURE INITIALIZATION--%
     if nargin == 0
-        varargin{1} = gcf; 
+        varargin{1} = gcf;
     end
 
     %--CONSTRUCT PLOTLY FIGURE OBJECT--%
     p = plotlyfig(varargin{:});
 
     %--MAKE CALL TO PLOTLY--%
-    p.plotly; 
+    p.plotly;
 end
diff --git a/plotly/getplotlyfig.m b/plotly/getplotlyfig.m
index da4f95b6..56bc018f 100644
--- a/plotly/getplotlyfig.m
+++ b/plotly/getplotlyfig.m
@@ -10,12 +10,10 @@
     % p - plotlyfig object
     % [EXAMPLE]:
     % url: https://plot.ly/~demos/1526
-    % fig = getplotlyfig('demos','1526'); 
+    % fig = getplotlyfig('demos','1526');
     % [ADDITIONAL RESOURCES]:
     % For full documentation and examples, see
     % https://plot.ly/matlab/get-requests/
-    %---------------------------------------------------------------------%
-
     %--CONSTRUCT PLOTLY FIGURE OBJECT--%
     p = plotlyfig('Visible','off');
 
diff --git a/plotly/kaleido/.gitignore b/plotly/kaleido/.gitignore
index c96a04f0..d6b7ef32 100644
--- a/plotly/kaleido/.gitignore
+++ b/plotly/kaleido/.gitignore
@@ -1,2 +1,2 @@
 *
-!.gitignore
\ No newline at end of file
+!.gitignore
diff --git a/plotly/plotly_aux/cell2json.m b/plotly/plotly_aux/cell2json.m
index 2047dddb..35d543c5 100644
--- a/plotly/plotly_aux/cell2json.m
+++ b/plotly/plotly_aux/cell2json.m
@@ -1,4 +1,4 @@
 function str = cell2json(s)
-	strList = string(cellfun(@m2json, s, un=0));
+	strList = string(cellfun(@m2json, s, 'un', 0));
 	str = sprintf("[%s]", strjoin(strList, ", "));
 end
diff --git a/plotly/plotly_aux/checkescape.m b/plotly/plotly_aux/checkescape.m
index c118df7c..fe67e7db 100644
--- a/plotly/plotly_aux/checkescape.m
+++ b/plotly/plotly_aux/checkescape.m
@@ -9,7 +9,7 @@
             ind(1) = [];
         end
         if ind
-            val = [val ec(ones(1,length(ind)))]; %extend lengh of val to prep for char shifts.
+            val = [val ec(ones(1,length(ind)))]; %extend length of val to prep for char shifts.
             for i = 1:length(ind)
                 val(ind(i):end) = [ec val(ind(i):end-1)];
                 ind = ind+1;
diff --git a/plotly/plotly_aux/makecall.m b/plotly/plotly_aux/makecall.m
index 6c070de1..a8ae15e9 100644
--- a/plotly/plotly_aux/makecall.m
+++ b/plotly/plotly_aux/makecall.m
@@ -14,16 +14,16 @@
 
     platform = 'MATLAB';
 
-    url = [domain '/clientresp'];
-    payload = struct( ...
-            platform=platform, ...
-            version=plotly_version, ...
-            args=args, ...
-            un=un, ...
-            key=key, ...
-            origin=origin, ...
-            kwargs=kwargs ...
-     );
+    url = [domain '/clientresp/'];
 
-    st = webwrite(url, payload);
+    st = webwrite( ...
+            url, ...
+            'platform',platform, ...
+            'version',plotly_version, ...
+            'args',m2json(args), ...
+            'un',un, ...
+            'key',key, ...
+            'origin',origin, ...
+            'kwargs',m2json(kwargs) ...
+    );
 end
diff --git a/plotly/plotly_aux/plotly.m b/plotly/plotly_aux/plotly.m
index 12a275a1..17a5ce4b 100644
--- a/plotly/plotly_aux/plotly.m
+++ b/plotly/plotly_aux/plotly.m
@@ -16,7 +16,7 @@
     if isstruct(varargin{end})
         structargs = varargin{end};
         f = fieldnames(structargs);
-        
+
         idx = cellfun(@(x) strcmpi(x, 'offline'), f);
         if sum(idx) == 1
             offline = structargs.(f{idx});
@@ -36,14 +36,14 @@
         if ~any(strcmpi('fileopt',f))
             structargs.fileopt = NaN;
         end
-        
+
         idx = cellfun(@(x) strcmpi(x, 'writefile'),f);
         if sum(idx) == 1
             writeFile=structargs.(f{idx});
         end
-        
+
         args = varargin(1:(end-1));
-        
+
     else
         if offline_given
             structargs = struct('filename', 'untitled', 'fileopt', NaN);
diff --git a/plotly/plotly_aux/plotlygenimage.m b/plotly/plotly_aux/plotlygenimage.m
index 8a89968e..061738cb 100644
--- a/plotly/plotly_aux/plotlygenimage.m
+++ b/plotly/plotly_aux/plotlygenimage.m
@@ -23,7 +23,7 @@ function plotlygenimage(figure_or_data, filename, varargin)
         figure = struct('data', data);
     end
 
-    payload = struct(figure=figure, format=format);
+    payload = struct('figure',figure,'format',format);
 
     [un, key, domain] = signin;
 
diff --git a/plotly/plotly_aux/rangeLength.m b/plotly/plotly_aux/rangeLength.m
new file mode 100644
index 00000000..07118934
--- /dev/null
+++ b/plotly/plotly_aux/rangeLength.m
@@ -0,0 +1,3 @@
+function out = rangeLength(x)
+    out = max(x) - min(x);
+end
diff --git a/plotly/plotly_aux/struct2json.m b/plotly/plotly_aux/struct2json.m
index 0fb67692..8572d3d7 100644
--- a/plotly/plotly_aux/struct2json.m
+++ b/plotly/plotly_aux/struct2json.m
@@ -1,5 +1,5 @@
 function str = struct2json(s)
     f = fieldnames(s);
-    strList = cellfun(@(x) sprintf('"%s" : %s', x, m2json(s.(x))), f, un=0);
+    strList = cellfun(@(x) sprintf('"%s" : %s', x, m2json(s.(x))), f, 'un', 0);
     str = sprintf("{%s}", strjoin(strList, ", "));
 end
diff --git a/plotly/plotly_aux/validatedir.m b/plotly/plotly_aux/validatedir.m
index bcf2752a..7fe19560 100644
--- a/plotly/plotly_aux/validatedir.m
+++ b/plotly/plotly_aux/validatedir.m
@@ -3,8 +3,8 @@ function validatedir(status, mess, messid, filename)
     if (status == 0)
         if (~strcmp(messid, 'MATLAB:MKDIR:DirectoryExists'))
             error(['Error saving %s folder: ' mess ', ' messid ...
-                   '. Please contact support@plot.ly for assistance.'], ... 
-                   filename);           
+                   '. Please contact support@plot.ly for assistance.'], ...
+                   filename);
         end
     end
 end
diff --git a/plotly/plotly_help_aux/updateplotlyhelp.m b/plotly/plotly_help_aux/updateplotlyhelp.m
index c01e5cc6..dbbcb97a 100644
--- a/plotly/plotly_help_aux/updateplotlyhelp.m
+++ b/plotly/plotly_help_aux/updateplotlyhelp.m
@@ -20,18 +20,16 @@
     %----------------------MATLAB SPECIFIC TWEAKS-------------------------%
 
     %-key_type changes-%
-    pr.annotation.xref.key_type = 'plot_info'; 
-    pr.annotation.yref.key_type = 'plot_info'; 
-    pr.line.shape.key_type = 'plot_info'; 
-
-    %---------------------------------------------------------------------%
+    pr.annotation.xref.key_type = 'plot_info';
+    pr.annotation.yref.key_type = 'plot_info';
+    pr.line.shape.key_type = 'plot_info';
 
     % save directory
-    helpdir = fullfile(fileparts(which('updateplotlyhelp')), 'plotly_reference'); 
+    helpdir = fullfile(fileparts(which('updateplotlyhelp')), 'plotly_reference');
 
-    % pr filename 
-    prname = fullfile(helpdir); 
+    % pr filename
+    prname = fullfile(helpdir);
 
     %----save----%
-    save(prname, 'pr'); 
-end
\ No newline at end of file
+    save(prname, 'pr');
+end
diff --git a/plotly/plotly_offline_aux/getplotlyoffline.m b/plotly/plotly_offline_aux/getplotlyoffline.m
index 98fd6871..c1698eb1 100644
--- a/plotly/plotly_offline_aux/getplotlyoffline.m
+++ b/plotly/plotly_offline_aux/getplotlyoffline.m
@@ -8,30 +8,30 @@ function getplotlyoffline(plotly_bundle_url)
         rethrow(exception);
     end
 
-    % create Plotly config folder 
+    % create Plotly config folder
     userhome = getuserdir();
     plotly_config_folder = fullfile(userhome, '.plotly');
     [status, mess, messid] = mkdir(plotly_config_folder);
-    validatedir(status, mess, messid, 'plotly'); 
+    validatedir(status, mess, messid, 'plotly');
 
     % create plotlyjs folder
     plotly_js_folder = fullfile(plotly_config_folder, 'plotlyjs');
     [status, mess, messid] = mkdir(plotly_js_folder);
-    validatedir(status, mess, messid, 'plotlyjs');  
+    validatedir(status, mess, messid, 'plotlyjs');
 
     % save bundle
     bundle = escapechars(plotly_bundle);
-    bundle_name = 'plotly-matlab-offline-bundle.js'; 
-    bundle_file = fullfile(plotly_js_folder, bundle_name); 
-    file_id = fopen(bundle_file, 'w'); 
+    bundle_name = 'plotly-matlab-offline-bundle.js';
+    bundle_file = fullfile(plotly_js_folder, bundle_name);
+    file_id = fopen(bundle_file, 'w');
     fprintf(file_id, '%s', bundle);
-    fclose(file_id); 
-    
-    % success! 
+    fclose(file_id);
+
+    % success!
     fprintf(['\nSuccess! You can now generate offline ', ...
              'graphs.\nTo generate online graphs, run ', ...
              'plotlysetup_online(username, api_key) ', ...
              '\nand use the ''offline'' flag of fig2plotly as ', ...
-             'follows:\n\n>> plot(1:10); fig2plotly(gcf, ', ... 
+             'follows:\n\n>> plot(1:10); fig2plotly(gcf, ', ...
              '''offline'', false);\n\n'])
 end
diff --git a/plotly/plotly_offline_aux/plotlyoffline.m b/plotly/plotly_offline_aux/plotlyoffline.m
index 32f4c347..94dc1121 100644
--- a/plotly/plotly_offline_aux/plotlyoffline.m
+++ b/plotly/plotly_offline_aux/plotlyoffline.m
@@ -1,8 +1,8 @@
 function response = plotlyoffline(plotlyfig)
-    % Generate offline Plotly figure saved as an html file within 
-    % the current working directory. The file will be saved as: 
-    % 'plotlyfig.PlotOptions.FileName'.html. 
-    
+    % Generate offline Plotly figure saved as an html file within
+    % the current working directory. The file will be saved as:
+    % 'plotlyfig.PlotOptions.FileName'.html.
+
     % create dependency string unless not required
     if plotlyfig.PlotOptions.IncludePlotlyjs
         % grab the bundled dependencies
@@ -27,33 +27,33 @@
     else
         depScript = '';
     end
-    
+
     % handle plot div specs
-    id = char(java.util.UUID.randomUUID); 
+    id = char(java.util.UUID.randomUUID);
     width = plotlyfig.layout.width + "px";
     height = plotlyfig.layout.height + "px";
-    
+
     if plotlyfig.PlotOptions.ShowLinkText
-        linkText = plotlyfig.PlotOptions.LinkText;   
+        linkText = plotlyfig.PlotOptions.LinkText;
     else
-        linkText = ''; 
+        linkText = '';
     end
-    
+
     % format the data and layout
-    jData = m2json(plotlyfig.data); 
+    jData = m2json(plotlyfig.data);
     jLayout = m2json(plotlyfig.layout);
-    jFrames = m2json(plotlyfig.frames); 
-    clean_jData = escapechars(jData); 
+    jFrames = m2json(plotlyfig.frames);
+    clean_jData = escapechars(jData);
     clean_jLayout = escapechars(jLayout);
-    clean_jFrames = escapechars(jFrames); 
-                     
-    % template environment vars        
+    clean_jFrames = escapechars(jFrames);
+
+    % template environment vars
     plotlyDomain = plotlyfig.UserData.PlotlyDomain;
     envScript = sprintf(['<script type="text/javascript">', ...
             'window.PLOTLYENV=window.PLOTLYENV || {};', ...
             'window.PLOTLYENV.BASE_URL="%s";Plotly.LINKTEXT="%s";', ...
-            '</script>'], plotlyDomain, linkText); 
-    
+            '</script>'], plotlyDomain, linkText);
+
     % template Plotly.plot
     script = sprintf(['\n Plotly.plot("%s", {\n"data": %s,' ...
             '\n"layout": %s,\n"frames": %s\n}).then(function(){'...
@@ -66,28 +66,28 @@
             'width: %s;" class="plotly-graph-div"></div> \n', ...
             '<script type="text/javascript">%s \n</script>'], ...
             id, height, width, script);
-    
+
     % template entire script
-    offlineScript = [depScript envScript plotlyScript]; 
-    filename = plotlyfig.PlotOptions.FileName; 
+    offlineScript = [depScript envScript plotlyScript];
+    filename = plotlyfig.PlotOptions.FileName;
     if iscellstr(filename)
         filename = sprintf('%s ', filename{:});
     end
-    
+
     % remove the whitespace from the filename
-    cleanFilename = filename(filename~=' '); 
+    cleanFilename = filename(filename~=' ');
     htmlFilename = [cleanFilename '.html'];
-    
+
     % save the html file in the working directory
     plotlyOfflineFile = fullfile(plotlyfig.PlotOptions.SaveFolder, ...
-            htmlFilename); 
+            htmlFilename);
     fileID = fopen(plotlyOfflineFile, 'w');
-    fprintf(fileID, offlineScript); 
-    fclose(fileID); 
-    
+    fprintf(fileID, offlineScript);
+    fclose(fileID);
+
     % remove any whitespace from the plotlyOfflineFile path
-    plotlyOfflineFile = strrep(plotlyOfflineFile, ' ', '%20'); 
-    
+    plotlyOfflineFile = strrep(plotlyOfflineFile, ' ', '%20');
+
     % return the local file url to be rendered in the browser
-    response = ['file:///' plotlyOfflineFile]; 
+    response = ['file:///' plotlyOfflineFile];
 end
diff --git a/plotly/plotly_setup_aux/addplotlystartup.m b/plotly/plotly_setup_aux/addplotlystartup.m
index 3f13ffbe..dbacdebd 100644
--- a/plotly/plotly_setup_aux/addplotlystartup.m
+++ b/plotly/plotly_setup_aux/addplotlystartup.m
@@ -1,12 +1,12 @@
 function [warnings] = addplotlystartup(startupPaths)
-    %[1]looks at statup.m files specified by the entries of startupPaths
+    %[1]looks at startup.m files specified by the entries of startupPaths
     %[2]appends the addplotly function to startup.m files (if not already
     % present)
     %[3]checks for other plotly addpath calls within any startup.m and
     % outputs warning
 
     %output warnings
-    warnings = cell(size(startupPaths)); 
+    warnings = cell(size(startupPaths));
 
     for locs = 1:size(startupPaths,1);
         %addpath string for Plotly API
@@ -50,9 +50,9 @@
             warnings{locs} = ['\n[WARNING]: \n\nWe found an addpath ' ...
                     'specification for another version of Plotly at: ' ...
                     '\n\n' startupPaths{locs} '\n\nyou may be forcing ' ...
-                    'MATLAB to look for an older version of Plotly!\n\n']; 
+                    'MATLAB to look for an older version of Plotly!\n\n'];
         else
-            warnings{locs} = ''; 
+            warnings{locs} = '';
         end
         fclose(currentStartupID);
     end
diff --git a/plotly/plotly_setup_aux/plotlycleanup.m b/plotly/plotly_setup_aux/plotlycleanup.m
index 35d0b47b..12fab9f4 100644
--- a/plotly/plotly_setup_aux/plotlycleanup.m
+++ b/plotly/plotly_setup_aux/plotlycleanup.m
@@ -27,21 +27,21 @@
     plotlyToolboxDir = fullfile(matlabroot,'toolbox','plotly');
 
     % find the location of all plotly/ directories
-    dircount = 1; 
+    dircount = 1;
     for d = 1:length(plotlyScriptDirs)
         %parse filepath string at the Plotly directory
         plotlyLoc = strfind(fileparts(plotlyScriptDirs{d}), ...
                 fullfile('MATLAB-api-master','plotly'));
         plotlyToolboxLoc = strfind(fileparts(plotlyScriptDirs{d}), ...
-                plotlyToolboxDir); 
+                plotlyToolboxDir);
         if ~isempty(plotlyLoc)
             plotlyDirs{dircount} = fullfile( ...
                     plotlyScriptDirs{d}(1:plotlyLoc-1), ...
                     'MATLAB-api-master','plotly');
-            dircount = dircount + 1; 
+            dircount = dircount + 1;
         elseif ~isempty(plotlyToolboxLoc)
             plotlyDirs{dircount} = plotlyToolboxDir;
-            dircount = dircount + 1; 
+            dircount = dircount + 1;
         end
     end
 
@@ -49,34 +49,34 @@
         % add plotlydirs to searchpath (will be removed in future once
         % handled by plotlyupdate)
         addpath(genpath(plotlyDirs{d}));
-        
+
         % delete files from plotly directory
         removefiles = fullfile(plotlyDirs{d}, REMOVEFILES);
-        
+
         for f = 1:length(removefiles)
             % remove removefiles filepath from searchpath
             rmpath(fileparts(removefiles{f}));
-            
+
             if exist(removefiles{f},'file')
                 delete(removefiles{f});
                 % update removed list
                 removed = [removed removefiles{f}];
             end
-            
+
             % add removefiles filepath back to searchpath
             addpath(fileparts(removefiles{f}));
         end
 
         % remove folders from plotly directory
         removefolders = fullfile(plotlyDirs{d},REMOVEFOLDERS);
-        
+
         for f = 1:length(removefolders)
             if ~exist(removefolders{f}, 'dir')
                 continue
             end
             %remove folder from path
             rmpath(genpath(removefolders{f}));
-            
+
             %delete folder/subfolders
             try
                 status = rmdir(removefolders{f},'s');
@@ -92,6 +92,6 @@
                 % update removed list
                 removed = [removed removefolders{f}];
             end
-        end   
+        end
     end
 end
diff --git a/plotly/plotly_user_aux/saveplotlyconfig.m b/plotly/plotly_user_aux/saveplotlyconfig.m
index 45f99715..b8c4da5d 100644
--- a/plotly/plotly_user_aux/saveplotlyconfig.m
+++ b/plotly/plotly_user_aux/saveplotlyconfig.m
@@ -4,11 +4,11 @@ function saveplotlyconfig(plotly_domain,plotly_streaming_domain)
     % in ~/.plotly/.config
 
     % catch missing input arguments
-    if nargin < 1 
+    if nargin < 1
         error('plotly:saveconfig', ['Incorrect number of inputs. ' ...
                 'Please save your configuration as follows: >> ' ...
                 'saveplotlyconfig(plotly_domain,[optional]' ...
-                'plotly_streaming_domain)']); 
+                'plotly_streaming_domain)']);
     end
 
     % if the config file exists, then load it up
@@ -43,8 +43,8 @@ function saveplotlyconfig(plotly_domain,plotly_streaming_domain)
                 'Get in touch at chris@plot.ly for support.']);
     end
 
-    % get user credenitals 
-    [username, api_key] = signin; 
+    % get user credenitals
+    [username, api_key] = signin;
 
     switch nargin
         case 1
diff --git a/plotly/plotly_user_aux/saveplotlycredentials.m b/plotly/plotly_user_aux/saveplotlycredentials.m
index f35054ff..5801da6e 100644
--- a/plotly/plotly_user_aux/saveplotlycredentials.m
+++ b/plotly/plotly_user_aux/saveplotlycredentials.m
@@ -8,7 +8,7 @@ function saveplotlycredentials(username, api_key, stream_ids)
         error('plotly:savecredentials', ['Incorrect number of inputs. ' ...
                 'Please save your credentials as follows: >> ' ...
                 'saveplotlycredentials(username, api_key,[optional]' ...
-                'stream_ids)']); 
+                'stream_ids)']);
     end
 
     % if the credentials file exists, then load it up
diff --git a/plotly/plotly_user_aux/signin.m b/plotly/plotly_user_aux/signin.m
index 2a71ed82..abb2ff66 100644
--- a/plotly/plotly_user_aux/signin.m
+++ b/plotly/plotly_user_aux/signin.m
@@ -27,7 +27,7 @@
             try
                 config = loadplotlyconfig();
                 PLOTLY_DOMAIN = config.plotly_domain;
-            catch 
+            catch
                 % fails cuz either creds haven't been written yet
                 % or because plotly_domain wasn't a key in the
                 % creds file.
diff --git a/plotly/plotlyfig.m b/plotly/plotlyfig.m
index f0a7353c..1387aaf0 100644
--- a/plotly/plotlyfig.m
+++ b/plotly/plotlyfig.m
@@ -1,9 +1,8 @@
 classdef plotlyfig < handle
-    %----CLASS PROPERTIES----%
     properties
         data; % data of the plot
-        layout;  % layout of the plot
-        frames;  % for animations
+        layout; % layout of the plot
+        frames; % for animations
         url; % url response of making post request
         error; % error response of making post request
         warning; % warning response of making post request
@@ -11,23 +10,21 @@
     end
 
     properties (SetObservable)
-        UserData;% credentials/configuration/verbose
+        UserData; % credentials/configuration/verbose
         PlotOptions; % filename,fileopt,world_readable
     end
 
     properties (Hidden = true)
-        PlotlyDefaults; % plotly specific conversion defualts
+        PlotlyDefaults; % plotly specific conversion defaults
         State; % state of plot (FIGURE/AXIS/PLOTS)
     end
 
     properties (Access = private)
         PlotlyReference; % load the plotly reference
-        InitialState; % inital userdata
+        InitialState; % initial userdata
     end
 
-    %----CLASS METHODS----%
     methods
-        %----CONSTRUCTOR---%
         function obj = plotlyfig(varargin)
             %-Core-%
             obj.data = {};
@@ -37,38 +34,38 @@
 
             obj.UserData.Verbose = true;
 
-            %-PlotOptions-%
-            obj.PlotOptions.CleanFeedTitle = true; 
-            obj.PlotOptions.FileName = '';
-            obj.PlotOptions.FileOpt = 'new';
-            obj.PlotOptions.WorldReadable = true;
-            obj.PlotOptions.ShowURL = true;
-            obj.PlotOptions.OpenURL = true;
-            obj.PlotOptions.Strip = false;
-            obj.PlotOptions.WriteFile = true;
-            obj.PlotOptions.Visible = 'on';
-            obj.PlotOptions.TriangulatePatch = false;
-            obj.PlotOptions.StripMargins = false;
-            obj.PlotOptions.TreatAs = {'_'};
-            obj.PlotOptions.Image3D = false;
-            obj.PlotOptions.ContourProjection = false;
-            obj.PlotOptions.AxisEqual = false;
-            obj.PlotOptions.AspectRatio = [];
-            obj.PlotOptions.CameraEye = [];
-            obj.PlotOptions.is_headmap_axis = false;
-            obj.PlotOptions.FrameDuration = 1;      % in ms.
-            obj.PlotOptions.FrameTransitionDuration = 0;      % in ms.
-            obj.PlotOptions.geoRenderType = 'geo';
-            obj.PlotOptions.DomainFactor = [1 1 1 1];
+            obj.PlotOptions = struct( ...
+                "CleanFeedTitle", true, ...
+                "FileName", '', ...
+                "FileOpt", 'new', ...
+                "WorldReadable", true, ...
+                "ShowURL", true, ...
+                "OpenURL", true, ...
+                "Strip", false, ...
+                "WriteFile", true, ...
+                "Visible", 'on', ...
+                "TriangulatePatch", false, ...
+                "StripMargins", false, ...
+                "TreatAs", {{'_'}}, ...
+                "Image3D", false, ...
+                "ContourProjection", false, ...
+                "AxisEqual", false, ...
+                "AspectRatio", [], ...
+                "CameraEye", [], ...
+                "is_headmap_axis", false, ...
+                "FrameDuration", 1, ... % in ms.
+                "FrameTransitionDuration", 0, ... % in ms.
+                "geoRenderType", 'geo', ...
+                "DomainFactor", [1 1 1 1] ...
+            );
 
             % offline options
             obj.PlotOptions.Offline = true;
-            obj.PlotOptions.ShowLinkText = true; 
-            obj.PlotOptions.LinkText = obj.get_link_text; 
+            obj.PlotOptions.ShowLinkText = true;
+            obj.PlotOptions.LinkText = obj.get_link_text;
             obj.PlotOptions.IncludePlotlyjs = true;
             obj.PlotOptions.SaveFolder = pwd;
 
-            %-UserData-%
             try
                 [obj.UserData.Username,...
                     obj.UserData.ApiKey,...
@@ -85,193 +82,50 @@
                 end
             end
 
-            %-PlotlyDefaults-%
-            obj.PlotlyDefaults.MinTitleMargin = 10;
-            obj.PlotlyDefaults.TitleHeight = 0.01;
-            obj.PlotlyDefaults.TitleFontSizeIncrease = 40; 
-            obj.PlotlyDefaults.FigureIncreaseFactor = 1.5;
-            obj.PlotlyDefaults.AxisLineIncreaseFactor = 1.5;
-            obj.PlotlyDefaults.MarginPad = 0;
-            obj.PlotlyDefaults.MaxTickLength = 20;
-            obj.PlotlyDefaults.ExponentFormat = 'none';
-            obj.PlotlyDefaults.ErrorbarWidth = 6;
-            obj.PlotlyDefaults.ShowBaselineLegend = false;
-            obj.PlotlyDefaults.Bargap = 0;
-            obj.PlotlyDefaults.CaptionMarginIncreaseFactor = 1.2; 
-            obj.PlotlyDefaults.MinCaptionMargin = 80;
-            obj.PlotlyDefaults.IsLight = false;
-            obj.PlotlyDefaults.isGeoaxis = false;
-            obj.PlotlyDefaults.isTernary = false;
-
-            %-State-%
-            obj.State.Figure = [];
-            obj.State.Axis = [];
-            obj.State.Plot = [];
-            obj.State.Text = [];
-            obj.State.Legend = [];
-            obj.State.Colorbar = [];
-
-            % figure object management
-            obj.State.Figure.NumAxes = 0;
-            obj.State.Figure.NumPlots = 0;
-            obj.State.Figure.NumLegends = 0;
-            obj.State.Figure.NumColorbars = 0;
-            obj.State.Figure.NumTexts = 0;
+            obj.PlotlyDefaults = struct( ...
+                "MinTitleMargin", 10, ...
+                "TitleHeight", 0.01, ...
+                "TitleFontSizeIncrease", 40, ...
+                "FigureIncreaseFactor", 1.5, ...
+                "AxisLineIncreaseFactor", 1.5, ...
+                "MarginPad", 0, ...
+                "MaxTickLength", 20, ...
+                "ExponentFormat", 'none', ...
+                "ErrorbarWidth", 6, ...
+                "ShowBaselineLegend", false, ...
+                "Bargap", 0, ...
+                "CaptionMarginIncreaseFactor", 1.2, ...
+                "MinCaptionMargin", 80, ...
+                "IsLight", false, ...
+                "isGeoaxis", false, ...
+                "isTernary", false ...
+            );
+
+            obj.State = struct( ...
+                "Axis", [], ...
+                "Plot", [], ...
+                "Text", [], ...
+                "Legend", [], ...
+                "Colorbar", [], ...
+                ... % figure object management
+                "Figure", struct( ...
+                    "NumAxes", 0, ...
+                    "NumPlots", 0, ...
+                    "NumLegends", 0, ...
+                    "NumColorbars", 0, ...
+                    "NumTexts", 0 ...
+                ) ...
+            );
 
-            %-PlotlyReference-%
             obj.PlotlyReference = [];
 
-            %-InitialState-%
-            obj.InitialState.Username = obj.UserData.Username;
-            obj.InitialState.ApiKey = obj.UserData.ApiKey;
-            obj.InitialState.PlotlyDomain = obj.UserData.PlotlyDomain;
-
-            % initialize figure handle
-            fig_han = [];
-
-            % initialize autoupdate key
-            updatekey = false;
+            obj.InitialState = struct( ...
+                "Username", obj.UserData.Username, ...
+                "ApiKey", obj.UserData.ApiKey, ...
+                "PlotlyDomain", obj.UserData.PlotlyDomain ...
+            );
 
-            noFig = false;
-
-            % parse inputs
-            switch nargin
-                case 0
-                case 1
-                    % check for figure handle
-                    if ishandle(varargin{1})
-                        if strcmp(get(varargin{1},'type'),'figure')
-                            fig_han = varargin{1};
-                            updatekey = true;
-                        end
-                    else
-                        errkey = 'plotlyfigConstructor:invalidInputs';
-                        error(errkey , plotlymsg(errkey));
-                    end
-                otherwise
-                    % check for figure handle
-                    if ishandle(varargin{1})
-                        if strcmp(get(varargin{1},'type'),'figure')
-                            fig_han = varargin{1};
-                            updatekey = true;
-                            parseinit = 2;
-                        end
-                    elseif iscell(varargin{1}) && isstruct(varargin{2})
-                        obj.data = varargin{1}{:};
-                        structargs = varargin{2};
-                        ff=fieldnames(structargs);
-                        for i=1:length(ff)
-                            varargin{2*i-1}=ff{i};
-                            varargin{2*i}=structargs.(ff{i});
-                        end
-                        noFig=true;
-                        parseinit = 1;
-                    else
-                        parseinit = 1;
-                    end
-
-                    % check for proper property/value structure
-                    if mod(length(parseinit:nargin),2) ~= 0
-                        errkey = 'plotlyfigConstructor:invalidInputs';
-                        error(errkey , plotlymsg(errkey));
-                    end
-
-                    % parse property/values
-                    for a = parseinit:2:length(varargin)
-                        if (strcmpi(varargin{a},'filename'))
-                            obj.PlotOptions.FileName = varargin{a+1};
-                            % overwrite if filename provided
-                            obj.PlotOptions.FileOpt = 'overwrite';
-                        end
-                        if (strcmpi(varargin{a},'savefolder'))
-                            obj.PlotOptions.SaveFolder = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'fileopt'))
-                            obj.PlotOptions.FileOpt = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'world_readable'))
-                            obj.PlotOptions.WorldReadable = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'link'))
-                            obj.PlotOptions.ShowURL = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'open'))
-                            obj.PlotOptions.OpenURL = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'strip'))
-                            obj.PlotOptions.Strip = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'writeFile'))
-                            obj.PlotOptions.WriteFile = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'visible'))
-                            obj.PlotOptions.Visible = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'offline'))
-                            obj.PlotOptions.Offline = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'showlink'))
-                            obj.PlotOptions.ShowLinkText = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'linktext'))
-                            obj.PlotOptions.LinkText = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'include_plotlyjs'))
-                            obj.PlotOptions.IncludePlotlyjs = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'layout'))
-                            obj.layout= varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'data'))
-                            obj.data = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'StripMargins'))
-                            obj.PlotOptions.StripMargins = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'TriangulatePatch'))
-                            obj.PlotOptions.TriangulatePatch = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'TreatAs'))
-                            if ~iscell(varargin{a+1})
-                                obj.PlotOptions.TreatAs = {varargin{a+1}};
-                            else
-                                obj.PlotOptions.TreatAs = varargin{a+1};
-                            end
-                        end
-                        if (strcmpi(varargin{a},'AxisEqual'))
-                            obj.PlotOptions.AxisEqual = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'AspectRatio'))
-                            obj.PlotOptions.AspectRatio = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'CameraEye'))
-                            obj.PlotOptions.CameraEye = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'Quality'))
-                            obj.PlotOptions.Quality = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'Zmin'))
-                            obj.PlotOptions.Zmin = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'FrameDuration'))
-                            if varargin{a+1} > 0
-                                obj.PlotOptions.FrameDuration = varargin{a+1};
-                            end
-                        end
-                        if (strcmpi(varargin{a},'FrameTransitionDuration'))
-                            if varargin{a+1} >= 0
-                                obj.PlotOptions.FrameTransitionDuration = varargin{a+1};
-                            end
-                        end
-                        if (strcmpi(varargin{a},'geoRenderType'))
-                            obj.PlotOptions.geoRenderType = varargin{a+1};
-                        end
-                        if (strcmpi(varargin{a},'DomainFactor'))
-                            len = length(varargin{a+1});
-                            obj.PlotOptions.DomainFactor(1:len) = varargin{a+1};
-                        end
-                    end
-            end
+            [fig_han,updatekey,noFig] = obj.parseInputs(varargin);
 
             if ~noFig
                 % create figure/axes if empty
@@ -281,26 +135,23 @@
                 end
 
                 % plotly figure default style
-                set(fig_han,'Name',obj.PlotOptions.FileName,'Color',[1 1 1],'NumberTitle','off', 'Visible', obj.PlotOptions.Visible);
+                fig_han.Name = obj.PlotOptions.FileName;
+                fig_han.Color = [1 1 1];
+                fig_han.NumberTitle = 'off';
+                fig_han.Visible = obj.PlotOptions.Visible;
 
                 % figure state
                 obj.State.Figure.Handle = fig_han;
             end
 
-            % update
             if updatekey
                 obj.update;
             end
 
             if ~noFig
-                % add figure listeners
                 addlistener(obj.State.Figure.Handle,'Visible','PostSet',@(src,event)updateFigureVisible(obj,src,event));
                 addlistener(obj.State.Figure.Handle,'Name','PostSet',@(src,event)updateFigureName(obj,src,event));
-
-                % add plot options listeners
                 addlistener(obj,'PlotOptions','PostSet',@(src,event)updatePlotOptions(obj,src,event));
-
-                % add user data listeners
                 addlistener(obj,'UserData','PostSet',@(src,event)updateUserData(obj,src,event));
             end
         end
@@ -314,9 +165,8 @@
         end
 
         %----LOAD PLOTLY REFERENCE-----%
-        function obj = loadplotlyref(obj) 
+        function obj = loadplotlyref(obj)
             if isempty(obj.PlotlyReference)
-
                 % plotly reference
                 plotlyref = load('plotly_reference.mat');
 
@@ -327,7 +177,7 @@
 
         %----KEEP THE MATLAB STYLE DEFAULTS----%
         function obj = revert(obj)
-            obj.PlotOptions.Strip = false; 
+            obj.PlotOptions.Strip = false;
             obj.update;
         end
 
@@ -338,11 +188,7 @@
 
             % strip the style keys from data
             for d = 1:length(obj.data)
-                if ( ...
-                        strcmpi(obj.data{d}.type, 'scatter') || ...
-                        strcmpi(obj.data{d}.type, 'contour') || ...
-                        strcmpi(obj.data{d}.type, 'bar') ...
-                    )
+                if contains(lower(obj.data{d}.type), ["scatter" "contour" "bar"])
                     return
                 end
                 obj.data{d} = obj.stripkeys(obj.data{d}, obj.data{d}.type, 'style');
@@ -350,16 +196,15 @@
 
             % strip the style keys from layout
             obj.layout = obj.stripkeys(obj.layout, 'layout', 'style');
-
         end
 
         %----GET THE FIELDS OF TYPE DATA----%
         function data = getdata(obj)
             obj.loadplotlyref;
-            
+
             % initialize output
             data = cell(1,length(obj.data));
-            
+
             % remove style / plot_info types in data
             for d = 1:length(obj.data)
                 data{d} = obj.stripkeys(obj.data{d}, obj.data{d}.type, {'style','plot_info'});
@@ -381,7 +226,6 @@ function validate(obj)
 
             % validate layout fields
             obj.stripkeys(obj.layout, 'layout', 'style');
-            
         end
 
         %----GET PLOTLY FIGURE-----%
@@ -422,7 +266,7 @@ function validate(obj)
                 obj.saveas(obj.PlotOptions.FileName,'jpeg');
             end
         end
-        
+
         %----SAVE STATIC PDF IMAGE-----%
         function obj = pdf(obj, filename)
             if nargin > 1
@@ -452,29 +296,29 @@ function validate(obj)
 
         %----ADD A CUSTOM CAPTION-----%
         function obj = add_caption(obj, caption_string, varargin)
-            caption.text = caption_string; 
-
-            % defaults
-            caption.xref = 'paper';
-            caption.yref = 'paper';
-            caption.xanchor = 'left';
-            caption.yanchor = 'top';
-            caption.x = 0.1; 
-            caption.y = -0.05;
-            caption.showarrow = false; 
+            caption = struct( ...
+                "text", caption_string, ...
+                "xref", "paper", ...
+                "yref", "paper", ...
+                "xanchor", "left", ...
+                "yanchor", "top", ...
+                "x", 0.1, ...
+                "y", -0.05, ...
+                "showarrow", false ...
+            );
 
             % inject any custom annotation specs
             for n = 1:2:length(varargin)
-                caption = setfield(caption, varargin{n}, varargin{n+1}); 
+                caption.(varargin{n}) = varargin{n+1};
             end
 
             % adjust the bottom margin
             obj.layout.margin.b = max(obj.layout.margin.b, ...
-                    obj.PlotlyDefaults.MinCaptionMargin); 
+                    obj.PlotlyDefaults.MinCaptionMargin);
 
             % add the new caption to the figure
             obj.State.Figure.NumTexts = obj.State.Figure.NumTexts + 1;
-            obj.layout.annotations{obj.State.Figure.NumTexts} = caption; 
+            obj.layout.annotations{obj.State.Figure.NumTexts} = caption;
 
             % update the figure state
             obj.State.Text(obj.State.Figure.NumTexts).Handle = NaN;
@@ -502,7 +346,6 @@ function validate(obj)
             % validate keys
             validate(obj);
 
-            % handle filename
             handleFileName(obj);
 
             % handle title (for feed)
@@ -514,27 +357,25 @@ function validate(obj)
                 end
             end
 
-            %get args
             args.filename = obj.PlotOptions.FileName;
             args.fileopt = obj.PlotOptions.FileOpt;
             args.world_readable = obj.PlotOptions.WorldReadable;
             args.offline = obj.PlotOptions.Offline;
 
-            %layout
             args.layout = obj.layout;
 
             if obj.PlotOptions.WriteFile
-                %send to plotly
+                % send to plotly
                 if ~obj.PlotOptions.Offline
                     response = plotly(obj.data, args);
 
-                    %update response
+                    % update response
                     obj.url = response.url;
                     obj.error = response.error;
                     obj.warning = response.warning;
                     obj.message = response.message;
 
-                    %open url in browser
+                    % open url in browser
                     if obj.PlotOptions.OpenURL
                         web(response.url, '-browser');
                     end
@@ -543,13 +384,13 @@ function validate(obj)
                     if obj.PlotOptions.OpenURL
                         web(obj.url, '-browser');
                     end
-                end 
-            end           
+                end
+            end
         end
 
         %-----------------------FIGURE CONVERSION-------------------------%
 
-        %automatic figure conversion
+        % automatic figure conversion
         function obj = update(obj)
             % reset figure object count
             obj.State.Figure.NumAxes = 0;
@@ -581,8 +422,9 @@ function validate(obj)
                 end
             end
 
-            %---------- checking the overlaping of the graphs ------------%
-            temp_ax = ax; deleted_idx = 0;
+            %---------- checking the overlapping of the graphs -----------%
+            temp_ax = ax;
+            deleted_idx = 0;
             for i = 1:length(ax)
                 for j = i:length(ax)
                     try
@@ -595,18 +437,17 @@ function validate(obj)
                             end
                             temp_ax(i).YTick = temp_ax(j- deleted_idx).YTick;
                             temp_ax(i).XTick = temp_ax(j- deleted_idx).XTick;
-                            temp_ax(j - deleted_idx) = []; 
+                            temp_ax(j - deleted_idx) = [];
                             deleted_idx = deleted_idx + 1;
                         end
                     catch
-                        % TODO: error with ax(i).Children.Type. isfield is no enogh
+                        % TODO: error with ax(i).Children.Type. isfield is no enough
                     end
                 end
             end
             ax = temp_ax;
-            %---------- checking the overlaping of the graphs ------------%
+            %---------- checking the overlapping of the graphs ------------%
 
-            % update number of axes
             obj.State.Figure.NumAxes = length(ax);
 
             % update number of annotations (one title per axis)
@@ -617,7 +458,6 @@ function validate(obj)
                 % reverse axes
                 axrev = length(ax) - a + 1;
 
-                % set axis handle field
                 obj.State.Axis(a).Handle = ax(axrev);
 
                 % add title
@@ -647,20 +487,17 @@ function validate(obj)
                 plots = findobj(ax(axrev),'-not','Type','Text','-not','Type','axes','-depth',1);
 
                 % get number of nbars for pie3
-                if ismember('pie3', lower(obj.PlotOptions.TreatAs))
+                if lower(obj.PlotOptions.TreatAs) == "pie3"
                     obj.PlotOptions.nbars{a} = 0;
                     for i = 1:length(plots)
-                        if ismember('surface', lower(obj.PlotOptions.TreatAs))
+                        if lower(obj.PlotOptions.TreatAs) == "surface"
                             obj.PlotOptions.nbars{a} = obj.PlotOptions.nbars{a} + 1;
                         end
                     end
                 end
 
-                % add baseline objects
-                baselines = findobj(ax(axrev),'-property','BaseLine');
-
-                % check is current axes have multiple y-axes
-                try 
+                % check if current axes have multiple y-axes
+                try
                     obj.PlotlyDefaults.isMultipleYAxes(axrev) = length(ax(axrev).YAxis) == 2;
                 catch
                     obj.PlotlyDefaults.isMultipleYAxes(axrev) = false;
@@ -729,10 +566,10 @@ function validate(obj)
 
             for g = 1:length(legs)
                 obj.State.Legend(g).Handle = handle(legs(g));
-                
+
                 % find associated axis
                 legendAxis = findLegendAxis(obj, handle(legs(g)));
-                
+
                 % update colorbar associated axis
                 obj.State.Legend(g).AssociatedAxis = legendAxis;
             end
@@ -759,25 +596,23 @@ function validate(obj)
 
             %--------------------UPDATE PLOTLY FIGURE---------------------%
 
-            % reset dataget(obj.State.Figure.Handle,'Children')
             obj.data = {};
             obj.PlotOptions.nPlots = obj.State.Figure.NumPlots;
             obj.PlotlyDefaults.anIndex = obj.State.Figure.NumTexts;
 
-            % reset layout
             obj.layout = struct();
+            obj.layout.annotations = {};
 
-            % update figure
             updateFigure(obj);
 
             % update axes
             for n = 1:obj.State.Figure.NumAxes
-                if ismember(ax(n).Type,specialAxisPlots())
+                nrev = length(ax) - n + 1;
+                if ismember(ax(nrev).Type,specialAxisPlots())
                     continue
                 end
                 if ~obj.PlotlyDefaults.isMultipleYAxes(n)
                     updateAxis(obj,n);
-
                 else
                     for yax = 1:2
                         updateAxisMultipleYAxes(obj,n,yax);
@@ -800,7 +635,7 @@ function validate(obj)
                         % TODO
                     else
                         if ~obj.PlotlyDefaults.isTernary
-                            updateAnnotation(obj,n);
+                            obj.layout.annotations{end+1} = updateAnnotation(obj,n);
 
                             if obj.State.Figure.NumAxes == 1
                                 obj.PlotOptions.CleanFeedTitle = false;
@@ -812,15 +647,13 @@ function validate(obj)
                 end
             end
 
-            % update tiled layout annotations
             if isTiledLayout
                 updateTiledLayoutAnnotation(obj, tiledLayoutStruct);
             end
 
-            % update legends
             if obj.State.Figure.NumLegends < 2
                 for n = 1:obj.State.Figure.NumLegends
-                    if ~strcmpi(obj.PlotOptions.TreatAs, 'pie3')
+                    if lower(obj.PlotOptions.TreatAs) ~= "pie3"
                         updateLegend(obj,n);
                     end
                 end
@@ -828,7 +661,6 @@ function validate(obj)
                 updateLegendMultipleAxes(obj,1);
             end
 
-            % update colorbars
             for n = 1:obj.State.Figure.NumColorbars
                 if ~obj.PlotlyDefaults.isTernary
                     updateColorbar(obj,n);
@@ -840,17 +672,14 @@ function validate(obj)
 
         %----------------------EXTRACT PLOTLY INDICES---------------------%
 
-        %----GET CURRENT AXIS INDEX ----%
         function currentAxisIndex = getAxisIndex(obj,axishan)
             currentAxisIndex = find(arrayfun(@(x)(eq(x.Handle,axishan)),obj.State.Axis));
         end
 
-        %----GET CURRENT DATA INDEX ----%
         function currentDataIndex = getDataIndex(obj,plothan)
             currentDataIndex = find(arrayfun(@(x)(eq(x.Handle,plothan)),obj.State.Plot));
         end
 
-        %----GET CURRENT ANNOTATION INDEX ----%
         function currentAnnotationIndex = getAnnotationIndex(obj,annothan)
             currentAnnotationIndex = find(arrayfun(@(x)(eq(x.Handle,annothan)),obj.State.Text));
         end
@@ -859,12 +688,10 @@ function validate(obj)
 
         %----UPDATE FIGURE OPTIONS----%
         function obj = updateFigureVisible(obj,src,event)
-            % update PlotOptions.Visible
             obj.PlotOptions.Visible = obj.State.Figure.Handle.Visible;
         end
 
         function obj = updateFigureName(obj,src,event)
-            % update PlotOptions.Name
             obj.PlotOptions.FileName = obj.State.Figure.Handle.Name;
         end
 
@@ -983,10 +810,10 @@ function validate(obj)
             % call initial
             [y,t,x] = initial(varargin{:});
             % fake output by calling plot
-            plot(t,y); 
-            %update object
+            plot(t,y);
+            % update object
             obj.update;
-            %send to plotly
+            % send to plotly
             obj.plotly;
         end
 
@@ -1005,14 +832,11 @@ function delete(obj)
     methods (Access=private)
         %----STRIP THE FIELDS OF A SPECIFIED KEY-----%
         function stripped = stripkeys(obj, fields, fieldname, key)
-            %plorlt reference
+            % plorlt reference
             pr = obj.PlotlyReference;
 
-            % initialize output
-            % fields
             stripped = fields;
 
-            % get fieldnames
             fn = fieldnames(stripped);
             fnmod = fn;
 
@@ -1038,11 +862,11 @@ function delete(obj)
                             annot = stripped.(fn{d});
                             fnmod{d} = 'annotation';
                             for a = 1:length(annot)
-                                %recursive call to stripkeys
+                                % recursive call to stripkeys
                                 stripped.annotations{a} = obj.stripkeys(annot{a}, fnmod{d}, key);
                             end
                         else
-                            %recursive call to stripkeys
+                            % recursive call to stripkeys
                             stripped.(fn{d}) = obj.stripkeys(stripped.(fn{d}), fnmod{d}, key);
                         end
 
@@ -1082,7 +906,7 @@ function delete(obj)
                                 exception.message(1:end-1) ' in ' ...
                                 fieldname '\n\n']);
                     end
-                end 
+                end
             end
         end
 
@@ -1092,9 +916,137 @@ function delete(obj)
             else
                 plotly_domain = obj.UserData.PlotlyDomain;
             end
-            link_domain = strrep(plotly_domain, 'https://', ''); 
-            link_domain = strrep(link_domain, 'http://', ''); 
-            link_text = ['Export to ' link_domain]; 
-        end   
+            link_domain = strrep(plotly_domain, 'https://', '');
+            link_domain = strrep(link_domain, 'http://', '');
+            link_text = ['Export to ' link_domain];
+        end
+
+        function [fig_han,updatekey,noFig] = parseInputs(obj,varargs)
+            % initialize figure handle
+            fig_han = [];
+
+            % initialize autoupdate key
+            updatekey = false;
+
+            noFig = false;
+            nargs = numel(varargs);
+
+            switch nargs
+                case 0
+                case 1
+                    % check for figure handle
+                    if ishandle(varargs{1})
+                        if strcmp(get(varargs{1},'type'),'figure')
+                            fig_han = varargs{1};
+                            updatekey = true;
+                        end
+                    else
+                        errkey = 'plotlyfigConstructor:invalidInputs';
+                        error(errkey , plotlymsg(errkey));
+                    end
+                otherwise
+                    % check for figure handle
+                    if ishandle(varargs{1})
+                        if strcmp(get(varargs{1},'type'),'figure')
+                            fig_han = varargs{1};
+                            updatekey = true;
+                            parseinit = 2;
+                        end
+                    elseif iscell(varargs{1}) && isstruct(varargs{2})
+                        obj.data = varargs{1}{:};
+                        structargs = varargs{2};
+                        ff=fieldnames(structargs);
+                        for i=1:length(ff)
+                            varargs{2*i-1}=ff{i};
+                            varargs{2*i}=structargs.(ff{i});
+                        end
+                        noFig=true;
+                        parseinit = 1;
+                    else
+                        parseinit = 1;
+                    end
+
+                    % check for proper property/value structure
+                    if mod(length(parseinit:nargs),2) ~= 0
+                        errkey = 'plotlyfigConstructor:invalidInputs';
+                        error(errkey , plotlymsg(errkey));
+                    end
+
+                    % parse property/values
+                    for a = parseinit:2:length(varargs)
+                        property = lower(varargs{a});
+                        value = varargs{a+1};
+                        switch property
+                            case "filename"
+                                obj.PlotOptions.FileName = value;
+                                % overwrite if filename provided
+                                obj.PlotOptions.FileOpt = 'overwrite';
+                            case "savefolder"
+                                obj.PlotOptions.SaveFolder = value;
+                            case "fileopt"
+                                obj.PlotOptions.FileOpt = value;
+                            case "world_readable"
+                                obj.PlotOptions.WorldReadable = value;
+                            case "link"
+                                obj.PlotOptions.ShowURL = value;
+                            case "open"
+                                obj.PlotOptions.OpenURL = value;
+                            case "strip"
+                                obj.PlotOptions.Strip = value;
+                            case "writefile"
+                                obj.PlotOptions.WriteFile = value;
+                            case "visible"
+                                obj.PlotOptions.Visible = value;
+                            case "offline"
+                                obj.PlotOptions.Offline = value;
+                            case "showlink"
+                                obj.PlotOptions.ShowLinkText = value;
+                            case "linktext"
+                                obj.PlotOptions.LinkText = value;
+                            case "include_plotlyjs"
+                                obj.PlotOptions.IncludePlotlyjs = value;
+                            case "layout"
+                                obj.layout= value;
+                            case "data"
+                                obj.data = value;
+                            case "stripmargins"
+                                obj.PlotOptions.StripMargins = value;
+                            case "triangulatepatch"
+                                obj.PlotOptions.TriangulatePatch = value;
+                            case "treatas"
+                                if ~iscell(value)
+                                    obj.PlotOptions.TreatAs = {value};
+                                else
+                                    obj.PlotOptions.TreatAs = value;
+                                end
+                            case "axisequal"
+                                obj.PlotOptions.AxisEqual = value;
+                            case "aspectratio"
+                                obj.PlotOptions.AspectRatio = value;
+                            case "cameraeye"
+                                obj.PlotOptions.CameraEye = value;
+                            case "quality"
+                                obj.PlotOptions.Quality = value;
+                            case "zmin"
+                                obj.PlotOptions.Zmin = value;
+                            case "frameduration"
+                                if value > 0
+                                    obj.PlotOptions.FrameDuration = value;
+                                end
+                            case "frametransitionduration"
+                                if value >= 0
+                                    obj.PlotOptions.FrameTransitionDuration = value;
+                                end
+                            case "georendertype"
+                                obj.PlotOptions.geoRenderType = value;
+                            case "domainfactor"
+                                len = length(value);
+                                obj.PlotOptions.DomainFactor(1:len) = value;
+                            otherwise
+                                warning("Unrecognized property name ""%s""", property);
+                        end
+                    end
+            end
+        end
     end
 end
diff --git a/plotly/plotlyfig_aux/core/updateAnnotation.m b/plotly/plotlyfig_aux/core/updateAnnotation.m
index 845e405d..28cc8bcd 100644
--- a/plotly/plotlyfig_aux/core/updateAnnotation.m
+++ b/plotly/plotlyfig_aux/core/updateAnnotation.m
@@ -1,4 +1,4 @@
-function obj = updateAnnotation(obj,anIndex)
+function annotation = updateAnnotation(obj,anIndex)
     %-------X/YLABEL FIELDS--------%
     % title...[DONE]
     % titlefont.size...[DONE]
@@ -44,181 +44,113 @@
     %-TEXT DATA STRUCTURE-%
     text_data = obj.State.Text(anIndex).Handle;
 
-    %---------------------------------------------------------------------%
-
-    %-show arrow-%
-    obj.layout.annotations{anIndex}.showarrow = false;
-
-    %---------------------------------------------------------------------%
+    annotation.showarrow = false;
 
     %-anchor title to paper-%
     if obj.State.Text(anIndex).Title
-        %-xref-%
-        obj.layout.annotations{anIndex}.xref = "paper";
-        %-yref-%
-        obj.layout.annotations{anIndex}.yref = "paper";
+        annotation.xref = "paper";
+        annotation.yref = "paper";
     else
-        %-xref-%
-        obj.layout.annotations{anIndex}.xref = "x" + xsource;
-        %-yref-%
-        obj.layout.annotations{anIndex}.yref = "y" + ysource;
+        annotation.xref = "x" + xsource;
+        annotation.yref = "y" + ysource;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-xanchor-%
-    obj.layout.annotations{anIndex}.xanchor = text_data.HorizontalAlignment;
-
-    %---------------------------------------------------------------------%
-
-    %-align-%
-    obj.layout.annotations{anIndex}.align = text_data.HorizontalAlignment;
-
-    %---------------------------------------------------------------------%
+    annotation.xanchor = text_data.HorizontalAlignment;
+    annotation.align = text_data.HorizontalAlignment;
 
     switch text_data.VerticalAlignment
-        %-yanchor-%
         case {"top", "cap"}
-            obj.layout.annotations{anIndex}.yanchor = "top";
+            annotation.yanchor = "top";
         case "middle"
-            obj.layout.annotations{anIndex}.yanchor = "middle";
+            annotation.yanchor = "middle";
         case {"baseline","bottom"}
-            obj.layout.annotations{anIndex}.yanchor = "bottom";
+            annotation.yanchor = "bottom";
     end
 
-    %---------------------------------------------------------------------%
-
-    %-text-%
     if obj.State.Text(anIndex).Title
-        obj.layout.annotations{anIndex}.text = parseString( ...
+        annotation.text = parseString( ...
                 text_data.String,text_data.Interpreter);
         if isempty(text_data.String)
-            obj.layout.annotations{anIndex}.text = "<b></b>"; %empty string annotation
+            annotation.text = "<b></b>"; %empty string annotation
         else
-            obj.layout.annotations{anIndex}.text = "<b>" + join( ...
-                    string(obj.layout.annotations{anIndex}.text), ...
-                    "<br>") + "</b>";
+            annotation.text = "<b>" + join( ...
+                    string(annotation.text), "<br>") + "</b>";
         end
     else
         if ~strcmpi(obj.PlotOptions.TreatAs, "pie3")
-            obj.layout.annotations{anIndex}.text = parseString( ...
+            annotation.text = parseString( ...
                     text_data.String,text_data.Interpreter);
         else
-            obj.layout.annotations{anIndex}.text = "<b></b>";
+            annotation.text = "<b></b>";
         end
     end
 
     %-optional code flow-%
     % if ~strcmpi(obj.PlotOptions.TreatAs, "pie3")
-    %     obj.layout.annotations{anIndex}.text = parseString(text_data.String,text_data.Interpreter);
+    %     annotation.text = parseString(text_data.String,text_data.Interpreter);
     %     if obj.State.Text(anIndex).Title && isempty(text_data.String)
-    %         obj.layout.annotations{anIndex}.text = "<b></b>"; %empty string annotation
+    %         annotation.text = "<b></b>"; %empty string annotation
     %     end
     % else
-    %     obj.layout.annotations{anIndex}.text = "<b></b>";
+    %     annotation.text = "<b></b>";
     % end
 
-    %---------------------------------------------------------------------%
-
     if obj.State.Text(anIndex).Title
-
         %-AXIS DATA-%
         xaxis = obj.layout.("xaxis" + xsource);
         yaxis = obj.layout.("yaxis" + xsource);
 
-        %-x position-%
-        obj.layout.annotations{anIndex}.x = mean(xaxis.domain);
-        %-y position-%
-        obj.layout.annotations{anIndex}.y = (yaxis.domain(2) ...
-                + obj.PlotlyDefaults.TitleHeight);
+        annotation.x = mean(xaxis.domain);
+        annotation.y = (yaxis.domain(2) + obj.PlotlyDefaults.TitleHeight);
     else
-        %-x position-%
-        obj.layout.annotations{anIndex}.x = text_data.Position(1);
-        %-y position-%
-        obj.layout.annotations{anIndex}.y = text_data.Position(2);
+        annotation.x = text_data.Position(1);
+        annotation.y = text_data.Position(2);
     end
 
-
-
-    %-font color-%
     col = round(255*text_data.Color);
-    obj.layout.annotations{anIndex}.font.color = ...
-            sprintf("rgb(%d,%d,%d)", col);
-
-    %---------------------------------------------------------------------%
+    annotation.font.color = getStringColor(col);
 
-    %-font family-%
-    obj.layout.annotations{anIndex}.font.family = matlab2plotlyfont( ...
-            text_data.FontName);
+    annotation.font.family = matlab2plotlyfont(text_data.FontName);
 
-    %---------------------------------------------------------------------%
-
-    %-font size-%
-    obj.layout.annotations{anIndex}.font.size = text_data.FontSize;
-
-    %---------------------------------------------------------------------%
+    annotation.font.size = text_data.FontSize;
 
     switch text_data.FontWeight
         case {"bold","demi"}
             %-bold text-%
-            obj.layout.annotations{anIndex}.text = ...
-                "<b>" + obj.layout.annotations{anIndex}.text + "</b>";
+            annotation.text = "<b>" + annotation.text + "</b>";
         otherwise
     end
 
-    %---------------------------------------------------------------------%
-
     %-background color-%
     if ~ischar(text_data.BackgroundColor)
         switch text_data.BackgroundColor
             case "ne"
-                obj.layout.annotations{anIndex}.bgcolor = "rgba(0,0,0,0)";
+                annotation.bgcolor = "rgba(0,0,0,0)";
             otherwise
         end
     end
 
-    %---------------------------------------------------------------------%
-
-    %-border color-%
     if ~ischar(text_data.EdgeColor)
         col = round(255*text_data.EdgeColora);
-        obj.layout.annotations{anIndex}.bordercolor = ...
-                sprintf("rgb(%d,%d,%d)", col);
+        annotation.bordercolor = getStringColor(col);
     else
         %-none-%
-        obj.layout.annotations{anIndex}.bordercolor = "rgba(0,0,0,0)";
+        annotation.bordercolor = "rgba(0,0,0,0)";
     end
 
-    %---------------------------------------------------------------------%
-
-    %-text angle-%
-    obj.layout.annotations{anIndex}.textangle = text_data.Rotation;
+    annotation.textangle = text_data.Rotation;
     if text_data.Rotation > 180
-        obj.layout.annotations{anIndex}.textangle = ...
-                text_data.Rotation - 360;
+        annotation.textangle = text_data.Rotation - 360;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-border width-%
-    obj.layout.annotations{anIndex}.borderwidth = text_data.LineWidth;
+    annotation.borderwidth = text_data.LineWidth;
+    annotation.borderpad = text_data.Margin;
 
-    %---------------------------------------------------------------------%
-
-    %-border pad-%
-    obj.layout.annotations{anIndex}.borderpad = text_data.Margin;
-
-
-    %hide text (a workaround)
+    %-hide text (a workaround)
     if strcmp(text_data.Visible,"off")
-        obj.layout.annotations{anIndex}.text = " ";
-    else
-        obj.layout.annotations{anIndex}.text = ...
-                obj.layout.annotations{anIndex}.text;
+        annotation.text = " ";
     end
 
-    %---------------------------------------------------------------------%
-
     %-REVERT UNITS-%
     obj.State.Text(anIndex).Handle.Units = textunits;
     obj.State.Text(anIndex).Handle.FontUnits = fontunits;
diff --git a/plotly/plotlyfig_aux/core/updateAxis.m b/plotly/plotlyfig_aux/core/updateAxis.m
index 905ea47b..c248a305 100644
--- a/plotly/plotlyfig_aux/core/updateAxis.m
+++ b/plotly/plotlyfig_aux/core/updateAxis.m
@@ -40,35 +40,27 @@
     % side:...[DONE]
     % position:...[NOT SUPPORTED IN MATLAB]
 
-    %-STANDARDIZE UNITS-%
-    axisUnits = obj.State.Axis(axIndex).Handle.Units;
-    set(obj.State.Axis(axIndex).Handle,'Units','normalized')
-
-    try
-        fontUnits = obj.State.Axis(axIndex).Handle.FontUnits;
-        set(obj.State.Axis(axIndex).Handle,'FontUnits','points')
-    catch
-        % TODO
-    end
-
     %-AXIS DATA STRUCTURE-%
     axisData = obj.State.Axis(axIndex).Handle;
 
-    %---------------------------------------------------------------------%
+    %-STANDARDIZE UNITS-%
+    axisUnits = axisData.Units;
+    axisData.Units = 'normalized';
+
+    if isprop(axisData, "FontUnits")
+        fontUnits = axisData.FontUnits;
+        axisData.FontUnits = 'points';
+    end
 
     %-check if headmap axis-%
     isHeatmapAxis = axisData.Type == "heatmap";
     obj.PlotOptions.is_headmap_axis = isHeatmapAxis;
 
-    %---------------------------------------------------------------------%
-
     %-check if geo-axis-%
     isGeoaxis = isfield(axisData, 'Type') ...
             && strcmpi(axisData.Type, 'geoaxes');
     obj.PlotlyDefaults.isGeoaxis = isGeoaxis;
 
-    %---------------------------------------------------------------------%
-
     if isHeatmapAxis
         xaxis = extractHeatmapAxisData(obj,axisData, 'X');
         xExponentFormat = 0;
@@ -92,13 +84,9 @@
     yaxis.domain = min([axisPos(2) sum(axisPos([2,4]))], 1);
     scene.domain.y = yaxis.domain;
 
-    %---------------------------------------------------------------------%
-
     %-get source axis-%
     [xsource, ysource, xoverlay, yoverlay] = findSourceAxis(obj,axIndex);
 
-    %---------------------------------------------------------------------%
-
     %-set exponent format-%
     anIndex = obj.State.Figure.NumTexts;
 
@@ -142,8 +130,6 @@
         end
     end
 
-    %---------------------------------------------------------------------%
-
     xaxis.anchor = "y" + ysource;
     yaxis.anchor = "x" + xsource;
 
@@ -154,29 +140,21 @@
         yaxis.overlaying = "y" + yoverlay;
     end
 
-    %---------------------------------------------------------------------%
-
     % update the layout field (do not overwrite source)
     if xsource == axIndex
-        obj.layout = setfield(obj.layout, "xaxis" + xsource, xaxis);
-        obj.layout = setfield(obj.layout, "scene" + xsource, scene);
+        obj.layout.("xaxis" + xsource) = xaxis;
+        obj.layout.("scene" + xsource) = scene;
     end
 
-    %---------------------------------------------------------------------%
-
     % update the layout field (do not overwrite source)
     if ysource == axIndex
-        obj.layout = setfield(obj.layout, "yaxis" + ysource, yaxis);
+        obj.layout.("yaxis" + ysource) = yaxis;
     end
 
-    %---------------------------------------------------------------------%
-
     %-REVERT UNITS-%
-    set(obj.State.Axis(axIndex).Handle, 'Units', axisUnits);
+    axisData.Units = axisUnits;
 
-    try
-        set(obj.State.Axis(axIndex).Handle, 'FontUnits', fontUnits);
-    catch
-        % TODO
+    if isprop(axisData, "FontUnits")
+        axisData.FontUnits = fontUnits;
     end
 end
diff --git a/plotly/plotlyfig_aux/core/updateAxisMultipleYAxes.m b/plotly/plotlyfig_aux/core/updateAxisMultipleYAxes.m
index 5f893092..167a103d 100644
--- a/plotly/plotlyfig_aux/core/updateAxisMultipleYAxes.m
+++ b/plotly/plotlyfig_aux/core/updateAxisMultipleYAxes.m
@@ -1,29 +1,22 @@
 function obj = updateAxisMultipleYAxes(obj,axIndex,yaxIndex)
     %----UPDATE AXIS DATA/LAYOUT----%
 
-    %-STANDARDIZE UNITS-%
-    axisUnits = obj.State.Axis(axIndex).Handle.Units;
-    set(obj.State.Axis(axIndex).Handle,'Units','normalized')
-
-    try
-        fontUnits = obj.State.Axis(axIndex).Handle.FontUnits;
-        set(obj.State.Axis(axIndex).Handle,'FontUnits','points')
-    catch
-        % TODO
-    end
-
     %-AXIS DATA STRUCTURE-%
     axisData = obj.State.Axis(axIndex).Handle;
 
-    %---------------------------------------------------------------------%
-
-    xaxis = extractAxisData(obj,axisData, 'X');
-    [yaxis, yAxisLim] = extractAxisDataMultipleYAxes(obj, axisData, yaxIndex);
+    %-STANDARDIZE UNITS-%
+    axisUnits = axisData.Units;
+    axisData.Units = 'normalized';
 
-    %---------------------------------------------------------------------%
+    if isprop(axisData, "FontUnits")
+        fontUnits = axisData.FontUnits;
+        axisData.FontUnits = 'points';
+    end
 
-    %-getting and setting postion data-%
+    xaxis = extractAxisData(obj,axisData, 'X');
+    yaxis = extractAxisDataMultipleYAxes(obj, axisData, yaxIndex);
 
+    %-getting and setting position data-%
     xo = axisData.Position(1);
     yo = axisData.Position(2);
     w = axisData.Position(3);
@@ -35,19 +28,11 @@
         h = wh;
     end
 
-    %---------------------------------------------------------------------%
-
     xaxis.domain = min([xo xo + w],1);
-    scene.domain.x = min([xo xo + w],1);
     yaxis.domain = min([yo yo + h],1);
-    scene.domain.y = min([yo yo + h],1);
-
-    %---------------------------------------------------------------------%
 
     [xsource, ysource, xoverlay, yoverlay] = findSourceAxis(obj, axIndex, yaxIndex);
 
-    %---------------------------------------------------------------------%
-
     xaxis.anchor = "y" + ysource;
     yaxis.anchor = "x" + xsource;
 
@@ -58,32 +43,22 @@
         yaxis.overlaying = "y" + yoverlay;
     end
 
-    %---------------------------------------------------------------------%
-
     % update the layout field (do not overwrite source)
     if xsource == axIndex
-        obj.layout = setfield(obj.layout, "xaxis" + xsource, xaxis);
+        obj.layout.("xaxis" + xsource) = xaxis;
     end
 
-    %---------------------------------------------------------------------%
-
     % update the layout field (do not overwrite source)
-    obj.layout = setfield(obj.layout, "yaxis" + ysource, yaxis);
-
-    %---------------------------------------------------------------------%
+    obj.layout.("yaxis" + ysource) = yaxis;
 
     %-REVERT UNITS-%
-    set(obj.State.Axis(axIndex).Handle,'Units',axisUnits);
+    axisData.Units = axisUnits;
 
-    try
-        set(obj.State.Axis(axIndex).Handle,'FontUnits',fontUnits);
-    catch
-        % TODO
+    if isprop(axisData, "FontUnits")
+        axisData.FontUnits = fontUnits;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-do y-axes visibles-%
+    %-do y-axes visible-%
     obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
     plotIndex = obj.PlotOptions.nPlots;
 
diff --git a/plotly/plotlyfig_aux/core/updateColorbar.m b/plotly/plotlyfig_aux/core/updateColorbar.m
index 2d142e20..51ab7cc0 100644
--- a/plotly/plotlyfig_aux/core/updateColorbar.m
+++ b/plotly/plotlyfig_aux/core/updateColorbar.m
@@ -1,4 +1,4 @@
-function obj = updateColorbar(obj,colorbarIndex)
+function updateColorbar(obj,colorbarIndex)
     % title: ...[DONE]
     % titleside: ...[DONE]
     % titlefont: ...[DONE]
@@ -38,14 +38,12 @@
     try
         colorbarData = obj.State.Colorbar(colorbarIndex).Handle;
     catch
-        disp('could not get colorbar data');
+        disp("could not get colorbar data");
     end
 
     %-STANDARDIZE UNITS-%
     colorbarUnits = colorbarData.Units;
-    set(obj.State.Colorbar(colorbarIndex).Handle, 'Units', 'normalized');
-
-    %---------------------------------------------------------------------%
+    obj.State.Colorbar(colorbarIndex).Handle.Units = "normalized";
 
     %-variable initialization-%
     if isHG2
@@ -58,7 +56,7 @@
         end
     end
 
-    outlineColor = sprintf("rgb(%d,%d,%d)", outlineColor);
+    outlineColor = getStringColor(outlineColor);
     lineWidth = colorbarData.LineWidth ...
             * obj.PlotlyDefaults.AxisLineIncreaseFactor;
     tickLength = min(obj.PlotlyDefaults.MaxTickLength, ...
@@ -66,8 +64,6 @@
             * obj.layout.width, colorbarData.TickLength(1) ...
             * colorbarData.Position(4) * obj.layout.height));
 
-    %---------------------------------------------------------------------%
-
     %-colorbar placement-%
     colorbar.x = colorbarData.Position(1);
     colorbar.y = colorbarData.Position(2);
@@ -76,18 +72,16 @@
 
     colorbar.xpad = obj.PlotlyDefaults.MarginPad;
     colorbar.ypad = obj.PlotlyDefaults.MarginPad;
-    colorbar.xanchor = 'left';
-    colorbar.yanchor = 'bottom';
+    colorbar.xanchor = "left";
+    colorbar.yanchor = "bottom";
 
     colorbar.outlinewidth = lineWidth;
     colorbar.outlinecolor = outlineColor;
     colorbar.exponentformat = obj.PlotlyDefaults.ExponentFormat;
-    colorbar.thicknessmode = 'fraction';
-    colorbar.lenmode = 'fraction';
-    
-    %---------------------------------------------------------------------%
+    colorbar.thicknessmode = "fraction";
+    colorbar.lenmode = "fraction";
 
-    %-tick setings-%
+    %-tick settings-%
     colorbar.tickcolor = outlineColor;
     colorbar.tickfont.color = outlineColor;
     colorbar.tickfont.size = colorbarData.FontSize;
@@ -95,8 +89,6 @@
     colorbar.ticklen = tickLength;
     colorbar.tickwidth = lineWidth;
 
-    %---------------------------------------------------------------------%
-
     %-get colorbar title and labels-%
     colorbarTitle = colorbarData.Label;
 
@@ -113,26 +105,22 @@
         colorbarYLabelData = colorbarYLabel;
     end
 
-    %---------------------------------------------------------------------%
-
     %-STANDARDIZE UNITS FOR TITLE-%
     titleunits = colorbarTitleData.Units;
     titlefontunits = colorbarTitleData.FontUnits;
     ylabelunits = colorbarYLabelData.Units;
     ylabelfontunits = colorbarYLabelData.FontUnits;
-    set(colorbarTitle,'Units', 'data');
-    set(colorbarYLabel,'Units', 'data');
-    set(colorbarYLabel,'FontUnits', 'points');
+    colorbarTitle.Units = "data";
+    colorbarYLabel.Units = "data";
+    colorbarYLabel.FontUnits = "points";
     if ~isHG2
         xlabelunits = colorbarXLabelData.Units;
         xlabelfontunits = colorbarXLabelData.FontUnits;
-        set(colorbarTitle,'FontUnits', 'points');
-        set(colorbarXLabel,'Units', 'data');
-        set(colorbarXLabel,'FontUnits', 'points');
+        colorbarTitle.FontUnits = "points";
+        colorbarXLabel.Units = "data";
+        colorbarXLabel.FontUnits = "points";
     end
 
-    %---------------------------------------------------------------------%
-
     %-colorbar title settings-%
     isTitle = true;
 
@@ -141,36 +129,30 @@
         titleInterpreter = colorbarTitleData.Interpreter;
 
         if colorbarTitleData.Rotation == 90
-            titleSide = 'right';
+            titleSide = "right";
         else
-            titleSide = 'top';
+            titleSide = "top";
         end
 
         titleFontSize = 1.20 * colorbarTitleData.FontSize;
-        titleFontColor = sprintf("rgb(%d,%d,%d)", ...
-                round(255*colorbarTitleData.Color));
+        titleFontColor = getStringColor(round(255*colorbarTitleData.Color));
         titleFontFamily = matlab2plotlyfont(colorbarTitleData.FontName);
-
     elseif ~isempty(colorbarXLabelData.String)
         titleString = colorbarXLabelData.String;
         titleInterpreter = colorbarXLabelData.Interpreter;
 
-        titleSide = 'right';
+        titleSide = "right";
         titleFontSize = 1.20 * colorbarXLabelData.FontSize;
-        titleFontColor = sprintf("rgb(%d,%d,%d)", ...
-                round(255*colorbarXLabelData.Color));
+        titleFontColor = getStringColor(round(255*colorbarXLabelData.Color));
         titleFontFamily = matlab2plotlyfont(colorbarXLabelData.FontName);
-
     elseif ~isempty(colorbarYLabelData.String)
         titleString = colorbarYLabelData.String;
         titleInterpreter = colorbarYLabelData.Interpreter;
 
-        titleSide = 'bottom';
+        titleSide = "bottom";
         titleFontSize = 1.20 * colorbarYLabelData.FontSize;
-        titleFontColor = sprintf("rgb(%d,%d,%d)", ...
-                round(255*colorbarYLabelData.Color));
+        titleFontColor = getStringColor(round(255*colorbarYLabelData.Color));
         titleFontFamily = matlab2plotlyfont(colorbarYLabelData.FontName);
-
     else
         isTitle = false;
     end
@@ -183,22 +165,17 @@
         colorbar.titlefont.family = titleFontFamily;
     end
 
-    %---------------------------------------------------------------------%
-
     %-REVERT UNITS FOR TITLE-%
-    set(colorbarTitle,'Units', titleunits);
-    set(colorbarTitle,'FontUnits', titlefontunits);
-    set(colorbarYLabel,'Units', ylabelunits);
-    set(colorbarYLabel,'FontUnits', ylabelfontunits);
+    colorbarTitle.Units = titleunits;
+    colorbarTitle.FontUnits = titlefontunits;
+    colorbarYLabel.Units = ylabelunits;
+    colorbarYLabel.FontUnits = ylabelfontunits;
 
     if ~isHG2
-        set(colorbarXLabel,'Units', xlabelunits);
-        set(colorbarXLabel,'FontUnits', xlabelfontunits);
+        colorbarXLabel.Units = xlabelunits;
+        colorbarXLabel.FontUnits = xlabelfontunits;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-tick labels-%
     tickValues = colorbarData.Ticks;
     tickLabels = colorbarData.TickLabels;
     showTickLabels = true;
@@ -206,56 +183,45 @@
     if isHG2
         if isempty(tickValues)
             showTickLabels = false;
-            colorbar.ticks = '';
-
+            colorbar.ticks = "";
         elseif isempty(tickLabels)
             colorbar.tickvals = tickValues;
-
         else
             colorbar.tickvals = tickValues;
             colorbar.ticktext = tickLabels;
         end
-
         if showTickLabels
             colorbar.showticklabels = showTickLabels;
-
             switch colorbarData.AxisLocation
-                case 'in'
-                    colorbar.ticklabelposition = 'inside';
-                case 'out'
-                    colorbar.ticklabelposition = 'outside';
+                case "in"
+                    colorbar.ticklabelposition = "inside";
+                case "out"
+                    colorbar.ticklabelposition = "outside";
             end
-
             switch colorbarData.TickDirection
-                case 'in'
-                    colorbar.ticks = 'inside';
-                case 'out'
-                    colorbar.ticks = 'outside';
+                case "in"
+                    colorbar.ticks = "inside";
+                case "out"
+                    colorbar.ticks = "outside";
             end
-
         end
-
     else
         colorbar = setTicksNotHG2(colorbar, colorbarData);
     end
 
-    %---------------------------------------------------------------------%
-
     %-colorbar bg-color-%
     if ~isHG2
         if ~ischar(colorbarData.Color)
-            bgColor = round(255*colorbarData.Color);
+            bgColor = colorbarData.Color;
         else
-            bgColor = round(255*figureData.Color);
+            bgColor = figureData.Color;
         end
-        
-        obj.layout.plot_bgcolor = sprintf("rgb(%d,%d,%d)", bgColor);
-    end
 
-    %---------------------------------------------------------------------%
+        obj.layout.plot_bgcolor = getStringColor(round(255*bgColor));
+    end
 
     %-ASSOCIATED DATA-%
-    if isfield(colorbarData.UserData, 'dataref')
+    if isfield(colorbarData.UserData, "dataref")
         colorbarDataIndex = colorbarData.UserData.dataref;
     else
         colorbarDataIndex = ...
@@ -265,86 +231,44 @@
     obj.data{colorbarDataIndex}.colorbar = colorbar;
     obj.data{colorbarDataIndex}.showscale = true;
 
-    %---------------------------------------------------------------------%
-
     %-REVERT UNITS-%
-    set(obj.State.Colorbar(colorbarIndex).Handle, 'Units', colorbarUnits);
+    obj.State.Colorbar(colorbarIndex).Handle.Units = colorbarUnits;
 end
 
 function colorbar = setTicksNotHG2(colorbar, colorbarData)
     verticalOrientation = colorbar.len > colorbar.thickness;
 
     if verticalOrientation
-        if isempty(colorbarData.YTick)
-            %-show tick labels-%
-            colorbar.ticks = '';
-            colorbar.showticklabels = false;
-        else
-            %-tick direction-%
-            switch colorbarData.TickDir
-                case 'in'
-                    colorbar.ticks = 'inside';
-                case 'out'
-                    colorbar.ticks = 'outside';
-            end
+        tick = colorbarData.YTick;
+        tickLabel = colorbarData.YTickLabel;
+        tickLabelMode = colorbarData.YTickLabelMode;
+    else
+        tick = colorbarData.XTick;
+        tickLabel = colorbarData.XTickLabel;
+        tickLabelMode = colorbarData.XTickLabelMode;
+    end
 
-            if strcmp(colorbarData.YTickLabelMode,'auto')
-                %-autotick-%
-                colorbar.autotick = true;
-                %-numticks-%
-                % nticks = max ticks (so + 1)
-                colorbar.nticks = length(colorbarData.YTick) + 1;
-            else
-                %-show tick labels-%
-                if isempty(colorbarData.YTickLabel)
-                    colorbar.showticklabels = false;
-                else
-                    %-autotick-%
-                    colorbar.autotick = false;
-                    %-tick0-%
-                    colorbar.tick0 = ...
-                            str2double(colorbarData.YTickLabel(1,:));
-                    %-dtick-%
-                    colorbar.dtick = ...
-                            str2double(colorbarData.YTickLabel(2,:)) ...
-                            - str2double(colorbarData.YTickLabel(1,:));
-                end
-            end
-        end
+    if isempty(tick)
+        colorbar.ticks = "";
+        colorbar.showticklabels = false;
     else
-        if isempty(colorbarData.XTick)
-            %-show tick labels-%
-            colorbar.ticks = '';
-            colorbar.showticklabels = false;
+        switch colorbarData.TickDir
+            case "in"
+                colorbar.ticks = "inside";
+            case "out"
+                colorbar.ticks = "outside";
+        end
+        if strcmp(tickLabelMode, "auto")
+            colorbar.autotick = true;
+            colorbar.nticks = length(tick) + 1;
         else
-            %-tick direction-%
-            switch colorbarData.TickDir
-                case 'in'
-                    colorbar.ticks = 'inside';
-                case 'out'
-                    colorbar.ticks = 'outside';
-            end
-
-            if strcmp(colorbarData.XTickLabelMode,'auto')
-                %-autotick-%
-                colorbar.autotick = true;
-                %-numticks-%
-                colorbar.nticks = length(colorbarData.XTick) + 1;
+            if isempty(tickLabel)
+                colorbar.showticklabels = false;
             else
-                %-show tick labels-%
-                if isempty(colorbarData.XTickLabel)
-                    colorbar.showticklabels = false;
-                else
-                    %-autotick-%
-                    colorbar.autotick = false;
-                    %-tick0-%
-                    colorbar.tick0 = ...
-                            str2double(colorbarData.XTickLabel(1,:));
-                    %-dtick-%
-                    colorbar.dtick = ...
-                            str2double(colorbarData.XTickLabel(2,:)) ...
-                            - str2double(colorbarData.XTickLabel(1,:));
-                end
+                colorbar.autotick = false;
+                colorbar.tick0 = str2double(tickLabel(1,:));
+                colorbar.dtick = str2double(tickLabel(2,:)) ...
+                                 - str2double(tickLabel(1,:));
             end
         end
     end
diff --git a/plotly/plotlyfig_aux/core/updateConstantLine.m b/plotly/plotlyfig_aux/core/updateConstantLine.m
index 13214824..a97751f9 100644
--- a/plotly/plotlyfig_aux/core/updateConstantLine.m
+++ b/plotly/plotlyfig_aux/core/updateConstantLine.m
@@ -1,4 +1,4 @@
-function updateConstantLine(obj,plotIndex)
+function data = updateConstantLine(obj,plotIndex)
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
 
@@ -8,93 +8,127 @@ function updateConstantLine(obj,plotIndex)
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj, axIndex);
 
-    %---------------------------------------------------------------------%
+    data.xaxis = "x" + xsource;
+    data.yaxis = "y" + ysource;
+    data.type = "scatter";
+    data.visible = plotData.Visible == "on";
 
-    obj.data{plotIndex}.xaxis = "x" + xsource;
-    obj.data{plotIndex}.yaxis = "y" + ysource;
-    obj.data{plotIndex}.type = "scatter";
-    obj.data{plotIndex}.visible = strcmp(plotData.Visible, "on");
-
-    %---------------------------------------------------------------------%
-
-    %-scatter-%
-    xaxis = obj.layout.("xaxis"+xsource);
-    yaxis = obj.layout.("yaxis"+ysource);
+    xaxis = obj.layout.("xaxis" + xsource);
+    yaxis = obj.layout.("yaxis" + ysource);
     value = [plotData.Value plotData.Value];
     if plotData.InterceptAxis == "y"
-        obj.data{plotIndex}.x = xaxis.range;
-        obj.data{plotIndex}.y = value;
+        data.x = xaxis.range;
+        data.y = value;
     else
-        obj.data{plotIndex}.x = value;
-        obj.data{plotIndex}.y = yaxis.range;
+        data.x = value;
+        data.y = yaxis.range;
     end
 
-    %---------------------------------------------------------------------%
+    if ~isempty(plotData.Label)
+        annotation = struct();
+
+        annotation.showarrow = false;
+
+        annotation.xref = "x" + xsource;
+        annotation.yref = "y" + ysource;
+
+        if plotData.InterceptAxis == "x"
+            annotation.textangle = -90;
+        end
+
+        annotation.xanchor = plotData.LabelHorizontalAlignment;
+
+        switch plotData.LabelVerticalAlignment
+            case {"top", "cap"}
+                annotation.yanchor = "top";
+            case "middle"
+                annotation.yanchor = "middle";
+            case {"baseline","bottom"}
+                annotation.yanchor = "bottom";
+        end
+
+        annotation.text = parseString( ...
+                plotData.Label, plotData.Interpreter);
+        annotation.text = "<b>" + join( ...
+                string(annotation.text), "<br>") + "</b>";
+
+        if plotData.InterceptAxis == "x"
+            annotation.x = plotData.Value;
+            annotation.y = yaxis.range(2);
+        else
+            annotation.x = xaxis.range(2);
+            annotation.y = plotData.Value;
+        end
+
+        col = round(255*plotData.LabelColor);
+        annotation.font.color = getStringColor(col);
+
+        annotation.font.family = matlab2plotlyfont(plotData.FontName);
+        annotation.font.size = plotData.FontSize;
+        switch plotData.FontWeight
+            case {"bold","demi"}
+                annotation.text = "<b>" + annotation.text + "</b>";
+            otherwise
+        end
+
+        if plotData.LabelHorizontalAlignment == "center"
+            if plotData.InterceptAxis == "x"
+                ylim = plotData.Parent.YLim;
+                textWidth = text(0,0,plotData.Label,units="normalized", ...
+                        rotation=90,Visible="off").Extent(4);
+                textWidth = textWidth * (ylim(2) - ylim(1));
+                data.y(2) = data.y(2) - textWidth;
+            else
+                xlim = plotData.Parent.XLim;
+                textWidth = text(0,0,plotData.Label,units="normalized", ...
+                        Visible="off").Extent(3);
+                textWidth = textWidth * (xlim(2) - xlim(1));
+                data.x(2) = data.x(2) - textWidth;
+            end
+        end
+
+        obj.layout.annotations{end+1} = annotation;
+    end
 
-    %-Fro 3D plots-%
+    %-For 3D plots-%
     obj.PlotOptions.is3d = false; % by default
 
     if isfield(plotData,"ZData")
         numbset = unique(plotData.ZData);
         if any(plotData.ZData) && length(numbset)>1
-            %-scatter z-%
-            obj.data{plotIndex}.z = plotData.ZData;
-
-            %-overwrite type-%
-            obj.data{plotIndex}.type = "scatter3d";
-
+            data.z = plotData.ZData;
+            data.type = "scatter3d";
             %-flag to manage 3d plots-%
             obj.PlotOptions.is3d = true;
         end
     end
 
-    %---------------------------------------------------------------------%
-
-    %-scatter name-%
-    obj.data{plotIndex}.name = plotData.DisplayName;
+    data.name = plotData.DisplayName;
 
-    %---------------------------------------------------------------------%
-
-    %-scatter mode-%
     if plotData.Type ~= "constantline" ...
-            && ~strcmpi("none", plotData.Marker) ...
-            && ~strcmpi("none", plotData.LineStyle)
+            && lower(plotData.Marker) ~= "none" ...
+            && lower(plotData.LineStyle) ~= "none"
         mode = "lines+markers";
     elseif plotData.Type ~= "constantline" ...
-            && ~strcmpi("none", plotData.Marker)
+            && lower(plotData.Marker) ~= "none"
         mode = "markers";
-    elseif ~strcmpi("none", plotData.LineStyle)
+    elseif lower(plotData.LineStyle) ~= "none"
         mode = "lines";
     else
         mode = "none";
     end
 
-    obj.data{plotIndex}.mode = mode;
-
-    %---------------------------------------------------------------------%
-
-    %-scatter line-%
-    obj.data{plotIndex}.line = extractLineLine(plotData);
-
-    %---------------------------------------------------------------------%
+    data.mode = mode;
+    data.line = extractLineLine(plotData);
 
-    %-scatter marker-%
     if plotData.Type ~= "constantline"
-        obj.data{plotIndex}.marker = extractLineMarker(plotData);
+        data.marker = extractLineMarker(plotData);
     end
 
-    %---------------------------------------------------------------------%
-
-    %-scatter showlegend-%
-    leg = get(plotData.Annotation);
-    legInfo = get(leg.LegendInformation);
-
-    switch legInfo.IconDisplayStyle
+    switch plotData.Annotation.LegendInformation.IconDisplayStyle
         case "on"
-            showleg = true;
+            data.showlegend = true;
         case "off"
-            showleg = false;
+            data.showlegend = false;
     end
-
-    obj.data{plotIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/core/updateData.m b/plotly/plotlyfig_aux/core/updateData.m
index c4bb4396..49978ad2 100644
--- a/plotly/plotlyfig_aux/core/updateData.m
+++ b/plotly/plotlyfig_aux/core/updateData.m
@@ -6,29 +6,25 @@
         updatePie3(obj, dataIndex);
     elseif ismember("pcolor", lower(obj.PlotOptions.TreatAs))
         updatePColor(obj, dataIndex);
-    elseif ismember("contour3", lower(obj.PlotOptions.TreatAs))
-        updateContour3(obj, dataIndex);
     elseif ismember("ezpolar", lower(obj.PlotOptions.TreatAs))
-        updateLineseries(obj, dataIndex);
-    elseif ismember("polarhistogram", lower(obj.PlotOptions.TreatAs))
-        updateHistogramPolar(obj, dataIndex); 
+        obj.data{dataIndex} = updateLineseries(obj, dataIndex);
     elseif ismember("coneplot", lower(obj.PlotOptions.TreatAs))
         updateConeplot(obj, dataIndex);
     elseif ismember("bar3", lower(obj.PlotOptions.TreatAs))
         updateBar3(obj, dataIndex);
     elseif ismember("bar3h", lower(obj.PlotOptions.TreatAs))
-        updateBar3h(obj, dataIndex); 
+        updateBar3h(obj, dataIndex);
     elseif ismember("fmesh", lower(obj.PlotOptions.TreatAs))
         updateFmesh(obj, dataIndex);
     elseif ismember("surfc", lower(obj.PlotOptions.TreatAs))
-        updateSurfc(obj, dataIndex); 
+        updateSurfc(obj, dataIndex);
     elseif ismember("meshc", lower(obj.PlotOptions.TreatAs))
-        updateSurfc(obj, dataIndex); 
+        updateSurfc(obj, dataIndex);
     elseif ismember("surfl", lower(obj.PlotOptions.TreatAs))
         updateSurfl(obj, dataIndex);
     else %-update plot based on plot call class-%
         switch lower(obj.State.Plot(dataIndex).Class)
-            %--SPIDER PLOT -> SPECIAL CASE--%            
+            %--SPIDER PLOT -> SPECIAL CASE--%
             case "spider_plot_class"
                 updateSpiderPlot(obj, dataIndex);
             %--GEOAXES -> SPECIAL CASE--%
@@ -36,50 +32,54 @@
                 UpdateGeoAxes(obj, dataIndex);
             %-EMULATE AXES -> SPECIAL CASE--%
             case "nothing"
-                updateOnlyAxes(obj, dataIndex);
+                obj.data{dataIndex} = updateOnlyAxes(obj, dataIndex);
             %--CORE PLOT OBJECTS--%
             case "geobubble"
                 updateGeobubble(obj, dataIndex);
             case "scatterhistogram"
-                updateScatterhistogram(obj, dataIndex); 
+                updateScatterhistogram(obj, dataIndex);
             case "wordcloud"
                 updateWordcloud(obj, dataIndex);
             case "heatmap"
-                updateHeatmap(obj, dataIndex);
+                obj.data{dataIndex} = updateHeatmap(obj, dataIndex);
             case "image"
                 if ~obj.PlotOptions.Image3D
-                    updateImage(obj, dataIndex);
+                    obj.data{dataIndex} = updateImage(obj, dataIndex);
                 else
                     updateImage3D(obj, dataIndex);
                 end
             case "line"
                 if obj.PlotlyDefaults.isGeoaxis
                     updateGeoPlot(obj, dataIndex);
-                elseif ismember("polarplot", lower(obj.PlotOptions.TreatAs))
-                    updatePolarplot(obj, dataIndex);
+                elseif obj.State.Plot(dataIndex).AssociatedAxis.Type == "polaraxes"
+                    obj.data{dataIndex} = updatePolarplot(obj, dataIndex);
                 elseif ismember("ternplot", lower(obj.PlotOptions.TreatAs))
                     updateTernaryPlot(obj, dataIndex);
                 else
-                    updateLineseries(obj, dataIndex);
+                    obj.data{dataIndex} = updateLineseries(obj, dataIndex);
                 end
             case "constantline"
-                updateConstantLine(obj, dataIndex);
+                obj.data{dataIndex} = updateConstantLine(obj, dataIndex);
             case "categoricalhistogram"
-                updateCategoricalHistogram(obj, dataIndex); 
+                updateCategoricalHistogram(obj, dataIndex);
             case "histogram"
-                updateHistogram(obj, dataIndex);
+                if obj.State.Plot(dataIndex).AssociatedAxis.Type == "polaraxes"
+                    obj.data{dataIndex} = updateHistogramPolar(obj, dataIndex);
+                else
+                    obj.data{dataIndex} = updateHistogram(obj, dataIndex);
+                end
             case "histogram2"
                 updateHistogram2(obj, dataIndex);
             case "patch"
                 % check for histogram
                 if isHistogram(obj,dataIndex)
-                    updateHistogram(obj,dataIndex);
+                    obj.data{dataIndex} = updateHistogram(obj,dataIndex);
                 elseif ismember("ternplotpro", lower(obj.PlotOptions.TreatAs))
                     updateTernaryPlotPro(obj, dataIndex);
                 elseif ismember("ternpcolor", lower(obj.PlotOptions.TreatAs))
                     updateTernaryPlotPro(obj, dataIndex);
                 elseif ismember("isosurface", lower(obj.PlotOptions.TreatAs))
-                    updateIsosurface(obj, dataIndex);
+                    obj.data{dataIndex} = updateIsosurface(obj, dataIndex);
                 else
                     updatePatch(obj, dataIndex);
                 end
@@ -87,13 +87,13 @@
                 updateRectangle(obj,dataIndex);
             case "surface"
                 if ismember("surf", lower(obj.PlotOptions.TreatAs))
-                    updateSurf(obj, dataIndex); 
+                    updateSurf(obj, dataIndex);
                 elseif ismember("mesh", lower(obj.PlotOptions.TreatAs))
                     updateMesh(obj, dataIndex);
                 elseif ismember("slice", lower(obj.PlotOptions.TreatAs))
                     updateSlice(obj, dataIndex);
                 else
-                    updateSurfaceplot(obj,dataIndex);
+                    obj.data{dataIndex} = updateSurfaceplot(obj,dataIndex);
                 end
             case {"functionsurface", "parameterizedfunctionsurface"}
                 updateFunctionSurface(obj,dataIndex);
@@ -101,67 +101,72 @@
                 updateImplicitFunctionSurface(obj,dataIndex);
                 %-GROUP PLOT OBJECTS-%
             case "area"
-                updateArea(obj, dataIndex); 
+                obj.data{dataIndex} = updateArea(obj, dataIndex);
             case "areaseries"
                 updateAreaseries(obj, dataIndex);
             case "animatedline"
                 updateAnimatedLine(obj, dataIndex);
             case "bar"
-                updateBar(obj, dataIndex); 
+                obj.data{dataIndex} = updateBar(obj, dataIndex);
             case "barseries"
                 updateBarseries(obj, dataIndex);
             case "baseline"
                 updateBaseline(obj, dataIndex);
             case {"contourgroup","contour"}
-                if obj.PlotOptions.ContourProjection
+                if obj.State.Plot(dataIndex).AssociatedAxis.ZGrid == "on"
+                    obj.data{dataIndex} = updateContour3(obj, dataIndex);
+                elseif obj.PlotOptions.ContourProjection
                     updateContourProjection(obj,dataIndex);
                 elseif ismember("terncontour", lower(obj.PlotOptions.TreatAs))
                     updateTernaryContour(obj, dataIndex);
                 else
-                    updateContourgroup(obj,dataIndex);
+                    obj.data{dataIndex} = updateContourgroup(obj,dataIndex);
                 end
             case "functioncontour"
-                updateFunctionContour(obj,dataIndex);
+                obj.data{dataIndex} = updateFunctionContour(obj,dataIndex);
             case "errorbar"
-                updateErrorbar(obj,dataIndex); 
+                obj.data{dataIndex} = updateErrorbar(obj,dataIndex);
             case "errorbarseries"
-                updateErrorbarseries(obj,dataIndex);
+                obj.data{dataIndex} = updateErrorbarseries(obj,dataIndex);
             case "lineseries"
-                updateLineseries(obj, dataIndex);
+                obj.data{dataIndex} = updateLineseries(obj, dataIndex);
             case "quiver"
-                updateQuiver(obj, dataIndex); 
+                updateQuiver(obj, dataIndex);
             case "quivergroup"
                 updateQuivergroup(obj, dataIndex);
             case "scatter"
-                if ismember("scatterpolar", lower(obj.PlotOptions.TreatAs))
+                if obj.State.Plot(dataIndex).AssociatedAxis.Type == "polaraxes"
                     updateScatterPolar(obj, dataIndex);
                 elseif obj.PlotlyDefaults.isGeoaxis
                     updateGeoScatter(obj, dataIndex);
                 else
-                    updateScatter(obj, dataIndex); 
+                    obj.data{dataIndex} = updateScatter(obj, dataIndex);
                 end
             case "scattergroup"
                 updateScattergroup(obj, dataIndex);
             case "stair"
-                updateStair(obj, dataIndex); 
+                obj.data{dataIndex} = updateStair(obj, dataIndex);
             case "stairseries"
                 updateStairseries(obj, dataIndex);
             case "stackedplot"
                 updateStackedplot(obj, dataIndex);
             case "stem"
-                updateStem(obj, dataIndex); 
+                obj.data{dataIndex} = updateStem(obj, dataIndex);
             case "stemseries"
                 updateStemseries(obj, dataIndex);
             case "surfaceplot"
-                updateSurfaceplot(obj,dataIndex);
+                obj.data{dataIndex} = updateSurfaceplot(obj,dataIndex);
             case "implicitfunctionline"
-                updateLineseries(obj, dataIndex);
+                obj.data{dataIndex} = updateLineseries(obj, dataIndex);
                 %--Plotly supported MATLAB group plot objects--%
             case {"hggroup","group"}
                 % check for boxplot
                 if isBoxplot(obj, dataIndex)
                     updateBoxplot(obj, dataIndex);
                 end
+            case {"uimenu","uicontextmenu","legend"}
+                % Do nothing
+                return
             otherwise
                 error("Non-supported plot: %s", ...
                         lower(obj.State.Plot(dataIndex).Class));
@@ -183,7 +188,7 @@
     ax = obj.State.Plot(dataIndex).AssociatedAxis;
     if ~ismember(ax.Type,specialAxisPlots())
         %-AXIS INDEX-%
-        axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
+        axIndex = obj.getAxisIndex(ax);
 
         %-CHECK FOR MULTIPLE AXES-%
         [xsource, ysource] = findSourceAxis(obj,axIndex);
@@ -192,20 +197,25 @@
         xaxis = obj.layout.("xaxis" + xsource);
         yaxis = obj.layout.("yaxis" + ysource);
 
-        %-----------------------------------------------------------------%
-
         % check for xaxis dates
-        if strcmpi(xaxis.type, "date")
+        if xaxis.type == "date"
             obj.data{dataIndex}.x = convertDate(obj.data{dataIndex}.x);
         elseif xaxis.type == "duration"
             obj.data{dataIndex}.x = convertDuration(obj.data{dataIndex}.x);
         end
 
+        % Plotly requires x and y to be iterable
+        if isfield(obj.data{dataIndex},"x") && isscalar(obj.data{dataIndex}.x)
+            obj.data{dataIndex}.x = {obj.data{dataIndex}.x};
+        end
+        if isfield(obj.data{dataIndex},"y") && isscalar(obj.data{dataIndex}.y)
+            obj.data{dataIndex}.y = {obj.data{dataIndex}.y};
+        end
+
         % check for xaxis categories
         if strcmpi(xaxis.type, "category") && ...
                 ~any(strcmp(obj.data{dataIndex}.type,["heatmap" "box"]))
-            obj.data{dataIndex}.x = ...
-                    obj.State.Plot(dataIndex).AssociatedAxis.XTickLabel;
+            obj.data{dataIndex}.x = ax.XTickLabel;
             obj.layout.("xaxis" + xsource).autotick = true;
         end
 
@@ -219,14 +229,11 @@
         % check for yaxis categories
         if strcmpi(yaxis.type, "category") && ...
                 ~any(strcmp(obj.data{dataIndex}.type, ["heatmap" "box"]))
-            obj.data{dataIndex}.y = ...
-                    obj.State.Plot(dataIndex).AssociatedAxis.YTickLabel;
+            obj.data{dataIndex}.y = ax.YTickLabel;
             obj.layout.("yaxis" + xsource).autotick = true;
         end
     end
 
-    %---------------------------------------------------------------------%
-
     try
         if obj.layout.isAnimation
             %- Play Button Options-%
diff --git a/plotly/plotlyfig_aux/core/updateFigure.m b/plotly/plotlyfig_aux/core/updateFigure.m
index f72c0af7..43ec31d8 100644
--- a/plotly/plotlyfig_aux/core/updateFigure.m
+++ b/plotly/plotlyfig_aux/core/updateFigure.m
@@ -32,13 +32,11 @@
 
     %-STANDARDIZE UNITS-%
     figunits = obj.State.Figure.Handle.Units;
-    set(obj.State.Figure.Handle,'Units','pixels');
+    obj.State.Figure.Handle.Units = 'pixels';
 
     %-FIGURE DATA-%
     figure_data = obj.State.Figure.Handle;
 
-    %---------------------------------------------------------------------%
-
     obj.layout.autosize = false;
     obj.layout.margin.pad = obj.PlotlyDefaults.MarginPad;
 
@@ -53,8 +51,6 @@
     obj.layout.margin.b = 0;
     obj.layout.margin.t = 0;
 
-    %---------------------------------------------------------------------%
-
     if obj.PlotOptions.AxisEqual
         wh = min(figure_data.Position(3:4));
         w = wh;
@@ -68,10 +64,10 @@
     obj.layout.height = h * obj.PlotlyDefaults.FigureIncreaseFactor;
 
     col = round(255*figure_data.Color);
-    obj.layout.paper_bgcolor = sprintf("rgb(%d,%d,%d)", col);
+    obj.layout.paper_bgcolor = getStringColor(col);
 
     obj.layout.hovermode = 'closest';
 
     %-REVERT UNITS-%
-    set(obj.State.Figure.Handle,'Units',figunits);
+    obj.State.Figure.Handle.Units = figunits;
 end
diff --git a/plotly/plotlyfig_aux/core/updateHeatmapAnnotation.m b/plotly/plotlyfig_aux/core/updateHeatmapAnnotation.m
index 81b186a1..5527f10f 100644
--- a/plotly/plotlyfig_aux/core/updateHeatmapAnnotation.m
+++ b/plotly/plotlyfig_aux/core/updateHeatmapAnnotation.m
@@ -6,7 +6,6 @@
     % titlefont.color...[DONE]
 
     %------ANNOTATION FIELDS-------%
-
     % x: ...[DONE]
     % y: ...[DONE]
     % xref: ...[DONE]
@@ -30,7 +29,6 @@
     % bgcolor: ...[DONE]
     % opacity: ...[NOT SUPPORTED IN MATLAB]
 
-
     %-AXIS INDEX-%
     nanns = length(obj.layout.annotations);
     axIndex = nanns + obj.getAxisIndex(obj.State.Text(anIndex).AssociatedAxis);
@@ -41,57 +39,32 @@
     %-get heatmap title name-%
     title_name = obj.State.Text(anIndex).Handle;
 
-    %-show arrow-%
     obj.layout.annotations{axIndex}.showarrow = false;
 
-    %---------------------------------------------------------------------%
-
     %-anchor title to paper-%
     if obj.State.Text(anIndex).Title
-        %-xref-%
-        obj.layout.annotations{axIndex}.xref = 'paper';
-        %-yref-%
-        obj.layout.annotations{axIndex}.yref = 'paper';
+        obj.layout.annotations{axIndex}.xref = "paper";
+        obj.layout.annotations{axIndex}.yref = "paper";
     else
-        %-xref-%
         obj.layout.annotations{axIndex}.xref = "x" + xsource;
-        %-yref-%
         obj.layout.annotations{axIndex}.yref = "y" + ysource;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-xanchor-%
-    obj.layout.annotations{axIndex}.xanchor = 'middle';
-
-    %-align-%
-    obj.layout.annotations{axIndex}.align = 'middle';
-
-    %-xanchor-%
-    obj.layout.annotations{axIndex}.yanchor = 'top';
-
-
-    %---------------------------------------------------------------------%
-
-    %-text-%
-    obj.layout.annotations{axIndex}.text = sprintf('<b>%s</b>', title_name);
+    obj.layout.annotations{axIndex}.xanchor = "middle";
+    obj.layout.annotations{axIndex}.align = "middle";
+    obj.layout.annotations{axIndex}.yanchor = "top";
+    obj.layout.annotations{axIndex}.text = sprintf("<b>%s</b>", title_name);
     obj.layout.annotations{axIndex}.font.size = 14;
 
-    %---------------------------------------------------------------------%
-
     if obj.State.Text(anIndex).Title
         %-AXIS DATA-%
         xaxis = obj.layout.("xaxis" + xsource);
         yaxis = obj.layout.("yaxis" + ysource);
 
-        %-x position-%
         obj.layout.annotations{axIndex}.x = mean(xaxis.domain);
-        %-y position-%
         obj.layout.annotations{axIndex}.y = (yaxis.domain(2) + 0.04);
     else
-        %-x position-%
         obj.layout.annotations{axIndex}.x = text_data.Position(1);
-        %-y position-%
         obj.layout.annotations{axIndex}.y = text_data.Position(2);
     end
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/core/updateLegend.m b/plotly/plotlyfig_aux/core/updateLegend.m
index 4bf85345..19c74cf2 100644
--- a/plotly/plotlyfig_aux/core/updateLegend.m
+++ b/plotly/plotlyfig_aux/core/updateLegend.m
@@ -14,8 +14,8 @@
     %-STANDARDIZE UNITS-%
     legendunits = obj.State.Legend(legIndex).Handle.Units;
     fontunits = obj.State.Legend(legIndex).Handle.FontUnits;
-    set(obj.State.Legend(legIndex).Handle, 'Units', 'normalized');
-    set(obj.State.Legend(legIndex).Handle, 'FontUnits', 'points');
+    obj.State.Legend(legIndex).Handle.Units = 'normalized';
+    obj.State.Legend(legIndex).Handle.FontUnits = 'points';
 
     %-LEGEND DATA STRUCTURE-%
     legend_data = obj.State.Legend(legIndex).Handle;
@@ -37,20 +37,20 @@
         obj.layout.legend.borderwidth = legend_data.LineWidth;
 
         col = round(255*legend_data.EdgeColor);
-        obj.layout.legend.bordercolor = sprintf("rgb(%d,%d,%d)", col);
+        obj.layout.legend.bordercolor = getStringColor(col);
 
         col = round(255*legend_data.Color);
-        obj.layout.legend.bgcolor = sprintf("rgb(%d,%d,%d)", col);
+        obj.layout.legend.bgcolor = getStringColor(col);
 
         obj.layout.legend.font.size = legend_data.FontSize;
         obj.layout.legend.font.family = ...
                 matlab2plotlyfont(legend_data.FontName);
 
         col = round(255*legend_data.TextColor);
-        obj.layout.legend.font.color = sprintf("rgb(%d,%d,%d)", col);
+        obj.layout.legend.font.color = getStringColor(col);
     end
 
     %-REVERT UNITS-%
-    set(obj.State.Legend(legIndex).Handle,'Units',legendunits);
-    set(obj.State.Legend(legIndex).Handle,'FontUnits',fontunits);
+    obj.State.Legend(legIndex).Handle.Units = legendunits;
+    obj.State.Legend(legIndex).Handle.FontUnits = fontunits;
 end
diff --git a/plotly/plotlyfig_aux/core/updateLegendMultipleAxes.m b/plotly/plotlyfig_aux/core/updateLegendMultipleAxes.m
index a62583d3..e1e144db 100644
--- a/plotly/plotlyfig_aux/core/updateLegendMultipleAxes.m
+++ b/plotly/plotlyfig_aux/core/updateLegendMultipleAxes.m
@@ -27,27 +27,23 @@
                 obj.State.Plot(traceIndex).AssociatedAxis);
         [xSource, ySource] = findSourceAxis(obj, axIndex);
         xAxis = obj.layout.("xaxis" + xSource);
-        yAxis = obj.layout.("yaxis" + xSource);
+        yAxis = obj.layout.("yaxis" + ySource);
 
         allDomain(traceIndex, 1) = max(xAxis.domain);
         allDomain(traceIndex, 2) = max(yAxis.domain);
     end
 
-    [~, groupIndex] = unique(allNames);
+    [~, groupIndex] = unique(string(allNames));
 
     for traceIndex = groupIndex'
-    obj.data{traceIndex}.showlegend = allShowLegens(traceIndex); 
+    obj.data{traceIndex}.showlegend = allShowLegens(traceIndex);
     end
 
-    %---------------------------------------------------------------------%
-
     %-STANDARDIZE UNITS-%
     legendUnits = obj.State.Legend(legIndex).Handle.Units;
     fontUnits = obj.State.Legend(legIndex).Handle.FontUnits;
-    set(obj.State.Legend(legIndex).Handle,'Units','normalized');
-    set(obj.State.Legend(legIndex).Handle,'FontUnits','points');
-
-    %---------------------------------------------------------------------%
+    obj.State.Legend(legIndex).Handle.Units = 'normalized';
+    obj.State.Legend(legIndex).Handle.FontUnits = 'points';
 
     %-LEGEND DATA STRUCTURE-%
     legendData = obj.State.Legend(legIndex).Handle;
@@ -55,22 +51,11 @@
     % only displays last legend as global Plotly legend
     obj.layout.legend = struct();
 
-    %---------------------------------------------------------------------%
-
-    %-layout showlegend-%
     obj.layout.showlegend = strcmpi(legendData.Visible,'on');
-
-    %---------------------------------------------------------------------%
-
-    %-legend (x,y) coordenates-%
     obj.layout.legend.x = 1.005 * max(allDomain(:,1));
     obj.layout.legend.y = 1.001 * max(allDomain(:,2));
-
-    %-legend (x,y) refs-%
     obj.layout.legend.xref = 'paper';
     obj.layout.legend.yref = 'paper';
-
-    %-legend (x,y) anchors-%
     obj.layout.legend.xanchor = 'left';
     obj.layout.legend.yanchor = 'top';
 
@@ -79,21 +64,20 @@
         obj.layout.legend.borderwidth = legendData.LineWidth;
 
         col = round(255*legendData.EdgeColor);
-        obj.layout.legend.bordercolor = sprintf("rgb(%d,%d,%d)", col);
+        obj.layout.legend.bordercolor = getStringColor(col);
 
         col = round(255*legendData.Color);
-        obj.layout.legend.bgcolor = sprintf("rgb(%d,%d,%d)", col);
+        obj.layout.legend.bgcolor = getStringColor(col);
 
         obj.layout.legend.font.size = legendData.FontSize;
         obj.layout.legend.font.family = ...
                 matlab2plotlyfont(legendData.FontName);
 
         col = round(255*legendData.TextColor);
-        obj.layout.legend.font.color = sprintf("rgb(%d,%d,%d)", col);
-        
+        obj.layout.legend.font.color = getStringColor(col);
     end
 
     %-REVERT UNITS-%
-    set(obj.State.Legend(legIndex).Handle,'Units', legendUnits);
-    set(obj.State.Legend(legIndex).Handle,'FontUnits', fontUnits);
+    obj.State.Legend(legIndex).Handle.Units = legendUnits;
+    obj.State.Legend(legIndex).Handle.FontUnits = fontUnits;
 end
diff --git a/plotly/plotlyfig_aux/core/updateTernaryColorbar.m b/plotly/plotlyfig_aux/core/updateTernaryColorbar.m
index 5774af1d..2c852882 100644
--- a/plotly/plotlyfig_aux/core/updateTernaryColorbar.m
+++ b/plotly/plotlyfig_aux/core/updateTernaryColorbar.m
@@ -38,28 +38,21 @@
     try
         colorbarData = obj.State.Colorbar(colorbarIndex).Handle;
     catch
-        disp('could not extract ColorBar data');
+        disp("could not extract ColorBar data");
     end
 
     %-STANDARDIZE UNITS-%
     colorbarunits = colorbarData.Units;
-    set(obj.State.Colorbar(colorbarIndex).Handle, 'Units', 'normalized');
-
-    %---------------------------------------------------------------------%
+    obj.State.Colorbar(colorbarIndex).Handle.Units = "normalized";
 
     %-colorbar position-%
-    colorbar.xanchor = 'left';
-    colorbar.yanchor = 'bottom';
+    colorbar.xanchor = "left";
+    colorbar.yanchor = "bottom";
     colorbar.x = colorbarData.Position(1)*1.025;
     colorbar.y = colorbarData.Position(2);
 
-    %---------------------------------------------------------------------%
-
-    %-exponent format-%
     colorbar.exponentformat = obj.PlotlyDefaults.ExponentFormat;
 
-    %---------------------------------------------------------------------%
-
     % get colorbar title and labels
     colorbarTitle = colorbarData.Label;
 
@@ -88,71 +81,51 @@
                 colorbarYLabelData.Interpreter);
     end
 
-
-    %---------------------------------------------------------------------%
-
     %-STANDARDIZE UNITS-%
     titleUnits = colorbarTitleData.Units;
     titleFontUnits = colorbarTitleData.FontUnits;
     yLabelUnits = colorbarYLabelData.Units;
     yLabelFontUnits = colorbarYLabelData.FontUnits;
-    set(colorbarTitle, 'Units', 'data');
-    set(colorbarYLabel, 'Units',' data');
-    set(colorbarYLabel, 'FontUnits', 'points');
+    colorbarTitle.Units = "data";
+    colorbarYLabel.Units = "data";
+    colorbarYLabel.FontUnits = "points";
 
     if ~isHG2
         xLabelUnits = colorbarXLabelData.Units;
         xLabelFontUnits = colorbarXLabelData.FontUnits;
-        set(colorbarTitle, 'FontUnits', 'points');
-        set(colorbarXLabel, 'Units', 'data');
-        set(colorbarXLabel, 'FontUnits', 'points');
+        colorbarTitle.FontUnits = "points";
+        colorbarXLabel.Units = "data";
+        colorbarXLabel.FontUnits = "points";
     end
 
     if ~isempty(colorbarTitleData.String)
         if colorbarTitleData.Rotation == 90
-            colorbar.titleside = 'right';
+            colorbar.titleside = "right";
         else
-            colorbar.titleside = 'top';
+            colorbar.titleside = "top";
         end
 
-        colorbar.titlefont.family = ...
-                matlab2plotlyfont(colorbarTitleData.FontName);
-        col = round(255*colorbarTitleData.Color);
-        colorbar.titlefont.color = sprintf("rgb(%d,%d,%d)", col);
-        colorbar.titlefont.size = 1.20 * colorbarTitleData.FontSize;
-
+        colorbar.titlefont = getFont(colorbarTitleData);
     elseif ~isempty(colorbarXLabelData.String)
-        colorbar.titleside = 'right';
-        colorbar.titlefont.family = ...
-                matlab2plotlyfont(colorbarXLabelData.FontName);
-        col = round(255*colorbarXLabelData.Color);
-        colorbar.titlefont.color = sprintf("rgb(%d,%d,%d)", col);
-        colorbar.titlefont.size = 1.20 * colorbarXLabelData.FontSize;
-
+        colorbar.titleside = "right";
+        colorbar.titlefont = getFont(colorbarXLabelData);
     elseif ~isempty(colorbarYLabelData.String)
-        colorbar.titleside = 'bottom';
-        colorbar.titlefont.family = ...
-                matlab2plotlyfont(colorbarYLabelData.FontName);
-        col = round(255*colorbarYLabelData.Color);
-        colorbar.titlefont.color = sprintf("rgb(%d,%d,%d)", col);
-        colorbar.titlefont.size = 1.20 * colorbarYLabelData.FontSize;
+        colorbar.titleside = "bottom";
+        colorbar.titlefont = getFont(colorbarYLabelData);
     end
 
     %-REVERT UNITS-%
-    set(colorbarTitle, 'Units', titleUnits);
-    set(colorbarTitle, 'FontUnits', titleFontUnits);
-    set(colorbarYLabel, 'Units', yLabelUnits);
-    set(colorbarYLabel, 'FontUnits', yLabelFontUnits);
+    colorbarTitle.Units = titleUnits;
+    colorbarTitle.FontUnits = titleFontUnits;
+    colorbarYLabel.Units = yLabelUnits;
+    colorbarYLabel.FontUnits = yLabelFontUnits;
 
     if ~isHG2
-        set(colorbarXLabel, 'Units', xLabelUnits);
-        set(colorbarXLabel, 'FontUnits', xLabelFontUnits);
+        colorbarXLabel.Units = xLabelUnits;
+        colorbarXLabel.FontUnits = xLabelFontUnits;
     end
 
-    %---------------------------------------------------------------------%
-
     %-some colorbar settings-%
-
     lineWidth = colorbarData.LineWidth ...
             * obj.PlotlyDefaults.AxisLineIncreaseFactor;
     tickLength = min(obj.PlotlyDefaults.MaxTickLength,...
@@ -160,76 +133,59 @@
         * obj.layout.width, colorbarData.TickLength(1) ...
         * colorbarData.Position(4) * obj.layout.height));
 
-    colorbar.thicknessmode = 'fraction';
+    colorbar.thicknessmode = "fraction";
     colorbar.thickness = colorbarData.Position(3);
     colorbar.tickwidth = lineWidth;
     colorbar.ticklen = tickLength;
 
-    colorbar.lenmode = 'fraction';
+    colorbar.lenmode = "fraction";
     colorbar.len = colorbarData.Position(4)*1.025;
     colorbar.outlinewidth = lineWidth;
 
-    %---------------------------------------------------------------------%
-
     % orientation vertical check
     orientVert = colorbar.len > colorbar.thickness;
 
-    %---------------------------------------------------------------------%
-
     %-coloration-%
     if isHG2
-        col = round(255*colorbarData.Color);
+        col = colorbarData.Color;
     else
         if orientVert
-            col = round(255*colorbarData.YColor);
+            col = colorbarData.YColor;
         else
-            col = round(255*colorbarData.XColor);
+            col = colorbarData.XColor;
         end
     end
 
-    colorbarColor = sprintf("rgb(%d,%d,%d)", col);
+    colorbarColor = getStringColor(round(255*col));
 
     colorbar.outlinecolor = colorbarColor;
     colorbar.tickcolor = colorbarColor;
     colorbar.tickfont.color = colorbarColor;
-
-    %---------------------------------------------------------------------%
-
-    %-axis tickfont-%
     colorbar.tickfont.size = colorbarData.FontSize;
     colorbar.tickfont.family = matlab2plotlyfont(colorbarData.FontName);
-
-    %---------------------------------------------------------------------%
-
-    %-colorbar pad-%
     colorbar.xpad = obj.PlotlyDefaults.MarginPad;
     colorbar.ypad = obj.PlotlyDefaults.MarginPad;
 
-    %---------------------------------------------------------------------%
-
     %-set ticklabels-%
     nticks = length(colorbarData.Ticks);
 
     if isHG2
         if isempty(colorbarData.Ticks)
-            %-hide tick labels-%
-            colorbar.ticks = '';
+            colorbar.ticks = "";
             colorbar.showticklabels = false;
         else
             %-tick direction-%
             switch colorbarData.TickDirection
-                case 'in'
-                    colorbar.ticks = 'inside';
-                case 'out'
-                    colorbar.ticks = 'outside';
+                case "in"
+                    colorbar.ticks = "inside";
+                case "out"
+                    colorbar.ticks = "outside";
             end
-
-            if strcmp(colorbarData.TickLabelsMode,'auto')
+            if strcmp(colorbarData.TickLabelsMode,"auto")
                 colorbar.autotick = true;
                 % nticks = max ticks (so + 1)
                 colorbar.nticks = length(colorbarData.Ticks) + 1;
             else
-                %-show tick labels-%
                 if isempty(colorbarData.TickLabels)
                     colorbar.showticklabels = false;
                 else
@@ -241,96 +197,55 @@
         end
     else
         if orientVert
-            if isempty(colorbarData.YTick)
-                %-show tick labels-%
-                colorbar.ticks = '';
-                colorbar.showticklabels = false;
-            else
-                %-tick direction-%
-                switch colorbarData.TickDir
-                    case 'in'
-                        colorbar.ticks = 'inside';
-                    case 'out'
-                        colorbar.ticks = 'outside';
-                end
-                if strcmp(colorbarData.YTickLabelMode, 'auto')
-                    %-autotick-%
-                    colorbar.autotick = true;
-                    %-numticks-%
-                    % nticks = max ticks (so + 1)
-                    colorbar.nticks = length(colorbarData.YTick) + 1;
-                else
-                    %-show tick labels-%
-                    if isempty(colorbarData.YTickLabel)
-                        colorbar.showticklabels = false;
-                    else
-                        %-autotick-%
-                        colorbar.autotick = false;
-                        %-tick0-%
-                        colorbar.tick0 = ...
-                                str2double(colorbarData.YTickLabel(1,:));
-                        %-dtick-%
-                        colorbar.dtick = ...
-                                str2double(colorbarData.YTickLabel(2,:)) ...
-                                - str2double(colorbarData.YTickLabel(1,:));
-                    end
-                end
-            end
+            tick = colorbarData.YTick;
+            tickLabel = colorbarData.YTickLabel;
+            tickLabelMode = colorbarData.YTickLabelMode;
         else
-            if isempty(colorbarData.XTick)
-                %-show tick labels-%
-                colorbar.ticks = '';
-                colorbar.showticklabels = false;
+            tick = colorbarData.XTick;
+            tickLabel = colorbarData.XTickLabel;
+            tickLabelMode = colorbarData.XTickLabelMode;
+        end
+
+        if isempty(tick)
+            colorbar.ticks = "";
+            colorbar.showticklabels = false;
+        else
+            %-tick direction-%
+            switch colorbarData.TickDir
+                case "in"
+                    colorbar.ticks = "inside";
+                case "out"
+                    colorbar.ticks = "outside";
+            end
+            if strcmp(tickLabelMode, "auto")
+                colorbar.autotick = true;
+                colorbar.nticks = length(tick) + 1;
             else
-                %-tick direction-%
-                switch colorbarData.TickDir
-                    case 'in'
-                        colorbar.ticks = 'inside';
-                    case 'out'
-                        colorbar.ticks = 'outside';
-                end
-                if strcmp(colorbarData.XTickLabelMode,'auto')
-                    %-autotick-%
-                    colorbar.autotick = true;
-                    %-numticks-%
-                    colorbar.nticks = length(colorbarData.XTick) + 1;
+                if isempty(tickLabel)
+                    colorbar.showticklabels = false;
                 else
-                    %-show tick labels-%
-                    if isempty(colorbarData.XTickLabel)
-                        colorbar.showticklabels = false;
-                    else
-                        %-autotick-%
-                        colorbar.autotick = false;
-                        %-tick0-%
-                        colorbar.tick0 = ...
-                                str2double(colorbarData.XTickLabel(1,:));
-                        %-dtick-%
-                        colorbar.dtick = ...
-                                str2double(colorbarData.XTickLabel(2,:)) ...
-                                - str2double(colorbarData.XTickLabel(1,:));
-                    end
+                    colorbar.autotick = false;
+                    colorbar.tick0 = str2double(tickLabel(1,:));
+                    colorbar.dtick = str2double(tickLabel(2,:)) ...
+                                        - str2double(tickLabel(1,:));
                 end
             end
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-colorbar bg-color-%
     if ~isHG2
         if ~ischar(colorbarData.Color)
-            col = round(255*colorbarData.Color);
+            col = colorbarData.Color;
         else
-            col = round(255*figureData.Color);
+            col = figureData.Color;
         end
-        
-        obj.layout.plot_bgcolor = sprintf("rgb(%d,%d,%d)", col);
-    end
 
-    %---------------------------------------------------------------------%
+        obj.layout.plot_bgcolor = getStringColor(round(255*col));
+    end
 
     %-ASSOCIATED DATA-%
-    if isfield(colorbarData.UserData,'dataref')
+    if isfield(colorbarData.UserData,"dataref")
         colorbarDataIndex = colorbarData.UserData.dataref;
     else
         colorbarDataIndex = findColorbarData(obj,colorbarIndex);
@@ -339,30 +254,32 @@
     if (nticks ~= 0)
         colorIndex = linspace(0, 1, nticks);
         colorData = linspace(0, 1, nticks-1);
-        m = 1;
 
+        colorscale = cell(1:2*(nticks-1));
         for n = 1:nticks-1
             col = 1-colorData(n);
-            colorscale{m} = {colorIndex(n), ...
-                    sprintf("rgb(%d,%d,%d)", ...
-                    round(255*[col, col, col]))};
-            colorscale{m+1} = {colorIndex(n+1), ...
-                    sprintf("rgb(%d,%d,%d)", ...
-                    round(255*[col, col, col]))};
-            m = 2*n+1;
+            colorscale{2*n-1} = {colorIndex(n), ...
+                    getStringColor(round(255*[col, col, col]))};
+            colorscale{2*n} = {colorIndex(n+1), ...
+                    getStringColor(round(255*[col, col, col]))};
         end
         obj.data{colorbarDataIndex}.marker.color = colorbarData.Ticks;
     else
-        colorscale = {{0, 'rgb(255,255,255)'}, {1, 'rgb(0,0,0)'}};
+        colorscale = {{0, "rgb(255,255,255)"}, {1, "rgb(0,0,0)"}};
     end
 
     obj.data{colorbarDataIndex}.marker.colorscale = colorscale;
     obj.data{colorbarDataIndex}.marker.colorbar = colorbar;
     obj.data{colorbarDataIndex}.showscale = true;
 
-    %---------------------------------------------------------------------%
-
     %-REVERT UNITS-%
-    set(obj.State.Colorbar(colorbarIndex).Handle,'Units',colorbarunits);
+    obj.State.Colorbar(colorbarIndex).Handle.Units = colorbarunits;
 end
 
+function out = getFont(labelData)
+    out = struct( ...
+        "family", matlab2plotlyfont(labelData.FontName), ...
+        "color", getStringColor(round(255*labelData.Color)), ...
+        "size", 1.20 * labelData.FontSize ...
+    );
+end
diff --git a/plotly/plotlyfig_aux/core/updateTiledLayoutAnnotation.m b/plotly/plotlyfig_aux/core/updateTiledLayoutAnnotation.m
index 82f7fb8d..46d0b7f6 100644
--- a/plotly/plotlyfig_aux/core/updateTiledLayoutAnnotation.m
+++ b/plotly/plotlyfig_aux/core/updateTiledLayoutAnnotation.m
@@ -8,8 +8,6 @@
     obj.layout.annotations{anIndex}.yref = 'paper';
     obj.layout.annotations{anIndex}.align = titleStruct.HorizontalAlignment;
 
-    %---------------------------------------------------------------------%
-
     %-anchors-%
     obj.layout.annotations{anIndex}.xanchor = titleStruct.HorizontalAlignment;
 
@@ -22,8 +20,6 @@
             obj.layout.annotations{anIndex}.yanchor = 'bottom';
     end
 
-    %---------------------------------------------------------------------%
-
     %-text-%
     titleString = titleStruct.String;
     titleInterpreter = titleStruct.Interpreter;
@@ -36,16 +32,12 @@
 
     obj.layout.annotations{anIndex}.text = titleTex;
 
-    %---------------------------------------------------------------------%
-
     %-text location-%
     obj.layout.annotations{anIndex}.x = 0.5;
     obj.layout.annotations{anIndex}.y = 0.95;
 
-    %---------------------------------------------------------------------%
-
     %-font properties-%
-    titleColor = sprintf("rgb(%d,%d,%d)", round(255*titleStruct.Color));
+    titleColor = getStringColor(round(255*titleStruct.Color));
     titleSize = titleStruct.FontSize;
     titleFamily = matlab2plotlyfont(titleStruct.FontName);
 
@@ -60,19 +52,13 @@
         otherwise
     end
 
-    %---------------------------------------------------------------------%
-
     %-title angle-%
     textAngle = titleStruct.Rotation;
-
     if textAngle > 180
         textAngle = textAngle - 360;
     end
-
     obj.layout.annotations{anIndex}.textangle = textAngle;
 
-    %---------------------------------------------------------------------%
-
     %-hide text (a workaround)-%
     if strcmp(titleStruct.Visible,'off')
         obj.layout.annotations{anIndex}.text = ' ';
diff --git a/plotly/plotlyfig_aux/handlegraphics/UpdateGeoAxes.m b/plotly/plotlyfig_aux/handlegraphics/UpdateGeoAxes.m
index e1fdc1cd..5e8013fc 100644
--- a/plotly/plotlyfig_aux/handlegraphics/UpdateGeoAxes.m
+++ b/plotly/plotlyfig_aux/handlegraphics/UpdateGeoAxes.m
@@ -6,9 +6,7 @@ function UpdateGeoAxes(obj, geoIndex)
     geoData = obj.State.Plot(geoIndex).Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
-
-    %---------------------------------------------------------------------%
+    xsource = findSourceAxis(obj,axIndex);
 
     %-set domain geo plot-%
     xo = geoData.Position(1);
@@ -19,19 +17,15 @@ function UpdateGeoAxes(obj, geoIndex)
     geoaxes.domain.x = min([xo xo + w],1);
     geoaxes.domain.y = min([yo yo + h],1);
 
-    %---------------------------------------------------------------------%
-
     %-setting projection-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         geoaxes.projection.type = 'mercator';
     end
 
-    %---------------------------------------------------------------------%
-
     %-setting basemap-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         geoaxes.framecolor = 'rgb(120,120,120)';
-        if strcmpi(geoData.Basemap, 'streets-light')    
+        if strcmpi(geoData.Basemap, 'streets-light')
             geoaxes.oceancolor = 'rgba(215,215,220,1)';
             geoaxes.landcolor = 'rgba(220,220,220,0.4)';
         elseif strcmpi(geoData.Basemap, 'colorterrain')
@@ -45,8 +39,6 @@ function UpdateGeoAxes(obj, geoIndex)
         geoaxes.showland = true;
     end
 
-    %---------------------------------------------------------------------%
-
     %-setting latitude axis-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         latTick = geoData.LatitudeAxis.TickValues;
@@ -58,13 +50,11 @@ function UpdateGeoAxes(obj, geoIndex)
         if strcmpi(geoData.Grid, 'on')
             geoaxes.lataxis.showgrid = true;
             geoaxes.lataxis.gridwidth = geoData.LineWidth;
-            geoaxes.lataxis.gridcolor = sprintf("rgba(%d,%d,%d,%f)", ...
-                    [round(255*geoData.GridColor) geoData.GridAlpha]);
+            geoaxes.lataxis.gridcolor = getStringColor( ...
+                    round(255*geoData.GridColor), geoData.GridAlpha);
         end
     end
 
-    %---------------------------------------------------------------------%
-    
     %-setting longitude axis-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         lonTick = geoData.LongitudeAxis.TickValues;
@@ -76,26 +66,20 @@ function UpdateGeoAxes(obj, geoIndex)
         if strcmpi(geoData.Grid, 'on')
             geoaxes.lonaxis.showgrid = true;
             geoaxes.lonaxis.gridwidth = geoData.LineWidth;
-            geoaxes.lonaxis.gridcolor = sprintf("rgba(%d,%d,%d,%f)", ...
-                    [round(255*geoData.GridColor) geoData.GridAlpha]);
+            geoaxes.lonaxis.gridcolor = getStringColor( ...
+                    round(255*geoData.GridColor), geoData.GridAlpha);
         end
     end
 
-    %---------------------------------------------------------------------%
-    
     %-set map center-%
     geoaxes.center.lat = geoData.MapCenter(1);
     geoaxes.center.lon = geoData.MapCenter(2);
 
-    %---------------------------------------------------------------------%
-    
     %-set better resolution-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         geoaxes.resolution = '50';
     end
 
-    %---------------------------------------------------------------------%
-
     %-set mapbox style-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'mapbox')
         geoaxes.zoom = geoData.ZoomLevel - 1.4;
@@ -106,9 +90,7 @@ function UpdateGeoAxes(obj, geoIndex)
         end
     end
 
-    %---------------------------------------------------------------------%
-
-    %-TEXT STTINGS-%
+    %-TEXT SETTINGS-%
     isText = false;
     child = geoData.Children;
     t = 1;
@@ -121,7 +103,7 @@ function UpdateGeoAxes(obj, geoIndex)
             lons(t) = child(t).Position(2);
             sizes(t) = child(t).FontSize;
             families{t} = matlab2plotlyfont(child(t).FontName);
-            colors{t} = sprintf('rgb(%f,%f,%f)', child(t).Color);
+            colors{t} = getStringColor(round(255*child(t).Color));
 
             if strcmpi(child(t).HorizontalAlignment, 'left')
                 pos{t} = 'right';
@@ -158,12 +140,10 @@ function UpdateGeoAxes(obj, geoIndex)
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-set geo axes to layout-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
-        obj.layout = setfield(obj.layout, sprintf('geo%d', xsource+1), geoaxes);
+        obj.layout.(sprintf('geo%d', xsource+1)) = geoaxes;
     elseif strcmpi(obj.PlotOptions.geoRenderType, 'mapbox')
-        obj.layout = setfield(obj.layout, sprintf('mapbox%d', xsource+1), geoaxes);
+        obj.layout.(sprintf('mapbox%d', xsource+1)) = geoaxes;
     end
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateAlternativeBoxplot.m b/plotly/plotlyfig_aux/handlegraphics/updateAlternativeBoxplot.m
index 42e21649..d9e70929 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateAlternativeBoxplot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateAlternativeBoxplot.m
@@ -8,10 +8,7 @@
 	nTraces = length(plotData);
 	traceIndex = dataIndex;
 
-	%---------------------------------------------------------------------%
-
 	%-update traces-%
-
 	for t = 1:nTraces
 		if t ~= 1
 			obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
@@ -45,8 +42,6 @@ function updateBoxplotLine(obj, axIndex, plotData, traceIndex)
         yData = ones(1,2)*yData;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set trace-%
     obj.data{traceIndex}.type = 'scatter';
     obj.data{traceIndex}.mode = getScatterMode(plotData);
@@ -55,32 +50,20 @@ function updateBoxplotLine(obj, axIndex, plotData, traceIndex)
     obj.data{traceIndex}.xaxis = sprintf('x%d', xSource);
     obj.data{traceIndex}.yaxis = sprintf('y%d', ySource);
 
-    %---------------------------------------------------------------------%
-
     %-set trace data-%
     obj.data{traceIndex}.x = xData;
     obj.data{traceIndex}.y = yData;
 
-    %---------------------------------------------------------------------%
-
     obj.data{traceIndex}.marker = extractLineMarker(plotData);
     obj.data{traceIndex}.line = extractLineLine(plotData);
 
-    %---------------------------------------------------------------------%
-
-    %-legend-%
-    leg = plotData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showLeg = true;
-        case 'off'
-            showLeg = false;
+    switch plotData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{traceIndex}.showlegend = true;
+        case "off"
+            obj.data{traceIndex}.showlegend = false;
     end
 
-    obj.data{traceIndex}.showlegend = showLeg;
-
     if isempty(obj.data{traceIndex}.name)
         obj.data{traceIndex}.showlegend = false;
     end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateAnimatedLine.m b/plotly/plotlyfig_aux/handlegraphics/updateAnimatedLine.m
index 69365955..fd7ed7a2 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateAnimatedLine.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateAnimatedLine.m
@@ -18,18 +18,10 @@ function updateAnimatedLine(obj,plotIndex)
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     %-if polar plot or not-%
     treatas = obj.PlotOptions.TreatAs;
     ispolar = strcmpi(treatas, 'compass') || strcmpi(treatas, 'ezpolar');
 
-    %---------------------------------------------------------------------%
-
     %-getting data-%
     try
         [x,y,z] = getpoints(animObj);
@@ -39,29 +31,19 @@ function updateAnimatedLine(obj,plotIndex)
         z = plotData.ZData;
     end
 
-    %---------------------------------------------------------------------%
-
     obj.data{plotIndex}.xaxis = "x" + xsource;
     obj.data{plotIndex}.yaxis = "y" + ysource;
 
-    %---------------------------------------------------------------------%
-
     %-scatter type-%
     obj.data{plotIndex}.type = 'scatter';
-
     if ispolar
         obj.data{plotIndex}.type = 'scatterpolar';
     end
 
-    %---------------------------------------------------------------------%
-
     %-scatter visible-%
     obj.data{plotIndex}.visible = strcmp(plotData.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
     %-scatter x-%
-
     if ispolar
         r = sqrt(x.^2 + y.^2);
         obj.data{plotIndex}.r = r;
@@ -69,8 +51,6 @@ function updateAnimatedLine(obj,plotIndex)
         obj.data{plotIndex}.x = [x(1) x(1)];
     end
 
-    %---------------------------------------------------------------------%
-
     %-scatter y-%
     if ispolar
         theta = atan2(x,y);
@@ -79,8 +59,6 @@ function updateAnimatedLine(obj,plotIndex)
         obj.data{plotIndex}.y = [y(1) y(1)];
     end
 
-    %---------------------------------------------------------------------%
-
     %-For 3D plots-%
     obj.PlotOptions.is3d = false; % by default
 
@@ -89,22 +67,16 @@ function updateAnimatedLine(obj,plotIndex)
         if any(z)
             %-scatter z-%
             obj.data{plotIndex}.z = [z(1) z(1)];
-            
             %-overwrite type-%
             obj.data{plotIndex}.type = 'scatter3d';
-            
             %-flag to manage 3d plots-%
             obj.PlotOptions.is3d = true;
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-scatter name-%
     obj.data{plotIndex}.name = plotData.DisplayName;
 
-    %---------------------------------------------------------------------%
-
     %-scatter mode-%
     if ~strcmpi('none', plotData.Marker) ...
             && ~strcmpi('none', plotData.LineStyle)
@@ -118,47 +90,28 @@ function updateAnimatedLine(obj,plotIndex)
     end
 
     obj.data{plotIndex}.mode = mode;
-
-    %---------------------------------------------------------------------%
-
     obj.data{plotIndex}.line = extractLineLine(plotData);
     obj.data{plotIndex}.marker = extractLineMarker(plotData);
 
-    %---------------------------------------------------------------------%
-
     %-scatter showlegend-%
-    leg = plotData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch plotData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{plotIndex}.showlegend = true;
+        case "off"
+            obj.data{plotIndex}.showlegend = false;
     end
 
-    obj.data{plotIndex}.showlegend = showleg;
-
-    %---------------------------------------------------------------------%
-
-    %-SCENE CONFIGUTATION-% for 3D animations, like comet3
-
-    %---------------------------------------------------------------------%
+    %-SCENE CONFIGURATION-% for 3D animations, like comet3
     if obj.PlotOptions.is3d
-
         %-aspect ratio-%
         asr = obj.PlotOptions.AspectRatio;
-
         if ~isempty(asr)
             if ischar(asr)
                 scene.aspectmode = asr;
             elseif isvector(ar) && length(asr) == 3
-                xar = asr(1);
-                yar = asr(2);
                 zar = asr(3);
             end
         else
-
             %-define as default-%
             xar = max(x(:));
             yar = max(y(:));
@@ -170,8 +123,6 @@ function updateAnimatedLine(obj,plotIndex)
         scene.aspectratio.y = 1.0*xyar;
         scene.aspectratio.z = zar;
 
-        %-----------------------------------------------------------------%
-
         %-camera eye-%
         ey = obj.PlotOptions.CameraEye;
 
@@ -182,21 +133,31 @@ function updateAnimatedLine(obj,plotIndex)
                 scene.camera.eye.z = ey(3);
             end
         else
-
             %-define as default-%
-            xey = - xyar; if xey>0, xfac = -0.0; else, xfac = 0.0; end
-            yey = - xyar; if yey>0, yfac = -0.3; else, yfac = 0.3; end
-            if zar>0, zfac = -0.1; else, zfac = 0.1; end
+            xey = - xyar;
+            if xey>0
+                xfac = -0.0;
+            else
+                xfac = 0.0;
+            end
+            yey = - xyar;
+            if yey>0
+                yfac = -0.3;
+            else
+                yfac = 0.3;
+            end
+            if zar>0
+                zfac = -0.1;
+            else
+                zfac = 0.1;
+            end
 
-            scene.camera.eye.x = xey + xfac*xey; 
+            scene.camera.eye.x = xey + xfac*xey;
             scene.camera.eye.y = yey + yfac*yey;
             scene.camera.eye.z = zar + zfac*zar;
         end
 
-        %-----------------------------------------------------------------%
-
         %-scene axis configuration-%
-
         scene.xaxis.range = axisData.XLim;
         scene.yaxis.range = axisData.YLim;
         scene.zaxis.range = axisData.ZLim;
@@ -242,19 +203,13 @@ function updateAnimatedLine(obj,plotIndex)
         scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
         scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-        %-----------------------------------------------------------------%
-
         %-SET SCENE TO LAYOUT-%
-        obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
+        obj.layout.("scene" + xsource) = scene;
     end
 
-    %---------------------------------------------------------------------%
-
     %-Add a temporary tag-%
     obj.layout.isAnimation = true;
 
-    %---------------------------------------------------------------------%
-
     %-Create Frames-%
     frameData = obj.data{plotIndex};
 
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateArea.m b/plotly/plotlyfig_aux/handlegraphics/updateArea.m
index 20dd83b2..9db11579 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateArea.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateArea.m
@@ -1,4 +1,4 @@
-function updateArea(obj,areaIndex)
+function data = updateArea(obj,areaIndex)
     % x: ...[DONE]
     % y: ...[DONE]
     % r: ...[NOT SUPPORTED IN MATLAB]
@@ -56,85 +56,61 @@ function updateArea(obj,areaIndex)
     % visible: ...[DONE]
     % type: ...[DONE]
 
-    %---------------------------------------------------------------------%
-
     %-store original area handle-%
     area_data = obj.State.Plot(areaIndex).Handle;
 
-    %---------------------------------------------------------------------%
-
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(areaIndex).AssociatedAxis);
 
-    %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
-
-    %---------------------------------------------------------------------%
-
-    obj.data{areaIndex}.xaxis = "x" + xsource;
-    obj.data{areaIndex}.yaxis = "y" + ysource;
-    obj.data{areaIndex}.type = "scatter";
-    obj.data{areaIndex}.x = area_data.XData;
+    %-check for multiple axes-%
+    if numel(area_data.Parent.YAxis) > 1
+        yaxMatch = zeros(1,2);
+        for yax = 1:2
+            yAxisColor = area_data.Parent.YAxis(yax).Color;
+            yaxMatch(yax) = sum(yAxisColor == area_data.FaceColor);
+        end
+        [~, yaxIndex] = max(yaxMatch);
+        [xsource, ysource] = findSourceAxis(obj, axIndex, yaxIndex);
+    else
+        [xsource, ysource] = findSourceAxis(obj,axIndex);
+    end
 
-    %---------------------------------------------------------------------%
+    data.xaxis = "x" + xsource;
+    data.yaxis = "y" + ysource;
+    data.type = "scatter";
+    data.x = area_data.XData;
 
-    %-area y-%
     prevAreaIndex = find(cellfun(@(x) isfield(x,"fill") ...
-            && isequal({x.xaxis x.yaxis},{obj.data{areaIndex}.xaxis ...
-            obj.data{areaIndex}.yaxis}),obj.data(1:areaIndex-1)),1,"last");
+            && isequal({x.xaxis x.yaxis},{data.xaxis ...
+            data.yaxis}),obj.data(1:areaIndex-1)),1,"last");
     if ~isempty(prevAreaIndex)
-        obj.data{areaIndex}.y = obj.data{prevAreaIndex}.y + area_data.YData;
+        data.y = obj.data{prevAreaIndex}.y + area_data.YData;
     else
-        obj.data{areaIndex}.y = area_data.YData;
+        data.y = area_data.YData;
     end
 
-    %---------------------------------------------------------------------%
-
-    obj.data{areaIndex}.name = area_data.DisplayName;
-    obj.data{areaIndex}.visible = strcmp(area_data.Visible, "on");
-
-    %---------------------------------------------------------------------%
+    data.name = area_data.DisplayName;
+    data.visible = area_data.Visible == "on";
 
-    %-area fill-%
     if ~isempty(prevAreaIndex)
-        obj.data{areaIndex}.fill = "tonexty";
+        data.fill = "tonexty";
     else % first area plot
-        obj.data{areaIndex}.fill = "tozeroy";
+        data.fill = "tozeroy";
     end
 
-    %---------------------------------------------------------------------%
-
-    %-AREA MODE-%
-    if isprop(area_data, "LineStyle") ...
-            && isequal(area_data.LineStyle, "none")
-        obj.data{areaIndex}.mode = "none";
+    if isprop(area_data, "LineStyle") && area_data.LineStyle == "none"
+        data.mode = "none";
     else
-        obj.data{areaIndex}.mode = "lines";
+        data.mode = "lines";
     end
 
-    %---------------------------------------------------------------------%
-
-    %-area line-%
-    obj.data{areaIndex}.line = extractAreaLine(area_data);
-
-    %---------------------------------------------------------------------%
-
-    %-area fillcolor-%
-    fill = extractAreaFace(area_data);
-    obj.data{areaIndex}.fillcolor = fill.color;
+    data.line = extractAreaLine(area_data);
+    data.fillcolor = extractAreaFace(area_data).color;
 
-    %---------------------------------------------------------------------%
-
-    %-area showlegend-%
-    leg = area_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
+    switch area_data.Annotation.LegendInformation.IconDisplayStyle
         case "on"
-            showleg = true;
+            data.showlegend = true;
         case "off"
-            showleg = false;
+            data.showlegend = false;
     end
-
-    obj.data{areaIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateBar.m b/plotly/plotlyfig_aux/handlegraphics/updateBar.m
index e4c5ef8e..5dce10ab 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateBar.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateBar.m
@@ -1,4 +1,4 @@
-function obj = updateBar(obj,barIndex)
+function data = updateBar(obj,barIndex)
     % x: ...[DONE]
     % y: ...[DONE]
     % name: ...[DONE]
@@ -41,8 +41,6 @@
     % outliercolor: ...[NA]
     % outlierwidth: ...[NA]
 
-    %---------------------------------------------------------------------%
-
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(barIndex).AssociatedAxis);
 
@@ -52,54 +50,26 @@
     %-CHECK FOR MULTIPLE AXES-%
     [xSource, ySource] = findSourceAxis(obj, axIndex);
 
-    %---------------------------------------------------------------------%
-
-    %-associate axis-%
-    obj.data{barIndex}.xaxis = "x" + xSource;
-    obj.data{barIndex}.yaxis = "y" + ySource;
-
-    %---------------------------------------------------------------------%
-
-    %-set trace-%
-    obj.data{barIndex}.type = "bar";
-    obj.data{barIndex}.name = barData.DisplayName;
-    obj.data{barIndex}.visible = strcmp(barData.Visible,"on");
-
-    %---------------------------------------------------------------------%
-
-    %-set plot data-%
-    xData = barData.XData;
-    yData = barData.YData;
-
-    if isduration(xData) || isdatetime(xData)
-        xData = datenum(xData);
-    end
-    if isduration(yData) || isdatetime(yData)
-        yData = datenum(yData);
-    end
+    data.xaxis = "x" + xSource;
+    data.yaxis = "y" + ySource;
+    data.type = "bar";
+    data.name = barData.DisplayName;
+    data.visible = barData.Visible == "on";
 
     switch barData.Horizontal
         case "off"
-            obj.data{barIndex}.orientation = "v";
-            obj.data{barIndex}.x = xData;
-            obj.data{barIndex}.y = yData;
+            data.orientation = "v";
+            data.x = barData.XData;
+            data.y = barData.YData;
         case "on"
-            obj.data{barIndex}.orientation = "h";
-            obj.data{barIndex}.x = yData;
-            obj.data{barIndex}.y = xData;
+            data.orientation = "h";
+            data.x = barData.YData;
+            data.y = barData.XData;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-trace settings-%
-    markerline = extractAreaLine(barData); 
-
-    obj.data{barIndex}.marker = extractAreaFace(barData);
-    obj.data{barIndex}.marker.line = markerline; 
+    data.marker = extractAreaFace(barData);
+    data.marker.line = extractAreaLine(barData);
 
-    %---------------------------------------------------------------------%
-
-    %-layout settings-%
     obj.layout.bargroupgap = 1-barData.BarWidth;
 
     bars = findobj(obj.State.Plot(barIndex).AssociatedAxis.Children, ...
@@ -118,17 +88,10 @@
             obj.layout.barmode = "relative";
     end
 
-    %---------------------------------------------------------------------%
-
-    %-bar showlegend-%
-    leg = barData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
+    switch barData.Annotation.LegendInformation.IconDisplayStyle
         case "on"
-            showleg = true;
+            data.showlegend = true;
         case "off"
-            showleg = false;
+            data.showlegend = false;
     end
-    obj.data{barIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateBar3.m b/plotly/plotlyfig_aux/handlegraphics/updateBar3.m
index 0cf62f98..8ec07b7e 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateBar3.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateBar3.m
@@ -3,7 +3,7 @@
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     bar_data = obj.State.Plot(surfaceIndex).Handle;
@@ -15,18 +15,12 @@
     %-GET SCENE-%
     scene = obj.layout.("scene" + xsource);
 
-    %---------------------------------------------------------------------%
-
     %-associate scene-%
     obj.data{surfaceIndex}.scene = sprintf('scene%d', xsource);
-        
-    %---------------------------------------------------------------------%
 
     %-surface type-%
     obj.data{surfaceIndex}.type = 'mesh3d';
 
-    %---------------------------------------------------------------------%
-        
     %-FORMAT DATA-%
     xdata = bar_data.XData;
     ydata = bar_data.YData;
@@ -48,15 +42,11 @@
 
     %-parse offsets-%
     offsets = zdata(1:6:end, 2)';
-        
-    %---------------------------------------------------------------------%
 
     %-get the values to use plotly's mesh3D-%
     bargap = diff(yedges(1:2)) - diff(ydata(2:3));
     [X, Y, Z, I, J, K] = get_plotly_mesh3d(xedges, yedges, values, bargap);
 
-    %---------------------------------------------------------------------%
-
     %-reformat Z according to offsets-%
     m = 1;
     lz2 = 0.5*length(Z);
@@ -67,8 +57,6 @@
         m = m + 1;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set mesh3d data-%
     obj.data{surfaceIndex}.x = X;
     obj.data{surfaceIndex}.y = Y;
@@ -77,15 +65,13 @@
     obj.data{surfaceIndex}.j = int16(J-1);
     obj.data{surfaceIndex}.k = int16(K-1);
 
-    %---------------------------------------------------------------------%
-
     %-coloring-%
     cmap = figure_data.Colormap;
 
     if isnumeric(bar_data.FaceColor)
         %-paper_bgcolor-%
         col = round(255*bar_data.FaceColor);
-        col = sprintf("rgb(%d,%d,%d)", col);
+        col = getStringColor(col);
     else
         switch bar_data.FaceColor
             case 'none'
@@ -102,7 +88,7 @@
                     case 'direct'
                         col = round(255*(cmap(cdata(1,1),:)));
                 end
-                col = sprintf("rgb(%d,%d,%d)", col);
+                col = getStringColor(col);
             case 'auto'
                 col = 'rgb(0,114,189)';
         end
@@ -110,16 +96,12 @@
 
     obj.data{surfaceIndex}.color = col;
 
-    %---------------------------------------------------------------------%
-
     %-some settings-%
     obj.data{surfaceIndex}.contour.show = true;
     obj.data{surfaceIndex}.contour.width = 6;
     obj.data{surfaceIndex}.contour.color= "rgb(0,0,0)";
     obj.data{surfaceIndex}.flatshading = false;
 
-    %---------------------------------------------------------------------%
-
     %-lighting settings-%
     obj.data{surfaceIndex}.lighting.diffuse = 0.8;
     obj.data{surfaceIndex}.lighting.ambient = 0.65;
@@ -133,36 +115,18 @@
     obj.data{surfaceIndex}.lightposition.y = 0;
     obj.data{surfaceIndex}.lightposition.z = 0;
 
-    %---------------------------------------------------------------------%
-
-    %-surface name-%
     obj.data{surfaceIndex}.name = bar_data.DisplayName;
-
-    %---------------------------------------------------------------------%
-
-    %-surface visible-%
     obj.data{surfaceIndex}.visible = strcmp(bar_data.Visible, 'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = bar_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch bar_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
 
-    obj.data{surfaceIndex}.showlegend = showleg;
-
-    %---------------------------------------------------------------------%
-
     %-SETTING SCENE-%
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     ar = obj.PlotOptions.AspectRatio;
 
@@ -185,8 +149,6 @@
     scene.aspectratio.y = yar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -198,13 +160,11 @@
         end
     else
         %-define as default-%
-        scene.camera.eye.x = xar + 7; 
+        scene.camera.eye.x = xar + 7;
         scene.camera.eye.y = yar - 2;
         scene.camera.eye.z = zar + 0.5;
     end
 
-    %---------------------------------------------------------------------%
-
     %-axis configuration-%
     scene.xaxis.range = axis_data.XLim(end:-1:1);
     scene.yaxis.range = axis_data.YLim;
@@ -239,16 +199,16 @@
     scene.yaxis.title = axis_data.YLabel.String;
     scene.zaxis.title = axis_data.ZLabel.String;
 
-    %---------------------------------------------------------------------%
-
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
+    obj.layout.("scene" + xsource) = scene;
 end
 
 function bar_ = bar_data(position3d, size_)
-    % position3d - 3-list or array of shape (3,) that represents the point of coords (x, y, 0), where a bar is placed
-    % size = a 3-tuple whose elements are used to scale a unit cube to get a paralelipipedic bar
-    % returns - an array of shape(8,3) representing the 8 vertices of  a bar at position3d
+    % position3d - 3-list or array of shape (3,) that represents the point
+    % of coords (x, y, 0), where a bar is placed size = a 3-tuple whose
+    % elements are used to scale a unit cube to get a paralelipipedic bar
+    % returns - an array of shape(8,3) representing the 8 vertices of a bar
+    % at position3d
 
     if nargin < 2
         size_ = [1, 1, 1];
@@ -265,7 +225,7 @@
             0, 1, 1 ...
             ]; % the vertices of the unit cube
 
-    for n =1:size(bar_, 1)
+    for n = 1:size(bar_, 1)
         % scale the cube to get the vertices of a parallelipipedic bar_
         bar_(n,:) = bar_(n,:) .* size_;
     end
@@ -283,7 +243,7 @@
     %       used in instantiating the go.Mesh3d class.
 
     if nargin < 2
-        sizes = ones(size(positions,1), 3); %[(1,1,1)]*len(positions)
+        sizes = ones(size(positions,1), 3); % [(1,1,1)]*len(positions)
     end
 
     c = 1;
@@ -294,34 +254,38 @@
         end
     end
 
-    % all_bars = [bar_data(pos, size)  for pos, size in zip(positions, sizes) if size[2]!=0]
+    % all_bars = [bar_data(pos, size)  for pos, size in
+    % zip(positions, sizes) if size[2]!=0]
     [r, q, p] = size(all_bars);
 
     % extract unique vertices from the list of all bar vertices
     all_bars = reshape(all_bars, [r, p*q])';
     [vertices, ~, ixr] = unique(all_bars, 'rows');
 
-    %for each bar, derive the sublists of indices i, j, k assocated to its chosen  triangulation
+    % for each bar, derive the sublists of indices i, j, k associated to its
+    % chosen  triangulation
     I = [];
     J = [];
     K = [];
 
     for k = 0:p-1
-        aux = ixr([1+8*k, 1+8*k+2,1+8*k, 1+8*k+5,1+8*k, 1+8*k+7, 1+8*k+5, 1+8*k+2, 1+8*k+3, 1+8*k+6, 1+8*k+7, 1+8*k+5]);
+        aux = ixr([1+8*k, 1+8*k+2,1+8*k, 1+8*k+5,1+8*k, 1+8*k+7, ...
+                1+8*k+5, 1+8*k+2, 1+8*k+3, 1+8*k+6, 1+8*k+7, 1+8*k+5]);
         I = [ I;  aux(:)];
-        aux = ixr([1+8*k+1, 1+8*k+3, 1+8*k+4, 1+8*k+1, 1+8*k+3, 1+8*k+4, 1+8*k+1, 1+8*k+6, 1+8*k+7, 1+8*k+2, 1+8*k+4, 1+8*k+6]);
+        aux = ixr([1+8*k+1, 1+8*k+3, 1+8*k+4, 1+8*k+1, 1+8*k+3, ...
+                1+8*k+4, 1+8*k+1, 1+8*k+6, 1+8*k+7, 1+8*k+2, 1+8*k+4, ...
+                1+8*k+6]);
         J = [ J;  aux(:)];
-        aux = ixr([1+8*k+2, 1+8*k, 1+8*k+5, 1+8*k, 1+8*k+7, 1+8*k, 1+8*k+2, 1+8*k+5, 1+8*k+6, 1+8*k+3, 1+8*k+5, 1+8*k+7]);
+        aux = ixr([1+8*k+2, 1+8*k, 1+8*k+5, 1+8*k, 1+8*k+7, 1+8*k, ...
+                1+8*k+2, 1+8*k+5, 1+8*k+6, 1+8*k+3, 1+8*k+5, 1+8*k+7]);
         K = [ K;  aux(:)];
     end
-
 end
 
 function [X, Y, Z, I, J, K] = get_plotly_mesh3d(xedges, yedges, values, bargap)
-    % x, y - array-like of shape (n,), defining the x, and y-ccordinates of
+    % x, y - array-like of shape (n,), defining the x, and y-coordinates of
     % data set for which we plot a 3d hist.
 
-    xsize = xedges(2)-xedges(1)-bargap;
     ysize = yedges(2)-yedges(1)-bargap;
     [xe, ye]= meshgrid(xedges(1:end-1), yedges(1:end-1));
     ze = zeros(size(xe));
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateBar3h.m b/plotly/plotlyfig_aux/handlegraphics/updateBar3h.m
index 420d0f6b..8d8f9283 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateBar3h.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateBar3h.m
@@ -3,7 +3,7 @@
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     bar_data = obj.State.Plot(surfaceIndex).Handle;
@@ -15,16 +15,12 @@
     %-GET SCENE-%
     scene = obj.layout.("scene" + xsource);
 
-    %---------------------------------------------------------------------%
-
     %-associate scene-%
     obj.data{surfaceIndex}.scene = sprintf('scene%d', xsource);
 
     %-surface type-%
     obj.data{surfaceIndex}.type = 'mesh3d';
 
-    %---------------------------------------------------------------------%
-        
     %-FORMAT DATA-%
     xdata = bar_data.XData;
     ydata = bar_data.ZData;
@@ -46,15 +42,11 @@
 
     %-parse offsets-%
     offsets = zdata(1:6:end, 2)';
-        
-    %---------------------------------------------------------------------%
 
     %-get the values to use plotly's mesh3D-%
     bargap = diff(yedges(1:2)) - diff(ydata(2:3));
     [X, Y, Z, I, J, K] = get_plotly_mesh3d(xedges, yedges, values, bargap);
 
-    %-----------------------------------------------------------------%
-
     %-reformat Z according to offsets-%
     m = 1;
     lz2 = 0.5*length(Z);
@@ -65,8 +57,6 @@
         m = m + 1;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set mesh3d data-%
     obj.data{surfaceIndex}.x = X;
     obj.data{surfaceIndex}.y = Z;
@@ -75,17 +65,13 @@
     obj.data{surfaceIndex}.j = int16(J-1);
     obj.data{surfaceIndex}.k = int16(K-1);
 
-    %---------------------------------------------------------------------%
-
     %-coloring-%
     cmap = figure_data.Colormap;
 
     if isnumeric(bar_data.FaceColor)
-        
         %-paper_bgcolor-%
         col = round(255*bar_data.FaceColor);
-        col = sprintf("rgb(%d,%d,%d)", col);
-        
+        col = getStringColor(col);
     else
         switch bar_data.FaceColor
             case 'none'
@@ -102,7 +88,7 @@
                     case 'direct'
                         col = round(255*(cmap(cdata(1,1),:)));
                 end
-                col = sprintf("rgb(%d,%d,%d)", col);
+                col = getStringColor(col);
             case 'auto'
                 col = 'rgb(0,113.985,188.955)';
         end
@@ -110,16 +96,12 @@
 
     obj.data{surfaceIndex}.color = col;
 
-    %---------------------------------------------------------------------%
-
     %-some settings-%
     obj.data{surfaceIndex}.contour.show = true;
     obj.data{surfaceIndex}.contour.width = 6;
     obj.data{surfaceIndex}.contour.color = 'rgb(0,0,0)';
     obj.data{surfaceIndex}.flatshading = false;
 
-    %---------------------------------------------------------------------%
-
     %-lighting settings-%
     obj.data{surfaceIndex}.lighting.diffuse = 0.8;
     obj.data{surfaceIndex}.lighting.ambient = 0.65;
@@ -133,36 +115,21 @@
     obj.data{surfaceIndex}.lightposition.y = 0;
     obj.data{surfaceIndex}.lightposition.z = 0;
 
-    %---------------------------------------------------------------------%
-
     %-surface name-%
     obj.data{surfaceIndex}.name = bar_data.DisplayName;
 
-    %---------------------------------------------------------------------%
-
     %-surface visible-%
     obj.data{surfaceIndex}.visible = strcmp(bar_data.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = bar_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch bar_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
 
-    obj.data{surfaceIndex}.showlegend = showleg;
-
-    %---------------------------------------------------------------------%
-
     %-SETTING SCENE-%
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     ar = obj.PlotOptions.AspectRatio;
 
@@ -175,7 +142,6 @@
             zar = ar(3);
         end
     else
-
         %-define as default-%
         xar = max(xedges(:));
         zar = max(yedges(:));
@@ -186,8 +152,6 @@
     scene.aspectratio.y = yar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -198,15 +162,12 @@
             scene.camera.eye.z = ey(3);
         end
     else
-
         %-define as default-%
-        scene.camera.eye.x = xar + 7; 
+        scene.camera.eye.x = xar + 7;
         scene.camera.eye.y = yar + 0;
         scene.camera.eye.z = zar + 0.5;
     end
 
-    %---------------------------------------------------------------------%
-
     %-axis configuration-%
     scene.xaxis.range = axis_data.XLim(end:-1:1);
     scene.yaxis.range = axis_data.YLim;
@@ -241,10 +202,8 @@
     scene.yaxis.title = axis_data.YLabel.String;
     scene.zaxis.title = axis_data.ZLabel.String;
 
-    %---------------------------------------------------------------------%
-
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
+    obj.layout.("scene" + xsource) = scene;
 end
 
 function bar_ = bar_data(position3d, size_)
@@ -299,33 +258,36 @@
         end
     end
 
-    % all_bars = [bar_data(pos, size)  for pos, size in zip(positions, sizes) if size[2]!=0]
+    % all_bars = [bar_data(pos, size)  for pos, size in
+    % zip(positions, sizes) if size[2]!=0]
     [r, q, p] = size(all_bars);
 
     % extract unique vertices from the list of all bar vertices
     all_bars = reshape(all_bars, [r, p*q])';
     [vertices, ~, ixr] = unique(all_bars, 'rows');
 
-    %for each bar, derive the sublists of indices i, j, k assocated to its chosen  triangulation
+    %for each bar, derive the sublists of indices i, j, k associated to its chosen  triangulation
     I = [];
     J = [];
     K = [];
 
     for k = 0:p-1
-        aux = ixr([1+8*k, 1+8*k+2,1+8*k, 1+8*k+5,1+8*k, 1+8*k+7, 1+8*k+5, 1+8*k+2, 1+8*k+3, 1+8*k+6, 1+8*k+7, 1+8*k+5]);
-        I = [ I;  aux(:)];
-        aux = ixr([1+8*k+1, 1+8*k+3, 1+8*k+4, 1+8*k+1, 1+8*k+3, 1+8*k+4, 1+8*k+1, 1+8*k+6, 1+8*k+7, 1+8*k+2, 1+8*k+4, 1+8*k+6]);
-        J = [ J;  aux(:)];
-        aux = ixr([1+8*k+2, 1+8*k, 1+8*k+5, 1+8*k, 1+8*k+7, 1+8*k, 1+8*k+2, 1+8*k+5, 1+8*k+6, 1+8*k+3, 1+8*k+5, 1+8*k+7]);
-        K = [ K;  aux(:)];
+        aux = ixr([1+8*k, 1+8*k+2,1+8*k, 1+8*k+5,1+8*k, 1+8*k+7, ...
+                1+8*k+5, 1+8*k+2, 1+8*k+3, 1+8*k+6, 1+8*k+7, 1+8*k+5]);
+        I = [I; aux(:)];
+        aux = ixr([1+8*k+1, 1+8*k+3, 1+8*k+4, 1+8*k+1, 1+8*k+3, ...
+                1+8*k+4, 1+8*k+1, 1+8*k+6, 1+8*k+7, 1+8*k+2, 1+8*k+4, ...
+                1+8*k+6]);
+        J = [J; aux(:)];
+        aux = ixr([1+8*k+2, 1+8*k, 1+8*k+5, 1+8*k, 1+8*k+7, 1+8*k, ...
+                1+8*k+2, 1+8*k+5, 1+8*k+6, 1+8*k+3, 1+8*k+5, 1+8*k+7]);
+        K = [K; aux(:)];
     end
-
 end
 
 function [X, Y, Z, I, J, K] = get_plotly_mesh3d(xedges, yedges, values, bargap)
-    % x, y- array-like of shape (n,), defining the x, and y-ccordinates of data set for which we plot a 3d hist
+    % x, y- array-like of shape (n,), defining the x, and y-coordinates of data set for which we plot a 3d hist
 
-    xsize = xedges(2)-xedges(1)-bargap;
     ysize = yedges(2)-yedges(1)-bargap;
     [xe, ye]= meshgrid(xedges(1:end-1), yedges(1:end-1));
     ze = zeros(size(xe));
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateBarseries.m b/plotly/plotlyfig_aux/handlegraphics/updateBarseries.m
index 1d221e5e..c2736e6a 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateBarseries.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateBarseries.m
@@ -50,9 +50,6 @@
     % smoothing: ...[NA]
     % outliercolor: ...[NA]
     % outlierwidth: ...[NA]
-
-    %---------------------------------------------------------------------%
-
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(barIndex).AssociatedAxis);
 
@@ -65,12 +62,6 @@
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     obj.data{barIndex}.xaxis = "x" + xsource;
     obj.data{barIndex}.yaxis = "y" + ysource;
     obj.data{barIndex}.visible = strcmp(bar_data.Visible,'on');
@@ -87,46 +78,30 @@
     obj.layout.bargroupgap = 1-bar_data.BarWidth;
     obj.layout.bargap = obj.PlotlyDefaults.Bargap;
 
-    %---------------------------------------------------------------------%
-
     %-bar orientation-%
     switch bar_data.Horizontal
         case 'off'
             obj.data{barIndex}.orientation = 'v';
-            %-bar x and y data-%
             obj.data{barIndex}.x = bar_data.XData;
             obj.data{barIndex}.y = bar_data.YData;
         case 'on'
             obj.data{barIndex}.orientation = 'h';
-            %-bar x and y data-%
             obj.data{barIndex}.x = bar_data.YData;
             obj.data{barIndex}.y = bar_data.XData;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-bar showlegend-%
-    leg = bar_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch bar_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{barIndex}.showlegend = true;
+        case "off"
+            obj.data{barIndex}.showlegend = false;
     end
 
-    obj.data{barIndex}.showlegend = showleg;
-
-    %---------------------------------------------------------------------%
-
     %-bar opacity-%
     if ~ischar(bar_child_data.FaceAlpha)
         obj.data{barIndex}.opacity = bar_child_data.FaceAlpha;
     end
 
-    %---------------------------------------------------------------------%
-
     %-bar marker-%
     obj.data{barIndex}.marker = extractPatchFace(bar_child_data);
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateBaseline.m b/plotly/plotlyfig_aux/handlegraphics/updateBaseline.m
index d6a25876..bf83ad00 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateBaseline.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateBaseline.m
@@ -1,13 +1,13 @@
 function obj = updateBaseline(obj, baseIndex)
     %-UPDATE LINESERIES-%
-    updateLineseries(obj, baseIndex);
+    obj.data{baseIndex} = updateLineseries(obj, baseIndex);
 
     %-baseline showlegend-%
     obj.data{baseIndex}.showlegend = obj.PlotlyDefaults.ShowBaselineLegend;
 
     %-CHECK FOR MULTIPLE BASELINES-%
     if isMultipleBaseline(obj, baseIndex)
-        %-hide baseline if mutliple-%
+        %-hide baseline if multiple-%
         obj.data{baseIndex}.visible = false;
     end
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateBoxplot.m b/plotly/plotlyfig_aux/handlegraphics/updateBoxplot.m
index fa2ef588..0a117985 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateBoxplot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateBoxplot.m
@@ -35,8 +35,6 @@
     % shape: ...[DONE]
     % smoothing: ...[NOT SUPPORTED IN MATLAB]
 
-    %---------------------------------------------------------------------%
-
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(boxIndex).AssociatedAxis);
 
@@ -46,8 +44,6 @@
     %-BOX CHILDREN-%
     box_child = box_data.Children;
 
-    %---------------------------------------------------------------------%
-
     %-CONFIRM PROPER BOXPLOT STRUCTURE-%
 
     % check for compact boxplot
@@ -77,38 +73,26 @@
     obj.layout.bargroupgap = 1/bpnum;
     obj.data{boxIndex}.name = box_data.DisplayName;
 
-    %---------------------------------------------------------------------%
-
     % iterate through box plot children in reverse order
     for bp = bpnum:-1:1
-        
         %-CHECK FOR MULTIPLE AXES-%
         [xsource, ysource] = findSourceAxis(obj,axIndex);
-        
+
         %-AXIS DATA-%
         xaxis = obj.layout.("xaxis" + xsource);
-        yaxis = obj.layout.("yaxis" + ysource);
         obj.data{boxIndex}.xaxis = "x" + xsource;
         obj.data{boxIndex}.yaxis = "y" + ysource;
         obj.data{boxIndex}.type = 'box';
         obj.data{boxIndex}.visible = strcmp(box_data.Visible,'on');
         obj.data{boxIndex}.fillcolor = 'rgba(0, 0, 0, 0)';
-        
-        %-----------------------------------------------------------------%
-        
-        %-box showlegend-%
-        leg = box_data.Annotation;
-        legInfo = leg.LegendInformation;
-        
-        switch legInfo.IconDisplayStyle
-            case 'on'
-                showleg = true;
-            case 'off'
-                showleg = false;
+
+        switch box_data.Annotation.LegendInformation.IconDisplayStyle
+            case "on"
+                obj.data{boxIndex}.showlegend = true;
+            case "off"
+                obj.data{boxIndex}.showlegend = false;
         end
-        
-        obj.data{boxIndex}.showlegend = showleg;
-        
+
         %-boxplot components-%
         Q1 = [];
         Q3 = [];
@@ -116,7 +100,7 @@
         outliers = [];
         uwhisker = [];
         lwhisker = [];
-        
+
         % iterate through boxplot components
         for bpc = 1:bpcompnum
             %get box child data
@@ -137,7 +121,7 @@
                     median =  box_child_data.YData(1);
                 case 'Upper Whisker'
                     uwhisker = box_child_data.YData(2);
-                    
+
                     %-boxplot whisker width-%
                     obj.data{boxIndex}.whiskerwidth = 1;
                 case 'Lower Whisker'
@@ -145,12 +129,11 @@
                 case 'Box'
                     Q1 = min(box_child_data.YData);
                     Q3 = max(box_child_data.YData);
-                    
+
                     %-boxplot line style-%
                     if isCompact
                         col = round(255*box_child_data.Color);
-                        obj.data{boxIndex}.fillcolor = ...
-                                sprintf("rgb(%d,%d,%d)", col);
+                        obj.data{boxIndex}.fillcolor = getStringColor(col);
                     else
                         obj.data{boxIndex}.line = ...
                                 extractLineLine(box_child_data);
@@ -199,14 +182,12 @@
         ydata = obj.data{boxIndex}.y;
     end
 
-    %----------------------------!AXIS UPDATE!----------------------------%
-
     % take first text object as prototype for axis tick style/layout
     text_child = findobj(obj.State.Plot(boxIndex).Handle, 'Type', 'text');
 
     %-STANDARDIZE UNITS-%
     fontunits = text_child(1).FontUnits;
-    set(text_child(1), 'FontUnits', 'points');
+    text_child(1).FontUnits = 'points';
 
     text_data = text_child(1);
     xaxis.tickfont.size = text_data.FontSize;
@@ -216,13 +197,8 @@
     xaxis.showticklabels = true;
     xaxis.autorange = true;
 
-    %---------------------------------------------------------------------%
-
-    %-set the layout axis field-%
-    obj.layout = setfield(obj.layout, "xaxis" + xsource, xaxis);
-
-    %---------------------------------------------------------------------%
+    obj.layout.("xaxis" + xsource) = xaxis;
 
     %-REVERT UNITS-%
-    set(text_child(1), 'FontUnits', fontunits);
+    text_child(1).FontUnits = fontunits;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateCategoricalHistogram.m b/plotly/plotlyfig_aux/handlegraphics/updateCategoricalHistogram.m
index ed70cef2..b1135e2e 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateCategoricalHistogram.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateCategoricalHistogram.m
@@ -45,8 +45,6 @@
     % outliercolor: ...[NA]
     % outlierwidth: ...[NA]
 
-    %---------------------------------------------------------------------%
-
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(histIndex).AssociatedAxis);
 
@@ -56,82 +54,36 @@
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
-    %-hist xaxis and yaxis-%
     obj.data{histIndex}.xaxis = "x" + xsource;
     obj.data{histIndex}.yaxis = "y" + ysource;
-
-    %---------------------------------------------------------------------%
-
-    %-bar type-%
     obj.data{histIndex}.type = 'bar';
-
-    %---------------------------------------------------------------------%
-
-    %-hist data-%
     obj.data{histIndex}.width = hist_data.BarWidth;
     obj.data{histIndex}.y = hist_data.Values;
 
-    %---------------------------------------------------------------------%
-
     %-hist categorical layout on x-axis-%
     gap = 1 - hist_data.BarWidth;
     xmin = -gap;
     xmax = (hist_data.NumDisplayBins - 1) + gap;
 
-    t = 'category';
-    obj.layout.("xaxis" + xsource).type = t;
+    obj.layout.("xaxis" + xsource).type = 'category';
     obj.layout.("xaxis" + xsource).autotick = false;
     obj.layout.("xaxis" + xsource).range = {xmin, xmax};
 
-    %---------------------------------------------------------------------%
-
-    %-hist name-%
     obj.data{histIndex}.name = hist_data.DisplayName;
-
-    %---------------------------------------------------------------------%
-
-    %-layout barmode-%
     obj.layout.barmode = 'group';
-
-    %---------------------------------------------------------------------%
-
-    %-hist line width-%
     obj.data{histIndex}.marker.line.width = hist_data.LineWidth;
 
-    %---------------------------------------------------------------------%
-
-    %-hist opacity-%
     if ~ischar(hist_data.FaceAlpha)
         obj.data{histIndex}.opacity = 1.25*hist_data.FaceAlpha;
     end
 
-    %---------------------------------------------------------------------%
-
     obj.data{histIndex}.marker = extractPatchFace(hist_data);
-
-    %---------------------------------------------------------------------%
-
-    %-hist visible-%
     obj.data{histIndex}.visible = strcmp(hist_data.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    %-hist showlegend-%
-    leg = hist_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch hist_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{histIndex}.showlegend = true;
+        case "off"
+            obj.data{histIndex}.showlegend = false;
     end
-
-    obj.data{histIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateComet.m b/plotly/plotlyfig_aux/handlegraphics/updateComet.m
index 583b6c3f..73b88679 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateComet.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateComet.m
@@ -1,6 +1,5 @@
 function updateComet(obj,plotIndex)
     %----SCATTER FIELDS----%
-
     % x - [DONE]
     % y - [DONE]
     % r - [HANDLED BY SCATTER]
@@ -39,16 +38,12 @@ function updateComet(obj,plotIndex)
     % marker.maxdisplayed - [NOT SUPPORTED IN MATLAB]
 
     % LINE
-
     % line.color - [DONE]
     % line.width - [DONE]
     % line.dash - [DONE]
     % line.opacity --- [TODO]
     % line.smoothing - [NOT SUPPORTED IN MATLAB]
     % line.shape - [NOT SUPPORTED IN MATLAB]
-
-    %---------------------------------------------------------------------%
-
     axisData = obj.State.Plot(plotIndex).AssociatedAxis;
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(axisData);
@@ -73,43 +68,16 @@ function updateComet(obj,plotIndex)
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     %-getting data-%
     [x,y,z] = getpoints(tail);
 
-    %---------------------------------------------------------------------%
-
-    %-scatter xaxis and yaxis-%
     obj.data{plotIndex}.xaxis = "x" + xsource;
     obj.data{plotIndex}.yaxis = "y" + ysource;
-
-    %---------------------------------------------------------------------%
-
-    %-scatter type-%
     obj.data{plotIndex}.type = 'scatter';
-
-    %---------------------------------------------------------------------%
-
-    %-scatter visible-%
     obj.data{plotIndex}.visible = strcmp(plotData.Visible,'on');
-
-    %---------------------------------------------------------------------%
-
-    %-scatter x-%
     obj.data{plotIndex}.x = x(1);
-
-    %---------------------------------------------------------------------%
-
-    %-scatter y-%
     obj.data{plotIndex}.y = y(1);
 
-    %---------------------------------------------------------------------%
-
     %-For 3D plots-%
     obj.PlotOptions.is3d = false; % by default
 
@@ -118,22 +86,18 @@ function updateComet(obj,plotIndex)
         if any(z)
             %-scatter z-%
             obj.data{plotIndex}.z = z(1);
-            
+
             %-overwrite type-%
             obj.data{plotIndex}.type = 'scatter3d';
-            
+
             %-flag to manage 3d plots-%
             obj.PlotOptions.is3d = true;
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-scatter name-%
     obj.data{plotIndex}.name = plotData.Tag;
 
-    %---------------------------------------------------------------------%
-
     %-scatter mode-%
     if ~strcmpi('none', plotData.Marker) ...
             && ~strcmpi('none', plotData.LineStyle)
@@ -148,38 +112,18 @@ function updateComet(obj,plotIndex)
 
     obj.data{plotIndex}.mode = mode;
 
-    %---------------------------------------------------------------------%
-
-    %-scatter line-%
     obj.data{plotIndex}.line = extractLineLine(plotData);
-
-    %---------------------------------------------------------------------%
-
-    %-scatter marker-%
     obj.data{plotIndex}.marker = extractLineMarker(plotData);
 
-    %---------------------------------------------------------------------%
-
-    %-scatter showlegend-%
-    leg = plotData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch plotData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{plotIndex}.showlegend = true;
+        case "off"
+            obj.data{plotIndex}.showlegend = false;
     end
 
-    obj.data{plotIndex}.showlegend = showleg;
-
-    %---------------------------------------------------------------------%
-
-    %-SCENE CONFIGUTATION-% for 3D animations, like comet3
-
-    %---------------------------------------------------------------------%
+    %-SCENE CONFIGURATION-% for 3D animations, like comet3
     if obj.PlotOptions.is3d
-
         %-aspect ratio-%
         asr = obj.PlotOptions.AspectRatio;
 
@@ -187,8 +131,6 @@ function updateComet(obj,plotIndex)
             if ischar(asr)
                 scene.aspectmode = asr;
             elseif isvector(ar) && length(asr) == 3
-                xar = asr(1);
-                yar = asr(2);
                 zar = asr(3);
             end
         else
@@ -203,8 +145,6 @@ function updateComet(obj,plotIndex)
         scene.aspectratio.y = 1.0*xyar;
         scene.aspectratio.z = zar;
 
-        %-----------------------------------------------------------------%
-
         %-camera eye-%
         ey = obj.PlotOptions.CameraEye;
 
@@ -216,17 +156,29 @@ function updateComet(obj,plotIndex)
             end
         else
             %-define as default-%
-            xey = - xyar; if xey>0, xfac = -0.0; else, xfac = 0.0; end
-            yey = - xyar; if yey>0, yfac = -0.3; else, yfac = 0.3; end
-            if zar>0, zfac = -0.1; else, zfac = 0.1; end
+            xey = - xyar;
+            if xey>0
+                xfac = -0.0;
+            else
+                xfac = 0.0;
+            end
+            yey = - xyar;
+            if yey>0
+                yfac = -0.3;
+            else
+                yfac = 0.3;
+            end
+            if zar>0
+                zfac = -0.1;
+            else
+                zfac = 0.1;
+            end
 
-            scene.camera.eye.x = xey + xfac*xey; 
+            scene.camera.eye.x = xey + xfac*xey;
             scene.camera.eye.y = yey + yfac*yey;
             scene.camera.eye.z = zar + zfac*zar;
         end
 
-        %-----------------------------------------------------------------%
-
         %-scene axis configuration-%
 
         scene.xaxis.range = axisData.XLim;
@@ -274,19 +226,13 @@ function updateComet(obj,plotIndex)
         scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
         scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-        %-----------------------------------------------------------------%
-
         %-SET SCENE TO LAYOUT-%
-        obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
+        obj.layout.("scene" + xsource) = scene;
     end
 
-    %---------------------------------------------------------------------%
-
     %-Add a temporary tag-%
     obj.layout.isAnimation = true;
 
-    %---------------------------------------------------------------------%
-
     %-Create Frames-%
     frameData = obj.data{plotIndex};
 
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateConeplot.m b/plotly/plotlyfig_aux/handlegraphics/updateConeplot.m
index 8df7eab4..76be6578 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateConeplot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateConeplot.m
@@ -6,25 +6,19 @@
     cone_data = obj.State.Plot(coneIndex).Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SCENE DATA-%
     scene = obj.layout.("scene" + xsource);
 
-    %---------------------------------------------------------------------%
-
     %-cone type-%
     obj.data{coneIndex}.type = 'cone';
 
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     xdata = cone_data.XData;
     ydata = cone_data.YData;
     zdata = cone_data.ZData;
 
-    %---------------------------------------------------------------------%
-
     %-reformat data-%
     nfaces = size(xdata, 2);
     ref = xdata(end,1);
@@ -61,17 +55,11 @@
         v = [v; yhead - ytail];
         w = [w; zhead - ztail];
 
-        % x = [x; xtail];
-        % y = [y; ytail];
-        % z = [z; ztail];
-
         x = [x; 0.5*(xtail+xhead)];
         y = [y; 0.5*(ytail+yhead)];
         z = [z; 0.5*(ztail+zhead)];
     end
 
-    %---------------------------------------------------------------------%
-
     %-set plot data-%
     obj.data{coneIndex}.x = x;
     obj.data{coneIndex}.y = y;
@@ -80,23 +68,17 @@
     obj.data{coneIndex}.v = v;
     obj.data{coneIndex}.w = w;
 
-    %---------------------------------------------------------------------%
-
     %-set cone color-%
     obj.data{coneIndex}.colorscale{1} = ...
-            {0, sprintf("rgb(%f,%f,%f)", cone_data.EdgeColor)};
+            {0, getStringColor(round(255*cone_data.EdgeColor))};
     obj.data{coneIndex}.colorscale{2} = ...
-            {1, sprintf("rgb(%f,%f,%f)", cone_data.EdgeColor)};
-
-    %---------------------------------------------------------------------%
+            {1, getStringColor(round(255*cone_data.EdgeColor))};
 
     %-plot setting-%
     obj.data{coneIndex}.showscale = false;
     obj.data{coneIndex}.sizemode = 'scaled';
     obj.data{coneIndex}.sizeref = 1.5;
 
-    %---------------------------------------------------------------------%
-
     %-scene axis-%
     scene.xaxis.tickvals = cone_data.Parent.XTick;
     scene.xaxis.ticktext = cone_data.Parent.XTickLabel;
@@ -105,8 +87,6 @@
     scene.zaxis.range = cone_data.Parent.ZLim;
     scene.zaxis.nticks = 10;
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     ar = obj.PlotOptions.AspectRatio;
 
@@ -132,8 +112,6 @@
     scene.aspectratio.y = yar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -145,18 +123,30 @@
         end
     else
         %-define as default-%
-        xey = - xar; if xey>0 xfac = -0.2; else xfac = 0.2; end
-        yey = - yar; if yey>0 yfac = -0.2; else yfac = 0.2; end
-        if zar>0 zfac = 0.2; else zfac = -0.2; end
+        xey = - xar;
+        if xey>0
+            xfac = -0.2;
+        else
+            xfac = 0.2;
+        end
+        yey = - yar;
+        if yey>0
+            yfac = -0.2;
+        else
+            yfac = 0.2;
+        end
+        if zar>0
+            zfac = 0.2;
+        else
+            zfac = -0.2;
+        end
 
-        scene.camera.eye.x = xey + xfac*xey; 
+        scene.camera.eye.x = xey + xfac*xey;
         scene.camera.eye.y = yey + yfac*yey;
         scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set scene to layout-%
-    obj.layout = setfield(obj.layout,"scene" + xsource, scene);
+    obj.layout.("scene" + xsource) = scene;
     obj.data{coneIndex}.scene = "scene" + xsource;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateContour3.m b/plotly/plotlyfig_aux/handlegraphics/updateContour3.m
index 3f87b4ba..385f8dba 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateContour3.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateContour3.m
@@ -1,61 +1,32 @@
-function obj = updateContour3(obj,contourIndex)
+function data = updateContour3(obj,contourIndex)
     %-FIGURE DATA STRUCTURE-%
     figure_data = obj.State.Figure.Handle;
 
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(contourIndex).AssociatedAxis);
 
-    %-AXIS DATA STRUCTURE-%
-    axis_data = obj.State.Plot(contourIndex).AssociatedAxis;
-
     %-PLOT DATA STRUCTURE- %
     contour_data = obj.State.Plot(contourIndex).Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
-    %-contour xaxis and yaxis-%
-    obj.data{contourIndex}.xaxis = "x" + xsource;
-    obj.data{contourIndex}.yaxis = "y" + ysource;
-
-    %---------------------------------------------------------------------%
-
-    %-contour name-%
-    obj.data{contourIndex}.name = contour_data.DisplayName;
-
-    %---------------------------------------------------------------------%
+    data.xaxis = "x" + xsource;
+    data.yaxis = "y" + ysource;
+    data.name = contour_data.DisplayName;
+    data.type = "surface";
 
     %-setting the plot-%
     xdata = contour_data.XData;
     ydata = contour_data.YData;
     zdata = contour_data.ZData;
-        
-    %---------------------------------------------------------------------%
-
-    %-contour type-%
-    obj.data{contourIndex}.type = 'surface';
-
-    %---------------------------------------------------------------------%
 
-    %-contour x and y data
     if isvector(xdata)
         [xdata, ydata] = meshgrid(xdata, ydata);
     end
-    obj.data{contourIndex}.x = xdata;
-    obj.data{contourIndex}.y = ydata;
-
-    %---------------------------------------------------------------------%
-
-    %-contour z data-%
-    obj.data{contourIndex}.z = zdata;
-
-    %---------------------------------------------------------------------%
+    data.x = xdata;
+    data.y = ydata;
+    data.z = zdata;
 
     %-setting for contour lines z-direction-%
     if length(contour_data.LevelList) > 1
@@ -68,28 +39,23 @@
         zsize = 2e-3;
     end
 
-    obj.data{contourIndex}.contours.z.start = zstart;
-    obj.data{contourIndex}.contours.z.end = zend;
-    obj.data{contourIndex}.contours.z.size = zsize;
-    obj.data{contourIndex}.contours.z.show = true;
-    obj.data{contourIndex}.contours.z.usecolormap = true;
-    obj.data{contourIndex}.contours.z.width = 2*contour_data.LineWidth;
-    obj.data{contourIndex}.hidesurface = true;
-
-    %---------------------------------------------------------------------%
+    data.contours.z = struct( ...
+        "start", zstart, ...
+        "end", zend, ...
+        "size", zsize, ...
+        "show", true, ...
+        "usecolormap", true, ...
+        "width", 2*contour_data.LineWidth ...
+    );
+    data.hidesurface = true;
 
-    %-colorscale-%
     colormap = figure_data.Colormap;
-
     for c = 1:size((colormap),1)
         col = round(255*(colormap(c,:)));
-        obj.data{contourIndex}.colorscale{c} = ...
-                {(c-1)/(size(colormap,1)-1), sprintf("rgb(%d,%d,%d)", col)};
+        data.colorscale{c} = ...
+                {(c-1)/(size(colormap,1)-1), getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
-    %-aspect ratio-%
     ar = obj.PlotOptions.AspectRatio;
 
     if ~isempty(ar)
@@ -111,9 +77,6 @@
     obj.layout.scene.aspectratio.y = yar;
     obj.layout.scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
-    %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
     if ~isempty(ey)
@@ -124,50 +87,42 @@
         end
     else
         %-define as default-%
-        xey = - xar; if xey>0 xfac = -0.2; else xfac = 0.2; end
-        yey = - yar; if yey>0 yfac = -0.2; else yfac = 0.2; end
-        if zar>0 zfac = 0.2; else zfac = -0.2; end
-        
-        obj.layout.scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xar;
+        if xey>0
+            xfac = -0.2;
+        else
+            xfac = 0.2;
+        end
+        yey = - yar;
+        if yey>0
+            yfac = -0.2;
+        else
+            yfac = 0.2;
+        end
+        if zar>0
+            zfac = 0.2;
+        else
+            zfac = -0.2;
+        end
+
+        obj.layout.scene.camera.eye.x = xey + xfac*xey;
         obj.layout.scene.camera.eye.y = yey + yfac*yey;
         obj.layout.scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-zerolines hidded-%
+    %-zerolines hidden-%
     obj.layout.scene.xaxis.zeroline = false;
     obj.layout.scene.yaxis.zeroline = false;
     obj.layout.scene.zaxis.zeroline = false;
 
-    %---------------------------------------------------------------------%
-
-    %-contour visible-%
-    obj.data{contourIndex}.visible = strcmp(contour_data.Visible, 'on');
-
-    %---------------------------------------------------------------------%
+    data.visible = contour_data.Visible == "on";
+    data.showscale = false;
+    data.reversescale = false;
 
-    %-contour showscale-%
-    obj.data{contourIndex}.showscale = false;
-
-    %---------------------------------------------------------------------%
-
-    %-contour reverse scale-%
-    obj.data{contourIndex}.reversescale = false;
-
-    %---------------------------------------------------------------------%
-
-    %-contour showlegend-%
-
-    leg = contour_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch contour_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            data.showlegend = true;
+        case "off"
+            data.showlegend = false;
     end
-
-    obj.data{contourIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateContourProjection.m b/plotly/plotlyfig_aux/handlegraphics/updateContourProjection.m
index 1516cd13..3d86bfcd 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateContourProjection.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateContourProjection.m
@@ -5,32 +5,21 @@
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(contourIndex).AssociatedAxis);
 
-    %-AXIS DATA STRUCTURE-%
-    axis_data = obj.State.Plot(contourIndex).AssociatedAxis;
-
     %-PLOT DATA STRUCTURE- %
     contour_data = obj.State.Plot(contourIndex).Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     obj.data{contourIndex}.xaxis = "x" + xsource;
     obj.data{contourIndex}.yaxis = "y" + ysource;
     obj.data{contourIndex}.name = contour_data.DisplayName;
 
-    %---------------------------------------------------------------------%
-
     %-setting the plot-%
     xdata = contour_data.XData;
     ydata = contour_data.YData;
     zdata = contour_data.ZData;
-        
+
     %-contour type-%
     obj.data{contourIndex}.type = 'surface';
 
@@ -54,29 +43,21 @@
     obj.data{contourIndex}.contours.z.project.y = true;
     obj.data{contourIndex}.contours.z.project.z = true;
 
-    %---------------------------------------------------------------------%
-
     obj.data{contourIndex}.visible = strcmp(contour_data.Visible,'on');
     obj.data{contourIndex}.showscale = false;
 
-    %---------------------------------------------------------------------%
-
     %-colorscale (ASSUMES PATCH CDATAMAP IS 'SCALED')-%
     colormap = figure_data.Colormap;
 
     for c = 1:size((colormap),1)
         col = round(255*(colormap(c,:)));
         obj.data{contourIndex}.colorscale{c} = ...
-                {(c-1)/(size(colormap,1)-1), sprintf("rgb(%d,%d,%d)", col)};
+                {(c-1)/(size(colormap,1)-1), getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
     %-contour reverse scale-%
     obj.data{contourIndex}.reversescale = false;
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     ar = obj.PlotOptions.AspectRatio;
 
@@ -84,8 +65,6 @@
         if ischar(ar)
             obj.layout.scene.aspectmode = ar;
         elseif isvector(ar) && length(ar) == 3
-            xar = ar(1);
-            yar = ar(2);
             zar = ar(3);
         end
     else
@@ -100,8 +79,6 @@
     obj.layout.scene.aspectratio.y = xyar;
     obj.layout.scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -113,27 +90,33 @@
         end
     else
         %-define as default-%
-        xey = - xyar; if xey>0 xfac = -0.2; else xfac = 0.2; end
-        yey = - xyar; if yey>0 yfac = -0.2; else yfac = 0.2; end
-        if zar>0 zfac = 0.2; else zfac = -0.2; end
-        
-        obj.layout.scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xyar;
+        if xey>0
+            xfac = -0.2;
+        else
+            xfac = 0.2;
+        end
+        yey = - xyar;
+        if yey>0
+            yfac = -0.2;
+        else
+            yfac = 0.2;
+        end
+        if zar>0
+            zfac = 0.2;
+        else
+            zfac = -0.2;
+        end
+
+        obj.layout.scene.camera.eye.x = xey + xfac*xey;
         obj.layout.scene.camera.eye.y = yey + yfac*yey;
         obj.layout.scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-contour showlegend-%
-    leg = contour_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch contour_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{contourIndex}.showlegend = true;
+        case "off"
+            obj.data{contourIndex}.showlegend = false;
     end
-
-    obj.data{contourIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateContourgroup.m b/plotly/plotlyfig_aux/handlegraphics/updateContourgroup.m
index 30dc6081..cdc420ee 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateContourgroup.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateContourgroup.m
@@ -1,4 +1,4 @@
-function obj = updateContourgroup(obj,plotIndex)
+function data = updateContourgroup(obj,plotIndex)
     %-INITIALIZATIONS-%
 
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
@@ -7,146 +7,123 @@
     [xSource, ySource] = findSourceAxis(obj,axIndex);
 
     %-get trace data-%
-    xData = plotData.XData; if ~isvector(xData), xData = xData(1,:); end
-    yData = plotData.YData; if ~isvector(yData), yData = yData(:,1); end
+    xData = plotData.XData;
+    if ~isvector(xData)
+        xData = xData(1,:);
+    end
+    yData = plotData.YData;
+    if ~isvector(yData)
+        yData = yData(:,1);
+    end
     zData = plotData.ZData;
 
     contourStart = plotData.TextList(1);
     contourEnd = plotData.TextList(end);
     contourSize = mean(diff(plotData.TextList));
 
-    if length(plotData.TextList) == 1
+    if isscalar(plotData.TextList)
         contourStart = plotData.TextList(1) - 1e-3;
         contourEnd = plotData.TextList(end) + 1e-3;
         contourSize = 2e-3;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set trace-%
-    obj.data{plotIndex}.type = 'contour';
-    obj.data{plotIndex}.xaxis = sprintf('x%d', xSource);
-    obj.data{plotIndex}.yaxis = sprintf('y%d', ySource);
-    obj.data{plotIndex}.name = plotData.DisplayName;
-    obj.data{plotIndex}.visible = strcmp(plotData.Visible, 'on');
-    obj.data{plotIndex}.xtype = 'array';
-    obj.data{plotIndex}.ytype = 'array';
-
-    %---------------------------------------------------------------------%
-
-    %-set trace data-%
-    obj.data{plotIndex}.x = xData;
-    obj.data{plotIndex}.y = yData;
-    obj.data{plotIndex}.z = zData;
-
-    %-set contour levels-%
-    obj.data{plotIndex}.autocontour = false;
-    obj.data{plotIndex}.contours.start = contourStart;
-    obj.data{plotIndex}.contours.end = contourEnd;
-    obj.data{plotIndex}.contours.size = contourSize;
-
-    %---------------------------------------------------------------------%
-
-    %-set trace coloring-%
-    obj.data{plotIndex}.zauto = false;
-    obj.data{plotIndex}.zmin = axisData.CLim(1);
-    obj.data{plotIndex}.zmax = axisData.CLim(2);
-    obj.data{plotIndex}.showscale = false;
-    obj.data{plotIndex}.reversescale = false;
-    obj.data{plotIndex}.colorscale = getColorScale(plotData, axisData);
-
-    if strcmp(plotData.Fill, 'off')
-        obj.data{plotIndex}.contours.coloring = 'lines';
+    data.type = "contour";
+    data.xaxis = "x" + xSource;
+    data.yaxis = "y" + ySource;
+    data.name = plotData.DisplayName;
+    data.visible = plotData.Visible == "on";
+    data.xtype = "array";
+    data.ytype = "array";
+
+    data.x = xData;
+    data.y = yData;
+    data.z = zData;
+
+    data.autocontour = false;
+    data.contours.start = contourStart;
+    data.contours.end = contourEnd;
+    data.contours.size = contourSize;
+
+    data.zauto = false;
+    data.zmin = axisData.CLim(1);
+    data.zmax = axisData.CLim(2);
+    data.showscale = false;
+    data.reversescale = false;
+    data.colorscale = getColorScale(plotData, axisData);
+
+    if plotData.Fill == "off"
+        data.contours.coloring = "lines";
     else
-        obj.data{plotIndex}.contours.coloring = 'fill';
+        data.contours.coloring = "fill";
     end
 
     %-set contour line-%
-    if ~strcmp(plotData.LineStyle, 'none')
-        obj.data{plotIndex}.contours.showlines = true;
-        obj.data{plotIndex}.line = getContourLine(plotData);
+    if plotData.LineStyle ~= "none"
+        data.contours.showlines = true;
+        data.line = getContourLine(plotData);
     else
-        obj.data{plotIndex}.contours.showlines = false;
+        data.contours.showlines = false;
     end
 
     %-set contour label-%
-    if strcmpi(plotData.ShowText, 'on')
-        obj.data{plotIndex}.contours.showlabels = true;
-        obj.data{plotIndex}.contours.labelfont = getLabelFont(axisData);
+    if lower(plotData.ShowText) == "on"
+        data.contours.showlabels = true;
+        data.contours.labelfont = getLabelFont(axisData);
     end
 
     %-set trace legend-%
-    obj.data{plotIndex}.showlegend = getShowLegend(plotData);
+    data.showlegend = getShowLegend(plotData);
 end
 
 function contourLine = getContourLine(plotData)
-    %-initializations-%
-    lineStyle = plotData.LineStyle;
-    lineWidth = 1.5*plotData.LineWidth;
-    lineColor = plotData.LineColor;
-
-    %-line color-%
-    if isnumeric(lineColor)
-        lineColor = getStringColor( 255*lineColor );
+    if isnumeric(plotData.LineColor)
+        lineColor = getStringColor(round(255*plotData.LineColor));
     else
-        lineColor = 'rgba(0,0,0,0)';
+        lineColor = "rgba(0,0,0,0)";
     end
 
-    %-line dash-%
-    switch lineStyle
-        case '-'
-            lineStyle = 'solid';
-        case '--'
-            lineStyle = 'dash';
-        case ':'
-            lineStyle = 'dot';
-        case '-.'
-            lineStyle = 'dashdot';
-    end
-
-    %-return-%
-    contourLine.width = lineWidth;
-    contourLine.dash = lineStyle;
-    contourLine.color = lineColor;
-    contourLine.smoothing = 0;
+    contourLine = struct( ...
+        "width", 1.5*plotData.LineWidth, ...
+        "dash", getLineDash(plotData.LineStyle), ...
+        "color", lineColor, ...
+        "smoothing", 0 ...
+    );
 end
 
 function colorScale = getColorScale(plotData, axisData)
-    %-initializations-%
     cMap = axisData.Colormap;
     nColors = size(cMap, 1);
     isBackground = any(plotData.ZData(:) < plotData.TextList(1));
     nContours = length(plotData.TextList);
-    cScaleInd = linspace(0,1, nContours); 
-    if nContours==1, cScaleInd = 0.5; end
-    cMapInd = floor( (nColors-1)*cScaleInd ) + 1;
+    cScaleInd = linspace(0,1, nContours);
+    if nContours == 1
+        cScaleInd = 0.5;
+    end
+    cMapInd = floor((nColors-1)*cScaleInd) + 1;
 
-    %-colorscale-%
-    if strcmp(plotData.Fill, 'on')
+    if plotData.Fill == "on"
+        colorScale = cell(1, nContours);
+        colors = cMap(cMapInd, :);
         if isBackground
-            colorScale{1} = {0, getStringColor( 255*ones(1,3) )};
-            cScaleInd = linspace(1/nContours, 1, nContours);
-        end
-        for n = 1:nContours
-            m = n; if isBackground, m = n+1; end
-            stringColor = getStringColor( 255*cMap(cMapInd(n), :) );
-            colorScale{m} = {cScaleInd(n), stringColor};
+            colorScale = cell(1, nContours+1);
+            colors = [ones(1,3); colors];
+            cScaleInd = linspace(0, 1, nContours+1);
         end
     else
+        colors = cMap;
+        colorScale = cell(1,nColors);
         cScaleInd = rescale(1:nColors, 0, 1);
-        for n = 1:nColors
-            stringColor = getStringColor( 255*cMap(n,:) );
-            colorScale{n} = {cScaleInd(n), stringColor};
-        end
+    end
+    for n = 1:numel(colorScale)
+        stringColor = getStringColor(round(255*colors(n,:)));
+        colorScale{n} = {cScaleInd(n), stringColor};
     end
 end
 
 function labelFont = getLabelFont(axisData)
-    labelColor = getStringColor(255*axisData.XAxis.Color);
-    labelSize = axisData.XAxis.FontSize;
-    labelFamily = matlab2plotlyfont(axisData.XAxis.FontName);
-
-    labelFont.color = labelColor;
-    labelFont.size = labelSize;
-    labelFont.family = labelFamily;
+    labelFont = struct( ...
+        "color", getStringColor(round(255*axisData.XAxis.Color)), ...
+        "size", axisData.XAxis.FontSize, ...
+        "family", matlab2plotlyfont(axisData.XAxis.FontName) ...
+    );
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateErrorbar.m b/plotly/plotlyfig_aux/handlegraphics/updateErrorbar.m
index 7bf43ae7..9e1713ad 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateErrorbar.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateErrorbar.m
@@ -1,54 +1,28 @@
-function obj = updateErrorbar(obj, plotIndex)
-	%-INITIALIZATION-%
-
+function data = updateErrorbar(obj, plotIndex)
 	%-get data structures-%
 	plotData = obj.State.Plot(plotIndex).Handle;
 
-	%-get error data-%
-	yPositiveDelta = plotData.YPositiveDelta;
-	yNegativeDelta = plotData.YNegativeDelta;
-
-	xPositiveDelta = plotData.XPositiveDelta;
-	xNegativeDelta = plotData.XNegativeDelta;
-
-	%---------------------------------------------------------------------%
-
 	%-set trace-%
-
-	updateLineseries(obj, plotIndex);
-
-	%-errorbar visible-%
-	obj.data{plotIndex}.error_y.visible = true;
-	obj.data{plotIndex}.error_x.visible = true;
-
-	%-errorbar type-%
-	obj.data{plotIndex}.error_y.type = 'data';
-	obj.data{plotIndex}.error_x.type = 'data';
-
-	%-errorbar symmetry-%
-	obj.data{plotIndex}.error_y.symmetric = false;
-
-	%---------------------------------------------------------------------%
-
-	%-set errorbar data-%
-	obj.data{plotIndex}.error_y.array = yPositiveDelta;
-	obj.data{plotIndex}.error_x.array = xPositiveDelta;
-	obj.data{plotIndex}.error_x.arrayminus = xNegativeDelta;
-	obj.data{plotIndex}.error_y.arrayminus = yNegativeDelta;
-
-	%---------------------------------------------------------------------%
-
-	%-errorbar thickness-%
-	obj.data{plotIndex}.error_y.thickness = plotData.LineWidth;
-	obj.data{plotIndex}.error_x.thickness = plotData.LineWidth;
-
-	%-errorbar width-%
-	obj.data{plotIndex}.error_y.width = obj.PlotlyDefaults.ErrorbarWidth;
-	obj.data{plotIndex}.error_x.width = obj.PlotlyDefaults.ErrorbarWidth;
-
-	%-errorbar color-%
-	errorColor = getStringColor(255*plotData.Color);
-	obj.data{plotIndex}.error_y.color = errorColor;
-	obj.data{plotIndex}.error_x.color = errorColor;
+	data = updateLineseries(obj, plotIndex);
+
+	data.error_y = struct( ...
+		"visible", true, ...
+		"type", "data", ...
+		"array", plotData.YPositiveDelta, ...
+		"arrayminus", plotData.YNegativeDelta, ...
+		"thickness", plotData.LineWidth, ...
+		"width", obj.PlotlyDefaults.ErrorbarWidth, ...
+		"color", getStringColor(round(255*plotData.Color)), ...
+		"symmetric", false ...
+	);
+
+	data.error_x = struct( ...
+		"visible", true, ...
+		"type", "data", ...
+		"array", plotData.XPositiveDelta, ...
+		"arrayminus", plotData.XNegativeDelta, ...
+		"thickness", plotData.LineWidth, ...
+		"width", obj.PlotlyDefaults.ErrorbarWidth, ...
+		"color", getStringColor(round(255*plotData.Color)) ...
+	);
 end
-		
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateErrorbarseries.m b/plotly/plotlyfig_aux/handlegraphics/updateErrorbarseries.m
index 8a3ade0b..519a1643 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateErrorbarseries.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateErrorbarseries.m
@@ -1,4 +1,4 @@
-function obj = updateErrorbarseries(obj, errorbarIndex)
+function data = updateErrorbarseries(obj, errorbarIndex)
     % type: ...[DONE]
     % symmetric: ...[DONE]
     % array: ...[DONE]
@@ -10,36 +10,17 @@
     % width: ...[DONE]
     % opacity: ---[TODO]
     % visible: ...[DONE]
-
-    %---------------------------------------------------------------------%
-
-    %-ERRORBAR STRUCTURE-%
     errorbar_data = obj.State.Plot(errorbarIndex).Handle;
 
-    %-ERRORBAR CHILDREN-%
-    errorbar_child = obj.State.Plot(errorbarIndex).Handle.Children;
-
-    %-ERROR BAR LINE CHILD-%
-    errorbar_line_child_data = errorbar_child(2);
-
-    %---------------------------------------------------------------------%
-
-    %-UPDATE LINESERIES-%
-    updateLineseries(obj, errorbarIndex);
-
-    %---------------------------------------------------------------------%
-
-    obj.data{errorbarIndex}.error_y.visible = true;
-    obj.data{errorbarIndex}.error_y.type = 'data';
-    obj.data{errorbarIndex}.error_y.symmetric = false;
-    obj.data{errorbarIndex}.error_y.array = errorbar_data.UData;
-    obj.data{errorbarIndex}.error_y.arrayminus = errorbar_data.LData;
-    obj.data{errorbarIndex}.error_y.thickness = errorbar_line_child_data.LineWidth;
-    obj.data{errorbarIndex}.error_y.width = obj.PlotlyDefaults.ErrorbarWidth;
-
-    %---------------------------------------------------------------------%
-
-    %-errorbar color-%
-    col = round(255*errorbar_line_child_data.Color);
-    obj.data{errorbarIndex}.error_y.color = sprintf("rgb(%d,%d,%d)", col);
+    data = updateLineseries(obj, errorbarIndex);
+    data.error_y = struct( ...
+        "visible", true, ...
+        "type", "data", ...
+        "symmetric", false, ...
+        "array", errorbar_data.UData, ...
+        "arrayminus", errorbar_data.LData, ...
+        "thickness", errorbar_data.Children(2).LineWidth, ...
+        "color", getStringColor(round(255*errorbar_data.Children(2).Color)), ...
+        "width", obj.PlotlyDefaults.ErrorbarWidth ...
+    );
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateFmesh.m b/plotly/plotlyfig_aux/handlegraphics/updateFmesh.m
index a8d43d99..34ee7f2a 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateFmesh.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateFmesh.m
@@ -3,7 +3,7 @@
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     meshData = obj.State.Plot(surfaceIndex).Handle;
@@ -19,23 +19,17 @@
     obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
     contourIndex = obj.PlotOptions.nPlots;
 
-    %---------------------------------------------------------------------%
-
     %-associate scene-%
     obj.data{surfaceIndex}.scene = sprintf('scene%d', xsource);
     obj.data{contourIndex}.scene = sprintf('scene%d', xsource);
 
-    %---------------------------------------------------------------------%
-
     %-surface type for face color-%
     obj.data{surfaceIndex}.type = 'surface';
-        
+
     %-scatter3d type for contour mesh lines-%
     obj.data{contourIndex}.type = 'scatter3d';
     obj.data{contourIndex}.mode = 'lines';
 
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     meshDensity = meshData.MeshDensity;
     xData = meshData.XData(1:meshDensity^2);
@@ -59,43 +53,29 @@
     yDataContour = [yDataContour; NaN(1, size(yDataContour, 2))];
     zDataContour = [zDataContour; NaN(1, size(zDataContour, 2))];
 
-    %---------------------------------------------------------------------%
-
     %-set data on surface-%
     obj.data{surfaceIndex}.x = xDataSurface;
     obj.data{surfaceIndex}.y = yDataSurface;
     obj.data{surfaceIndex}.z = zDataSurface;
 
-    %---------------------------------------------------------------------%
-
     %-set data on scatter3d-%
     obj.data{contourIndex}.x = xDataContour(:);
     obj.data{contourIndex}.y = yDataContour(:);
     obj.data{contourIndex}.z = zDataContour(:);
 
-    %---------------------------------------------------------------------%
-
     %-COLORING-%
 
-    %---------------------------------------------------------------------%
-
     %-get colormap-%
     cMap = figureData.Colormap;
     fac = 1/(length(cMap)-1);
     colorScale = {};
 
-    for c = 1: length(cMap)
-        colorScale{c} = { ...
-            (c-1)*fac, ...
-            sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :))), ...
-        };
+    for c = 1:length(cMap)
+        colorScale{c} = {(c-1)*fac, getStringColor(round(255*cMap(c, :)))};
     end
-
-    %---------------------------------------------------------------------%
     %-get edge color-%
     if isnumeric(meshData.EdgeColor)
-        cDataContour = sprintf("rgb(%d,%d,%d)", ...
-                round(255*meshData.EdgeColor));
+        cDataContour = getStringColor(round(255*meshData.EdgeColor));
     elseif strcmpi(meshData.EdgeColor, "interp")
         cDataContour = zDataContour(:);
         obj.data{contourIndex}.line.colorscale = colorScale;
@@ -106,8 +86,6 @@
     %-set edge color-%
     obj.data{contourIndex}.line.color = cDataContour;
 
-    %---------------------------------------------------------------------%
-
     %-get face color-%
     if isnumeric(meshData.FaceColor)
         for n = 1:size(zDataSurface, 2)
@@ -118,8 +96,8 @@
 
         [cDataSurface, cMapSurface] = rgb2ind(cDataSurface, 256);
 
-        for c = 1: size(cMapSurface, 1)
-            colorScale{c} = { (c-1)*fac , sprintf('rgba(%f,%f,%f, 1)', cMapSurface(c, :))};
+        for c = 1:size(cMapSurface, 1)
+            colorScale{c} = {(c-1)*fac, getStringColor(round(255*cMapSurface(c, :)), 1)};
         end
 
         obj.data{surfaceIndex}.cmin = 0;
@@ -143,18 +121,12 @@
         end
     end
 
-    %-set face color-%
     obj.data{surfaceIndex}.colorscale = colorScale;
     obj.data{surfaceIndex}.surfacecolor = cDataSurface;
 
-    %-lighting settings-%
-
     if isnumeric(meshData.FaceColor) && all(meshData.FaceColor == [1, 1, 1])
         obj.data{surfaceIndex}.lighting.diffuse = 0.5;
         obj.data{surfaceIndex}.lighting.ambient = 0.725;
-    else
-        % obj.data{surfaceIndex}.lighting.diffuse = 1.0;
-        % obj.data{surfaceIndex}.lighting.ambient = 0.9;
     end
 
     if meshData.FaceAlpha ~= 1
@@ -167,29 +139,11 @@
         obj.data{surfaceIndex}.lighting.ambient = 0.3;
     end
 
-    %-opacity-%
     obj.data{surfaceIndex}.opacity = meshData.FaceAlpha;
 
-    %---------------------------------------------------------------------%
-
-    %-line style-%
-
     obj.data{contourIndex}.line.width = 3*meshData.LineWidth;
+    obj.data{contourIndex}.line.dash = getLineDash(meshData.LineStyle);
 
-    switch meshData.LineStyle
-        case '-'
-            obj.data{contourIndex}.line.dash = 'solid';
-        case '--'
-            obj.data{contourIndex}.line.dash = 'dash';
-        case '-.'
-            obj.data{contourIndex}.line.dash = 'dashdot';
-        case ':'
-            obj.data{contourIndex}.line.dash = 'dot';
-    end
-
-    %---------------------------------------------------------------------%
-
-    %-show contours-%
 
     if strcmpi(meshData.ShowContours, 'on')
         obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
@@ -213,25 +167,16 @@
         obj.data{projectionIndex}.contours.z.project.z = true;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-SCENE CONFIGUTATION-%
-
-    %---------------------------------------------------------------------%
-
-    %-aspect ratio-%
+    %-SCENE CONFIGURATION-%
     asr = obj.PlotOptions.AspectRatio;
 
     if ~isempty(asr)
         if ischar(asr)
             scene.aspectmode = asr;
         elseif isvector(ar) && length(asr) == 3
-            xar = asr(1);
-            yar = asr(2);
             zar = asr(3);
         end
     else
-
         %-define as default-%
         xar = max(xData(:));
         yar = max(yData(:));
@@ -243,8 +188,6 @@
     scene.aspectratio.y = 1.0*xyar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -256,17 +199,29 @@
         end
     else
         %-define as default-%
-        xey = - xyar; if xey>0 xfac = -0.0; else xfac = 0.0; end
-        yey = - xyar; if yey>0 yfac = -0.3; else yfac = 0.3; end
-        if zar>0 zfac = 0.1; else zfac = -0.1; end
-        
-        scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xyar;
+        if xey>0
+            xfac = -0.0;
+        else
+            xfac = 0.0;
+        end
+        yey = - xyar;
+        if yey>0
+            yfac = -0.3;
+        else
+            yfac = 0.3;
+        end
+        if zar>0
+            zfac = 0.1;
+        else
+            zfac = -0.1;
+        end
+
+        scene.camera.eye.x = xey + xfac*xey;
         scene.camera.eye.y = yey + yfac*yey;
         scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
 
     scene.xaxis.range = axisData.XLim;
@@ -310,40 +265,20 @@
     scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-    %---------------------------------------------------------------------%
-
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
-
-    %---------------------------------------------------------------------%
+    obj.layout.("scene" + xsource) = scene;
 
-    %-surface name-%
     obj.data{surfaceIndex}.name = meshData.DisplayName;
     obj.data{contourIndex}.name = meshData.DisplayName;
-
-    %---------------------------------------------------------------------%
-
-    %-surface showscale-%
     obj.data{surfaceIndex}.showscale = false;
     obj.data{contourIndex}.showscale = false;
-
-    %---------------------------------------------------------------------%
-
-    %-surface visible-%
     obj.data{surfaceIndex}.visible = strcmp(meshData.Visible,'on');
     obj.data{contourIndex}.visible = strcmp(meshData.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = meshData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch meshData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
-
-    obj.data{surfaceIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateFunctionContour.m b/plotly/plotlyfig_aux/handlegraphics/updateFunctionContour.m
index ec4764c7..2affb033 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateFunctionContour.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateFunctionContour.m
@@ -1,95 +1,62 @@
-function obj = updateFunctionContour(obj,contourIndex)
+function data = updateFunctionContour(obj,contourIndex)
     %-FIGURE DATA STRUCTURE-%
     figure_data = obj.State.Figure.Handle;
 
-    %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(contourIndex).AssociatedAxis);
-
-    %-AXIS DATA STRUCTURE-%
     axis_data = obj.State.Plot(contourIndex).AssociatedAxis;
-
-    %-PLOT DATA STRUCTURE- %
     contour_data = obj.State.Plot(contourIndex).Handle;
-
-    %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
-    obj.data{contourIndex}.xaxis = "x" + xsource;
-    obj.data{contourIndex}.yaxis = "y" + ysource;
-    obj.data{contourIndex}.name = contour_data.DisplayName;
-    obj.data{contourIndex}.type = 'contour';
-
-    %---------------------------------------------------------------------%
+    data.xaxis = "x" + xsource;
+    data.yaxis = "y" + ysource;
+    data.name = contour_data.DisplayName;
+    data.type = "contour";
 
-    %-setting the plot-%
     xdata = contour_data.XData;
     ydata = contour_data.YData;
     zdata = contour_data.ZData;
 
-    %-contour x data-%
     if ~isvector(xdata)
-        obj.data{contourIndex}.x = xdata(1,:);
+        data.x = xdata(1,:);
     else
-        obj.data{contourIndex}.x = xdata;
+        data.x = xdata;
     end
 
-    %-contour y data-%
     if ~isvector(ydata)
-        obj.data{contourIndex}.y = ydata(:,1);
+        data.y = ydata(:,1);
     else
-        obj.data{contourIndex}.y = ydata;
+        data.y = ydata;
     end
 
-    %-contour z data-%
-    obj.data{contourIndex}.z = zdata;
+    data.z = zdata;
 
-    %---------------------------------------------------------------------%
-
-    obj.data{contourIndex}.xtype = 'array';
-    obj.data{contourIndex}.ytype = 'array';
-    obj.data{contourIndex}.visible = strcmp(contour_data.Visible,'on');
-    obj.data{contourIndex}.showscale = false;
-    obj.data{contourIndex}.zauto = false;
-    obj.data{contourIndex}.zmin = axis_data.CLim(1);
-    obj.data{contourIndex}.zmax = axis_data.CLim(2);
-
-    %---------------------------------------------------------------------%
+    data.xtype = "array";
+    data.ytype = "array";
+    data.visible = contour_data.Visible == "on";
+    data.showscale = false;
+    data.zauto = false;
+    data.zmin = axis_data.CLim(1);
+    data.zmax = axis_data.CLim(2);
 
     %-colorscale (ASSUMES PATCH CDATAMAP IS 'SCALED')-%
     colormap = figure_data.Colormap;
 
     for c = 1:size((colormap),1)
         col = round(255*(colormap(c,:)));
-        obj.data{contourIndex}.colorscale{c} = ...
-                {(c-1)/(size(colormap,1)-1), sprintf("rgb(%d,%d,%d)", col)};
+        data.colorscale{c} = ...
+                {(c-1)/(size(colormap,1)-1), getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
-    obj.data{contourIndex}.reversescale = false;
-    obj.data{contourIndex}.autocontour = false;
-
-    %---------------------------------------------------------------------%
-
-    %-contour contours-%
+    data.reversescale = false;
+    data.autocontour = false;
 
-    %-coloring-%
     switch contour_data.Fill
-        case 'off'
-            obj.data{contourIndex}.contours.coloring = 'lines';
-        case 'on'
-            obj.data{contourIndex}.contours.coloring = 'fill';
+        case "off"
+            data.contours.coloring = "lines";
+        case "on"
+            data.contours.coloring = "fill";
     end
 
-    %---------------------------------------------------------------------%
-
-    %-contour levels-%
     if length(contour_data.LevelList) > 1
         cstart = contour_data.LevelList(1);
         cend = contour_data.LevelList(end);
@@ -100,77 +67,39 @@
         csize = 2e-3;
     end
 
-    %-start-%
-    obj.data{contourIndex}.contours.start = cstart;
-
-    %-end-%
-    obj.data{contourIndex}.contours.end = cend;
-
-    %-step-%
-    obj.data{contourIndex}.contours.size = csize;
+    data.contours.start = cstart;
+    data.contours.end = cend;
+    data.contours.size = csize;
 
-    %---------------------------------------------------------------------%
-
-    if (~strcmp(contour_data.LineStyle,'none'))
-        %-contour line colour-%
+    if contour_data.LineStyle ~= "none"
         if isnumeric(contour_data.LineColor)
-            col = round(255*contour_data.LineColor);
-            obj.data{contourIndex}.line.color = ...
-                    sprintf("rgb(%d,%d,%d)", col);
+            data.line.color = getStringColor(round(255*contour_data.LineColor));
         else
-            obj.data{contourIndex}.line.color = "rgba(0,0,0,0)";
-        end
-
-        %-contour line width-%
-        obj.data{contourIndex}.line.width = contour_data.LineWidth;
-
-        %-contour line dash-%
-        switch contour_data.LineStyle
-            case '-'
-                LineStyle = 'solid';
-            case '--'
-                LineStyle = 'dash';
-            case ':'
-                LineStyle = 'dot';
-            case '-.'
-                LineStyle = 'dashdot';
+            data.line.color = "rgba(0,0,0,0)";
         end
-        obj.data{contourIndex}.line.dash = LineStyle;
 
-        %-contour smoothing-%
-        obj.data{contourIndex}.line.smoothing = 0;
+        data.line.width = contour_data.LineWidth;
+        data.line.dash = getLineDash(contour_data.LineStyle);
+        data.line.smoothing = 0;
     else
-        %-contours showlines-%
-        obj.data{contourIndex}.contours.showlines = false;
+        data.contours.showlines = false;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-contour showlegend-%
-
-    leg = contour_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch contour_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            data.showlegend = true;
+        case "off"
+            data.showlegend = false;
     end
 
-    obj.data{contourIndex}.showlegend = showleg;
-
-    %---------------------------------------------------------------------%
-
-    %-axis layout-%
-    t = 'linear';
-    obj.layout.("xaxis" + xsource).type=t;
-    obj.layout.("xaxis" + xsource).autorange=true;
-    obj.layout.("xaxis" + xsource).ticktext=axis_data.XTickLabel;
-    obj.layout.("xaxis" + xsource).tickvals=axis_data.XTick;
+    t = "linear";
+    obj.layout.("xaxis" + xsource).type = t;
+    obj.layout.("xaxis" + xsource).autorange = true;
+    obj.layout.("xaxis" + xsource).ticktext = axis_data.XTickLabel;
+    obj.layout.("xaxis" + xsource).tickvals = axis_data.XTick;
 
-    obj.layout.("yaxis" + xsource).type=t;
-    obj.layout.("yaxis" + xsource).autorange=true;
-    obj.layout.("yaxis" + xsource).ticktext=axis_data.YTickLabel;
-    obj.layout.("yaxis" + xsource).tickvals=axis_data.YTick;
+    obj.layout.("yaxis" + xsource).type = t;
+    obj.layout.("yaxis" + xsource).autorange = true;
+    obj.layout.("yaxis" + xsource).ticktext = axis_data.YTickLabel;
+    obj.layout.("yaxis" + xsource).tickvals = axis_data.YTick;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateFunctionSurface.m b/plotly/plotlyfig_aux/handlegraphics/updateFunctionSurface.m
index 224b7f0a..bfc72e72 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateFunctionSurface.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateFunctionSurface.m
@@ -3,7 +3,7 @@
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     meshData = obj.State.Plot(surfaceIndex).Handle;
@@ -12,116 +12,69 @@
     %-AXIS STRUCTURE-%
     axisData = ancestor(meshData.Parent,'axes');
 
-    %-SCENE DATA-%
-    scene = obj.layout.("scene" + xsource);
-
-    %-GET CONTOUR INDEX-%
-    obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
-    contourIndex = obj.PlotOptions.nPlots;
-
-    %---------------------------------------------------------------------%
-
-    %-associate scene-%
-    obj.data{surfaceIndex}.scene = sprintf('scene%d', xsource);
-    obj.data{contourIndex}.scene = sprintf('scene%d', xsource);
-
-    %---------------------------------------------------------------------%
-
-    %-surface type for face color-%
-    obj.data{surfaceIndex}.type = 'surface';
-        
-    %-scatter3d type for contour mesh lines-%
-    obj.data{contourIndex}.type = 'scatter3d';
-    obj.data{contourIndex}.mode = 'lines';
-
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     meshDensity = meshData.MeshDensity;
     xData = meshData.XData(1:meshDensity^2);
     yData = meshData.YData(1:meshDensity^2);
     zData = meshData.ZData(1:meshDensity^2);
 
-    %-reformat data to mesh-%
-    xDataSurface = reshape(xData, [meshDensity, meshDensity])';
-    yDataSurface = reshape(yData, [meshDensity, meshDensity])';
-    zDataSurface = reshape(zData, [meshDensity, meshDensity])';
-
-    xDataContour = [xDataSurface; NaN(1, size(xDataSurface, 2))];
-    yDataContour = [yDataSurface; NaN(1, size(yDataSurface, 2))];
-    zDataContour = [zDataSurface; NaN(1, size(zDataSurface, 2))];
-
-    xDataContour = [xDataContour; xDataContour(1:end-1,:)'];
-    yDataContour = [yDataContour; yDataContour(1:end-1,:)'];
-    zDataContour = [zDataContour; zDataContour(1:end-1,:)'];
-
-    xDataContour = [xDataContour; NaN(1, size(xDataContour, 2))];
-    yDataContour = [yDataContour; NaN(1, size(yDataContour, 2))];
-    zDataContour = [zDataContour; NaN(1, size(zDataContour, 2))];
-
-    %---------------------------------------------------------------------%
-
-    %-set data on surface-%
-    obj.data{surfaceIndex}.x = xDataSurface;
-    obj.data{surfaceIndex}.y = yDataSurface;
-    obj.data{surfaceIndex}.z = zDataSurface;
-
-    %---------------------------------------------------------------------%
-
-    %-set data on scatter3d-%
-    obj.data{contourIndex}.x = xDataContour(:);
-    obj.data{contourIndex}.y = yDataContour(:);
-    obj.data{contourIndex}.z = zDataContour(:);
-
-    %---------------------------------------------------------------------%
+    xDataSurface = reformatDataToMesh(xData, meshDensity);
+    yDataSurface = reformatDataToMesh(yData, meshDensity);
+    zDataSurface = reformatDataToMesh(zData, meshDensity);
+
+    surfaceData.scene = "scene" + xsource;
+    surfaceData.type = "surface";
+    surfaceData.x = xDataSurface;
+    surfaceData.y = yDataSurface;
+    surfaceData.z = zDataSurface;
+    surfaceData.name = meshData.DisplayName;
+    surfaceData.showscale = false;
+    surfaceData.visible = meshData.Visible == "on";
+
+    contourData.scene = "scene" + xsource;
+    contourData.type = "scatter3d";
+    contourData.mode = "lines";
+    contourData.x = getContourDataFromSurface(xDataSurface);
+    contourData.y = getContourDataFromSurface(yDataSurface);
+    contourData.z = getContourDataFromSurface(zDataSurface);
+    contourData.name = meshData.DisplayName;
+    contourData.showscale = false;
+    contourData.visible = meshData.Visible == "on";
 
     %-COLORING-%
 
-    %---------------------------------------------------------------------%
-
     %-get colormap-%
     cMap = figureData.Colormap;
     fac = 1/(length(cMap)-1);
-    colorScale = {};
+    colorScale = cell(1,length(cMap));
 
-    for c = 1: length(cMap)
-        colorScale{c} = {(c-1)*fac, ...
-                sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+    for c = 1:length(cMap)
+        colorScale{c} = {(c-1)*fac, getStringColor(round(255*cMap(c, :)))};
     end
-
-    %---------------------------------------------------------------------%
     %-get edge color-%
     if isnumeric(meshData.EdgeColor)
-        cDataContour = sprintf("rgb(%d,%d,%d)", ...
-                round(255*meshData.EdgeColor));
+        cDataContour = getStringColor(round(255*meshData.EdgeColor));
     elseif strcmpi(meshData.EdgeColor, "interp")
-        cDataContour = zDataContour(:);
-        obj.data{contourIndex}.line.colorscale = colorScale;
+        cDataContour = contourData.z;
+        contourData.line.colorscale = colorScale;
     elseif strcmpi(meshData.EdgeColor, "none")
         cDataContour = "rgba(0,0,0,0)";
     end
 
-    %-set edge color-%
-    obj.data{contourIndex}.line.color = cDataContour;
-
-    %---------------------------------------------------------------------%
+    contourData.line.color = cDataContour;
 
-    %-get face color-%
     if isnumeric(meshData.FaceColor)
         for n = 1:size(zDataSurface, 2)
             for m = 1:size(zDataSurface, 1)
                 cDataSurface(m, n, :) = meshData.FaceColor;
             end
         end
-
         [cDataSurface, cMapSurface] = rgb2ind(cDataSurface, 256);
-
         for c = 1: size(cMapSurface, 1)
-            colorScale{c} = { (c-1)*fac , sprintf('rgba(%f,%f,%f, 1)', cMapSurface(c, :))};
+            colorScale{c} = { (c-1)*fac , getStringColor(round(255*cMapSurface(c, :)), 1)};
         end
-
-        obj.data{surfaceIndex}.cmin = 0;
-        obj.data{surfaceIndex}.cmax = 255;
+        surfaceData.cmin = 0;
+        surfaceData.cmax = 255;
     elseif strcmpi(meshData.FaceColor, 'interp')
         cDataSurface = zDataSurface;
         if surfaceIndex > xsource
@@ -129,10 +82,8 @@
             for idx = xsource:surfaceIndex
                 cData = [cData; obj.data{idx}.z];
             end
-
             cMin = min(cData(:));
             cMax = max(cData(:));
-
             for idx = xsource:surfaceIndex
                 obj.data{idx}.cmin = cMin;
                 obj.data{idx}.cmax = cMax;
@@ -140,95 +91,74 @@
         end
     end
 
-    %-set face color-%
-    obj.data{surfaceIndex}.colorscale = colorScale;
-    obj.data{surfaceIndex}.surfacecolor = cDataSurface;
-
-    %-lighting settings-%
+    surfaceData.colorscale = colorScale;
+    surfaceData.surfacecolor = cDataSurface;
 
     if isnumeric(meshData.FaceColor) && all(meshData.FaceColor == [1, 1, 1])
-        obj.data{surfaceIndex}.lighting.diffuse = 0.5;
-        obj.data{surfaceIndex}.lighting.ambient = 0.725;
-    else
-        % obj.data{surfaceIndex}.lighting.diffuse = 1.0;
-        % obj.data{surfaceIndex}.lighting.ambient = 0.9;
+        surfaceData.lighting.diffuse = 0.5;
+        surfaceData.lighting.ambient = 0.725;
     end
-
     if meshData.FaceAlpha ~= 1
-        obj.data{surfaceIndex}.lighting.diffuse = 0.5;
-        obj.data{surfaceIndex}.lighting.ambient = 0.725 + (1-meshData.FaceAlpha);
+        surfaceData.lighting.diffuse = 0.5;
+        surfaceData.lighting.ambient = 0.725 + (1-meshData.FaceAlpha);
     end
-
     if obj.PlotlyDefaults.IsLight
-        obj.data{surfaceIndex}.lighting.diffuse = 1.0;
-        obj.data{surfaceIndex}.lighting.ambient = 0.3;
+        surfaceData.lighting.diffuse = 1.0;
+        surfaceData.lighting.ambient = 0.3;
     end
 
-    %-opacity-%
-    obj.data{surfaceIndex}.opacity = meshData.FaceAlpha;
-
-    %---------------------------------------------------------------------%
-
-    %-line style-%
+    surfaceData.opacity = meshData.FaceAlpha;
+    contourData.line.width = 3*meshData.LineWidth;
+    contourData.line.dash = getLineDash(meshData.LineStyle);
 
-    obj.data{contourIndex}.line.width = 3*meshData.LineWidth;
-
-    switch meshData.LineStyle
-        case '-'
-            obj.data{contourIndex}.line.dash = 'solid';
-        case '--'
-            obj.data{contourIndex}.line.dash = 'dash';
-        case '-.'
-            obj.data{contourIndex}.line.dash = 'dashdot';
-        case ':'
-            obj.data{contourIndex}.line.dash = 'dot';
+    switch meshData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            surfaceData.showlegend = true;
+        case "off"
+            surfaceData.showlegend = false;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-show contours-%
+    obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
+    contourIndex = obj.PlotOptions.nPlots;
+    obj.data{surfaceIndex} = surfaceData;
+    obj.data{contourIndex} = contourData;
 
-    if strcmpi(meshData.ShowContours, 'on')
+    if lower(meshData.ShowContours) == "on"
         obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
         projectionIndex = obj.PlotOptions.nPlots;
-
-        obj.data{projectionIndex}.type = 'surface';
-        obj.data{projectionIndex}.scene = sprintf('scene%d', xsource);
-
-        obj.data{projectionIndex}.x = xDataSurface;
-        obj.data{projectionIndex}.y = yDataSurface;
-        obj.data{projectionIndex}.z = zDataSurface;
-
-        obj.data{projectionIndex}.colorscale = colorScale;
-        obj.data{projectionIndex}.hidesurface = true;
-        obj.data{projectionIndex}.surfacecolor = zDataSurface;
-        obj.data{projectionIndex}.showscale = false;
-
-        obj.data{projectionIndex}.contours.z.show = true;
-        obj.data{projectionIndex}.contours.z.width = 15;
-        obj.data{projectionIndex}.contours.z.usecolormap = true;
-        obj.data{projectionIndex}.contours.z.project.z = true;
+        obj.data{projectionIndex} = struct( ...
+            "type", "surface", ...
+            "scene", "scene" + xsource, ...
+            "x", xDataSurface, ...
+            "y", yDataSurface, ...
+            "z", zDataSurface, ...
+            "colorscale", colorScale, ...
+            "hidesurface", true, ...
+            "surfacecolor", zDataSurface, ...
+            "showscale", false, ...
+            "contours", struct( ...
+                "z", struct( ...
+                    "show", true, ...
+                    "width", 15, ...
+                    "usecolormap", true, ...
+                    "project.z", true ...
+                ) ...
+            ) ...
+        );
     end
 
-    %---------------------------------------------------------------------%
-
-    %-SCENE CONFIGUTATION-%
-
-    %---------------------------------------------------------------------%
+    %-SCENE CONFIGURATION-%
+    scene = obj.layout.("scene" + xsource);
 
-    %-aspect ratio-%
     asr = obj.PlotOptions.AspectRatio;
 
     if ~isempty(asr)
         if ischar(asr)
             scene.aspectmode = asr;
         elseif isvector(ar) && length(asr) == 3
-            xar = asr(1);
-            yar = asr(2);
             zar = asr(3);
         end
     else
-
         %-define as default-%
         xar = max(xData(:));
         yar = max(yData(:));
@@ -240,9 +170,6 @@
     scene.aspectratio.y = 1.0*xyar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
-    %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
     if ~isempty(ey)
@@ -253,85 +180,72 @@
         end
     else
         %-define as default-%
-        xey = - xyar; if xey>0 xfac = -0.0; else xfac = 0.0; end
-        yey = - xyar; if yey>0 yfac = -0.3; else yfac = 0.3; end
-        if zar>0 zfac = 0.1; else zfac = -0.1; end
-        
-        scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xyar;
+        if xey>0
+            xfac = -0.0;
+        else
+            xfac = 0.0;
+        end
+        yey = - xyar;
+        if yey>0
+            yfac = -0.3;
+        else
+            yfac = 0.3;
+        end
+        if zar>0
+            zfac = 0.1;
+        else
+            zfac = -0.1;
+        end
+
+        scene.camera.eye.x = xey + xfac*xey;
         scene.camera.eye.y = yey + yfac*yey;
         scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-scene axis configuration-%
-
     scene.xaxis.range = axisData.XLim;
-    scene.yaxis.range = axisData.YLim;
-    scene.zaxis.range = axisData.ZLim;
-
     scene.xaxis.tickvals = axisData.XTick;
     scene.xaxis.ticktext = axisData.XTickLabel;
+    scene.xaxis.zeroline = false;
+    scene.xaxis.showline = true;
+    scene.xaxis.tickcolor = "rgba(0,0,0,1)";
+    scene.xaxis.ticklabelposition = "outside";
+    scene.xaxis.title = axisData.XLabel.String;
+    scene.xaxis.tickfont.size = axisData.FontSize;
+    scene.xaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
+    scene.yaxis.range = axisData.YLim;
     scene.yaxis.tickvals = axisData.YTick;
     scene.yaxis.ticktext = axisData.YTickLabel;
+    scene.yaxis.zeroline = false;
+    scene.yaxis.showline = true;
+    scene.yaxis.tickcolor = "rgba(0,0,0,1)";
+    scene.yaxis.ticklabelposition = "outside";
+    scene.yaxis.title = axisData.YLabel.String;
+    scene.yaxis.tickfont.size = axisData.FontSize;
+    scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
+    scene.zaxis.range = axisData.ZLim;
     scene.zaxis.tickvals = axisData.ZTick;
     scene.zaxis.ticktext = axisData.ZTickLabel;
-
-    scene.xaxis.zeroline = false;
-    scene.yaxis.zeroline = false;
     scene.zaxis.zeroline = false;
-
-    scene.xaxis.showline = true;
-    scene.yaxis.showline = true;
     scene.zaxis.showline = true;
-
-    scene.xaxis.tickcolor = 'rgba(0,0,0,1)';
-    scene.yaxis.tickcolor = 'rgba(0,0,0,1)';
-    scene.zaxis.tickcolor = 'rgba(0,0,0,1)';
-
-    scene.xaxis.ticklabelposition = 'outside';
-    scene.yaxis.ticklabelposition = 'outside';
-    scene.zaxis.ticklabelposition = 'outside';
-
-    scene.xaxis.title = axisData.XLabel.String;
-    scene.yaxis.title = axisData.YLabel.String;
+    scene.zaxis.tickcolor = "rgba(0,0,0,1)";
+    scene.zaxis.ticklabelposition = "outside";
     scene.zaxis.title = axisData.ZLabel.String;
-
-    scene.xaxis.tickfont.size = axisData.FontSize;
-    scene.yaxis.tickfont.size = axisData.FontSize;
     scene.zaxis.tickfont.size = axisData.FontSize;
-
-    scene.xaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
-    scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-    %---------------------------------------------------------------------%
-
-    %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
-
-    %---------------------------------------------------------------------%
-
-    obj.data{surfaceIndex}.name = meshData.DisplayName;
-    obj.data{contourIndex}.name = meshData.DisplayName;
-    obj.data{surfaceIndex}.showscale = false;
-    obj.data{contourIndex}.showscale = false;
-    obj.data{surfaceIndex}.visible = strcmp(meshData.Visible,'on');
-    obj.data{contourIndex}.visible = strcmp(meshData.Visible,'on');
-
-    %---------------------------------------------------------------------%
-
-    leg = meshData.Annotation;
-    legInfo = leg.LegendInformation;
+    obj.layout.("scene" + xsource) = scene;
+end
 
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
-    end
+function surfaceData = reformatDataToMesh(data, meshDensity)
+    surfaceData = reshape(data, [meshDensity, meshDensity])';
+end
 
-    obj.data{surfaceIndex}.showlegend = showleg;
+function contourData = getContourDataFromSurface(surfaceData)
+    contourData = [surfaceData; NaN(1, size(surfaceData, 2))];
+    contourData = [contourData; contourData(1:end-1,:)'];
+    contourData = [contourData; NaN(1, size(contourData, 2))];
+    contourData = contourData(:);
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateGeoPlot.m b/plotly/plotlyfig_aux/handlegraphics/updateGeoPlot.m
index 17702c20..ba28866f 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateGeoPlot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateGeoPlot.m
@@ -1,12 +1,10 @@
 function updateGeoPlot(obj,geoIndex)
-    %-INTIALIZATIONS-%
+    %-INITIALIZATIONS-%
 
     axIndex = obj.getAxisIndex(obj.State.Plot(geoIndex).AssociatedAxis);
     geoData = obj.State.Plot(geoIndex).Handle;
     axisData = geoData.Parent;
-    [xSource, ~] = findSourceAxis(obj,axIndex);
-
-    %---------------------------------------------------------------------%
+    xSource = findSourceAxis(obj,axIndex);
 
     %-set trace-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
@@ -19,14 +17,10 @@ function updateGeoPlot(obj,geoIndex)
 
     obj.data{geoIndex}.mode = 'lines+markers';
 
-    %---------------------------------------------------------------------%
-
-    %-set trace data-%    
+    %-set trace data-%
     obj.data{geoIndex}.lat = geoData.LatitudeData;
     obj.data{geoIndex}.lon = geoData.LongitudeData;
 
-    %---------------------------------------------------------------------%
-
     %-set trace's marker and line-%
     [marker, linee] = extractGeoLinePlusMarker(geoData, axisData);
 
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateGeoScatter.m b/plotly/plotlyfig_aux/handlegraphics/updateGeoScatter.m
index 3b66ca31..480ed3b7 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateGeoScatter.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateGeoScatter.m
@@ -1,12 +1,10 @@
 function updateGeoScatter(obj,geoIndex)
-    %-INTIALIZATIONS-%
+    %-INITIALIZATIONS-%
 
     axIndex = obj.getAxisIndex(obj.State.Plot(geoIndex).AssociatedAxis);
     geoData = obj.State.Plot(geoIndex).Handle;
     axisData = geoData.Parent;
-    [xSource, ~] = findSourceAxis(obj,axIndex);
-
-    %---------------------------------------------------------------------%
+    xSource = findSourceAxis(obj,axIndex);
 
     %-set trace-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
@@ -19,14 +17,10 @@ function updateGeoScatter(obj,geoIndex)
 
     obj.data{geoIndex}.mode = 'markers+text';
 
-    %---------------------------------------------------------------------%
-
-    %-set trace data-%    
+    %-set trace data-%
     obj.data{geoIndex}.lat = geoData.LatitudeData;
     obj.data{geoIndex}.lon = geoData.LongitudeData;
 
-    %---------------------------------------------------------------------%
-
     %-set trace marker-%
     marker = extractGeoMarker(geoData, axisData);
 
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateGeobubble.m b/plotly/plotlyfig_aux/handlegraphics/updateGeobubble.m
index af8bd4b6..3188768e 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateGeobubble.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateGeobubble.m
@@ -1,9 +1,9 @@
 function updateGeobubble(obj,geoIndex)
-    %-INTIALIZATIONS-%
+    %-INITIALIZATIONS-%
 
     axIndex = obj.getAxisIndex(obj.State.Plot(geoIndex).AssociatedAxis);
     geoData = obj.State.Plot(geoIndex).Handle;
-    [xSource, ~] = findSourceAxis(obj,axIndex);
+    xSource = findSourceAxis(obj,axIndex);
 
     %-get trace data-%
     bubbleRange = geoData.BubbleWidthRange;
@@ -57,8 +57,6 @@ function updateGeobubble(obj,geoIndex)
             p = obj.PlotOptions.nPlots;
         end
 
-        %-----------------------------------------------------------------%
-
         %-set current trace-%
         if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
             obj.data{p}.type = 'scattergeo';
@@ -71,23 +69,17 @@ function updateGeobubble(obj,geoIndex)
 
         obj.data{p}.mode = 'markers';
 
-        %-----------------------------------------------------------------%
-
         %-set current trace data-%
         obj.data{p}.lat = lat{g};
         obj.data{p}.lon = lon{g};
 
-        %-----------------------------------------------------------------%
-
         %-set trace marker-%
         marker = struct();
         marker.size = sData{g}*1.25;
-        marker.color = getStringColor(255*colorMap(mod(g-1, nColors)+1, :));
-        marker.line.color = 'rgb(255, 255, 255)';
+        marker.color = getStringColor(round(255*colorMap(mod(g-1, nColors)+1, :)));
+        marker.line.color = "rgb(255, 255, 255)";
 
-        obj.data{p}.marker = marker;   
-
-        %-----------------------------------------------------------------%
+        obj.data{p}.marker = marker;
 
         %-legend-%
         if byGroups
@@ -112,15 +104,11 @@ function updateGeobubble(obj,geoIndex)
     geoaxes.domain.x = min([xo xo + w],1);
     geoaxes.domain.y = min([yo yo + h],1);
 
-    %---------------------------------------------------------------------%
-
     %-setting projection-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         geoaxes.projection.type = 'mercator';
     end
 
-    %---------------------------------------------------------------------%
-
     %-setting basemap-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         geoaxes.framecolor = 'rgb(120,120,120)';
@@ -140,8 +128,6 @@ function updateGeobubble(obj,geoIndex)
         geoaxes.showland = true;
     end
 
-    %---------------------------------------------------------------------%
-
     %-setting latitude axis-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         geoaxes.lataxis.range = geoData.LatitudeLimits;
@@ -153,8 +139,6 @@ function updateGeobubble(obj,geoIndex)
         end
     end
 
-    %---------------------------------------------------------------------%
-    
     %-setting longitude axis-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         geoaxes.lonaxis.range = geoData.LongitudeLimits;
@@ -166,21 +150,15 @@ function updateGeobubble(obj,geoIndex)
         end
     end
 
-    %---------------------------------------------------------------------%
-    
     %-set map center-%
     geoaxes.center.lat = geoData.MapCenter(1);
     geoaxes.center.lon = geoData.MapCenter(2);
 
-    %---------------------------------------------------------------------%
-    
     %-set better resolution-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
         geo.resolution = '50';
     end
 
-    %---------------------------------------------------------------------%
-
     %-set mapbox style-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'mapbox')
         geoaxes.zoom = geoData.ZoomLevel - 1.4;
@@ -192,24 +170,18 @@ function updateGeobubble(obj,geoIndex)
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-set geo geoaxes to layout-%
     if strcmpi(obj.PlotOptions.geoRenderType, 'geo')
-        obj.layout = setfield(obj.layout, sprintf('geo%d', xSource+1), geoaxes);
+        obj.layout.(sprintf('geo%d', xSource+1)) = geoaxes;
     elseif strcmpi(obj.PlotOptions.geoRenderType, 'mapbox')
-        obj.layout = setfield(obj.layout, sprintf('mapbox%d', xSource+1), geoaxes);
+        obj.layout.(sprintf('mapbox%d', xSource+1)) = geoaxes;
     end
 
-    %---------------------------------------------------------------------%
-
     %-remove any annotation text-%
     istitle = length(geoData.Title) > 0;
     obj.layout.annotations{1}.text = ' ';
     obj.layout.annotations{1}.showarrow = false;
 
-    %---------------------------------------------------------------------%
-
     %-layout title-%
     if istitle
       obj.layout.annotations{1}.text = sprintf('<b>%s</b>', geoData.Title);
@@ -224,8 +196,6 @@ function updateGeobubble(obj,geoIndex)
       obj.layout.annotations{1}.font.size = 1.5*geoData.FontSize;
     end
 
-    %---------------------------------------------------------------------%    
-
     %-setting legend-%
     if byGroups
         obj.layout.showlegend = true;
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateHeatmap.m b/plotly/plotlyfig_aux/handlegraphics/updateHeatmap.m
index 6710fd43..7125f70d 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateHeatmap.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateHeatmap.m
@@ -1,103 +1,71 @@
-function obj = updateHeatmap(obj,heatIndex)
+function data = updateHeatmap(obj,heatIndex)
     %-HEATMAP DATA STRUCTURE- %
     heat_data = obj.State.Plot(heatIndex).Handle;
 
-    %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,heatIndex);
+    data.type = "heatmap";
 
-    %---------------------------------------------------------------------%
-
-    %-heatmap type-%
-    obj.data{heatIndex}.type = 'heatmap';
-
-    %---------------------------------------------------------------------%
-
-    %-format data-%
-    xdata = heat_data.XDisplayData;
-    ydata = heat_data.YDisplayData(end:-1:1, :);
     cdata = heat_data.ColorDisplayData(end:-1:1, :);
 
-    obj.data{heatIndex}.x = xdata;
-    obj.data{heatIndex}.y = ydata;
-    obj.data{heatIndex}.z = cdata;
-    obj.data{heatIndex}.connectgaps = false;
-    obj.data{heatIndex}.hoverongaps = false;
-
-    %---------------------------------------------------------------------%
+    data.x = heat_data.XDisplayData;
+    data.y = heat_data.YDisplayData(end:-1:1, :);
+    data.z = cdata;
+    data.connectgaps = false;
+    data.hoverongaps = false;
 
-    %-heatmap colorscale-%
     cmap = heat_data.Colormap;
     len = length(cmap)-1;
-
-    for c = 1: length(cmap)
-        col = round(255 * cmap(c, :));
-        obj.data{heatIndex}.colorscale{c} = ...
-                {(c-1)/len, sprintf("rgb(%d,%d,%d)", col)};
+    for c = 1:length(cmap)
+        col = round(255*cmap(c, :));
+        data.colorscale{c} = {(c-1)/len, getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
-    %-setting plot-%
-    obj.data{heatIndex}.hoverinfo = 'text';
-    obj.data{heatIndex}.text = heat_data.ColorData(end:-1:1, :);
-    obj.data{heatIndex}.hoverlabel.bgcolor = 'white';
-
-    %---------------------------------------------------------------------%
-
-    %-show colorbar-%
-    obj.data{heatIndex}.showscale = false;
-    if strcmpi(heat_data.ColorbarVisible, 'on')
-        obj.data{heatIndex}.showscale = true;
-        obj.data{heatIndex}.colorbar.x = 0.87;
-        obj.data{heatIndex}.colorbar.y = 0.52; 
-        obj.data{heatIndex}.colorbar.ypad = 55;
-        obj.data{heatIndex}.colorbar.xpad = obj.PlotlyDefaults.MarginPad;
-        obj.data{heatIndex}.colorbar.outlinecolor = 'rgb(150,150,150)';
+    data.hoverinfo = "text";
+    data.text = heat_data.ColorData(end:-1:1, :);
+    data.hoverlabel.bgcolor = "white";
+
+    data.showscale = false;
+    if lower(heat_data.ColorbarVisible) == "on"
+        data.showscale = true;
+        data.colorbar = struct( ...
+            "x", 0.87, ...
+            "y", 0.52, ...
+            "ypad", 55, ...
+            "xpad", obj.PlotlyDefaults.MarginPad, ...
+            "outlinecolor", "rgb(150,150,150)" ...
+        );
     end
 
-    %---------------------------------------------------------------------%
-
-    %-hist visible-%
-    obj.data{heatIndex}.visible = strcmp(heat_data.Visible,'on');
-    obj.data{heatIndex}.opacity = 0.95;
-
-    %---------------------------------------------------------------------%
+    data.visible = heat_data.Visible == "on";
+    data.opacity = 0.95;
 
     %-setting annotation text-%
-    c = 1;
     maxcol = max(cdata(:));
-
-    for n = 1:size(cdata, 2)
-        for m = 1:size(cdata, 1)
-            %-text-%
-            ann{c}.text = num2str(round(cdata(m,n), 2));
-            ann{c}.x = n-1;
-            ann{c}.y = m-1;
-            ann{c}.showarrow = false;
-
-            %-font-%
-            ann{c}.font.size = heat_data.FontSize*1.15;
-            ann{c}.font.family = matlab2plotlyfont(heat_data.FontName);
-            if cdata(m,n) < 0.925*maxcol
+    m = size(cdata, 2);
+    n = size(cdata, 1);
+    annotations = cell(1,m*n);
+    for i = 1:m
+        for j = 1:n
+            ann.text = num2str(round(cdata(j,i), 2));
+            ann.x = i-1;
+            ann.y = j-1;
+            ann.showarrow = false;
+            ann.font.size = heat_data.FontSize*1.15;
+            ann.font.family = matlab2plotlyfont(heat_data.FontName);
+            if cdata(j,i) < 0.925*maxcol
                 col = [0,0,0];
             else
                 col = [255,255,255];
             end
-            ann{c}.font.color = sprintf("rgb(%d,%d,%d)", col);
-            c = c+1;
+            ann.font.color = getStringColor(col);
+            annotations{i*(m-1)+j} = ann;
         end
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set annotations to layout-%
-    obj.layout = setfield(obj.layout, 'annotations', ann);
-
-    %---------------------------------------------------------------------%
+    obj.layout.annotations = annotations;
 
-    %-set backgroud color if any NaN in cdata-%
+    %-set background color if any NaN in cdata-%
     if any(isnan(cdata(:)))
-        obj.layout.plot_bgcolor = 'rgb(40,40,40)';
-        obj.data{heatIndex}.opacity = 1;
+        obj.layout.plot_bgcolor = "rgb(40,40,40)";
+        data.opacity = 1;
     end
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateHistogram.m b/plotly/plotlyfig_aux/handlegraphics/updateHistogram.m
index 5233e052..65e80ce0 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateHistogram.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateHistogram.m
@@ -1,4 +1,4 @@
-function obj = updateHistogram(obj,histIndex)
+function data = updateHistogram(obj,histIndex)
     % x:...[DONE]
     % y:...[DONE]
     % histnorm:...[DONE]
@@ -45,24 +45,14 @@
     % outliercolor: ...[NA]
     % outlierwidth: ...[NA]
 
-    %---------------------------------------------------------------------%
-
-    %-AXIS INDEX-%
-    axIndex = obj.getAxisIndex(obj.State.Plot(histIndex).AssociatedAxis);
-
-    %-HIST DATA STRUCTURE- %
+    axisData = obj.State.Plot(histIndex).AssociatedAxis;
+    axIndex = obj.getAxisIndex(axisData);
     hist_data = obj.State.Plot(histIndex).Handle;
-
-    %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %---------------------------------------------------------------------%
-
-    obj.data{histIndex}.xaxis = "x" + xsource;
-    obj.data{histIndex}.yaxis = "y" + ysource;
-    obj.data{histIndex}.type = "bar";
-
-    %---------------------------------------------------------------------%
+    data.xaxis = "x" + xsource;
+    data.yaxis = "y" + ysource;
+    data.type = "bar";
 
     if isprop(hist_data, "Orientation")
         %-Matlab 2014+ histogram() function-%
@@ -75,38 +65,30 @@
     switch orientation
         case {"vertical", "horizontal"}
             %-hist y data-%
-            obj.data{histIndex}.x = hist_data.BinEdges(1:end-1) ...
+            data.x = hist_data.BinEdges(1:end-1) ...
                     + 0.5*diff(hist_data.BinEdges);
-            obj.data{histIndex}.width = diff(hist_data.BinEdges);
-            obj.data{histIndex}.y = double(hist_data.Values);
+            data.width = diff(hist_data.BinEdges);
+            data.y = double(hist_data.Values);
         case "v"
             %-hist x data-%
             xdata = mean(hist_data.XData(2:3,:));
 
-            %-------------------------------------------------------------%
-
             %-hist y data-%
             xlength = 0;
             for d = 1:length(xdata)
                 xnew = repmat(xdata(d),1,hist_data.YData(2,d));
-                obj.data{histIndex}.x(xlength+1:xlength+length(xnew)) = xnew;
-                xlength = length(obj.data{histIndex}.x);
+                data.x(xlength+1:xlength+length(xnew)) = xnew;
+                xlength = length(data.x);
             end
 
-            %-------------------------------------------------------------%
-
             %-hist autobinx-%
-            obj.data{histIndex}.autobinx = false;
-
-            %-------------------------------------------------------------%
+            data.autobinx = false;
 
             %-hist xbins-%
             xbins.start = hist_data.XData(2,1);
             xbins.end = hist_data.XData(3,end);
             xbins.size = diff(hist_data.XData(2:3,1));
-            obj.data{histIndex}.xbins = xbins;
-
-            %-------------------------------------------------------------%
+            data.xbins = xbins;
 
             %-layout bargap-%
             obj.layout.bargap = ...
@@ -116,29 +98,21 @@
             %-hist y data-%
             ydata = mean(hist_data.YData(2:3,:));
 
-            %-------------------------------------------------------------%
-
             ylength = 0;
             for d = 1:length(ydata)
                 ynew = repmat(ydata(d),1,hist_data.XData(2,d));
-                obj.data{histIndex}.y(ylength+1:ylength+length(ynew)) = ynew;
-                ylength = length(obj.data{histIndex}.y);
+                data.y(ylength+1:ylength+length(ynew)) = ynew;
+                ylength = length(data.y);
             end
 
-            %-------------------------------------------------------------%
-
             %-hist autobiny-%
-            obj.data{histIndex}.autobiny = false;
-
-            %-------------------------------------------------------------%
+            data.autobiny = false;
 
             %-hist ybins-%
             ybins.start = hist_data.YData(2,1);
             ybins.end = hist_data.YData(3,end);
             ybins.size = diff(hist_data.YData(2:3,1));
-            obj.data{histIndex}.ybins = ybins;
-
-            %-------------------------------------------------------------%
+            data.ybins = ybins;
 
             %-layout bargap-%
             obj.layout.bargap = ...
@@ -146,29 +120,30 @@
                     / (hist_data.XData(3,1) - hist_data.XData(2,1));
     end
 
-    %---------------------------------------------------------------------%
+    if axisData.Tag == "yhist"
+        % scatterhist() function
+        data.orientation = "h";
+        temp = data.x;
+        data.x = flip(data.y);
+        data.y = temp;
+    end
 
-    obj.data{histIndex}.name = hist_data.DisplayName;
+    data.name = hist_data.DisplayName;
     obj.layout.barmode = "overlay";
-    obj.data{histIndex}.marker.line.width = hist_data.LineWidth;
+    data.marker.line.width = hist_data.LineWidth;
 
     %-hist opacity-%
     if ~ischar(hist_data.FaceAlpha)
-        obj.data{histIndex}.opacity = hist_data.FaceAlpha * 1.25;
+        data.opacity = hist_data.FaceAlpha * 1.25;
     end
 
-    obj.data{histIndex}.marker = extractPatchFace(hist_data);
-    obj.data{histIndex}.visible = strcmp(hist_data.Visible,"on");
-
-    %-hist showlegend-%
-    leg = hist_data.Annotation;
-    legInfo = leg.LegendInformation;
+    data.marker = extractPatchFace(hist_data);
+    data.visible = hist_data.Visible == "on";
 
-    switch legInfo.IconDisplayStyle
+    switch hist_data.Annotation.LegendInformation.IconDisplayStyle
         case "on"
-            showleg = true;
+            data.showlegend = true;
         case "off"
-            showleg = false;
+            data.showlegend = false;
     end
-    obj.data{histIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateHistogram2.m b/plotly/plotlyfig_aux/handlegraphics/updateHistogram2.m
index ee82a84d..b21f25d7 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateHistogram2.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateHistogram2.m
@@ -2,7 +2,7 @@
     %-INITIALIZATIONS-%
 
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
-    [xSource, ~] = findSourceAxis(obj, axIndex);
+    xSource = findSourceAxis(obj, axIndex);
     plotData = obj.State.Plot(dataIndex).Handle;
     axisData = plotData.Parent;
 
@@ -10,20 +10,30 @@
     barGap = 0.05;
 
     %-get trace data-%
-    
+
     values = plotData.Values;
-    if strcmp(plotData.ShowEmptyBins, 'on'), values = values+1; end
-    xEdges = plotData.XBinEdges; 
+    if strcmp(plotData.ShowEmptyBins, 'on')
+        values = values+1;
+    end
+    xEdges = plotData.XBinEdges;
     yEdges = plotData.YBinEdges;
 
     dx = diff(xEdges(2:end-1));
     dy = diff(yEdges(2:end-1));
 
-    if isinf(xEdges(1)) xEdges(1) = xEdges(2) - dx(1); end
-    if isinf(yEdges(1)) yEdges(1) = yEdges(2) - dy(1); end
+    if isinf(xEdges(1))
+        xEdges(1) = xEdges(2) - dx(1);
+    end
+    if isinf(yEdges(1))
+        yEdges(1) = yEdges(2) - dy(1);
+    end
 
-    if isinf(xEdges(end)) xEdges(end) = xEdges(end-1) + dx(1); end
-    if isinf(yEdges(end)) yEdges(end) = yEdges(end-1) + dy(1); end
+    if isinf(xEdges(end))
+        xEdges(end) = xEdges(end-1) + dx(1);
+    end
+    if isinf(yEdges(end))
+        yEdges(end) = yEdges(end-1) + dy(1);
+    end
 
     [xData, yData, zData, iData, jData, kData] = ...
             getPlotlyMesh3d( xEdges, yEdges, values, barGap );
@@ -31,14 +41,12 @@
     if strcmp(plotData.ShowEmptyBins, 'on')
         zData = zData-1;
     end
-        
+
     cData = zeros(size(zData));
     for n = 1:2:length(zData)
         cData(n:n+1) = max(zData(n:n+1));
     end
 
-    %---------------------------------------------------------------------%
-
     %-set trace-%
     updateScene(obj, dataIndex);
 
@@ -48,8 +56,6 @@
     obj.data{dataIndex}.visible = strcmp(plotData.Visible,'on');
     obj.layout.bargap = barGap;
 
-    %---------------------------------------------------------------------%
-
     %-set trace data-%
     obj.data{dataIndex}.x = xData;
     obj.data{dataIndex}.y = yData;
@@ -58,15 +64,13 @@
     obj.data{dataIndex}.j = int16(jData - 1);
     obj.data{dataIndex}.k = int16(kData - 1);
 
-    %---------------------------------------------------------------------%
-
     %-set trace coloring-%
     faceColor = plotData.FaceColor;
 
     if isnumeric(faceColor)
-        obj.data{dataIndex}.color = getStringColor(255*faceColor);
+        obj.data{dataIndex}.color = getStringColor(round(255*faceColor));
     elseif strcmp(faceColor, 'none')
-        obj.data{dataIndex}.color = getStringColor(255*zeros(1,3), 0.1);
+        obj.data{dataIndex}.color = getStringColor(round(255*zeros(1,3)), 0.1);
     elseif strcmp(faceColor, 'flat')
         obj.data{dataIndex}.intensity = cData;
         obj.data{dataIndex}.colorscale = getColorScale(colorMap);
@@ -92,25 +96,22 @@
 
 function updateScene(obj, dataIndex)
 
-    %---------------------------------------------------------------------%
-
     %-INITIALIZATIONS-%
 
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
     axisData = plotData.Parent;
-    [xSource, ~] = findSourceAxis(obj, axIndex);
+    xSource = findSourceAxis(obj, axIndex);
     scene = obj.layout.("scene" + xSource);
 
     aspectRatio = axisData.PlotBoxAspectRatio;
     cameraPosition = axisData.CameraPosition;
-    dataAspectRatio = axisData.DataAspectRatio;
     cameraUpVector = axisData.CameraUpVector;
     cameraEye = cameraPosition;
 
-    rangeXLim = range(axisData.XLim);
-    rangeYLim = range(axisData.YLim);
-    rangeZLim = range(axisData.ZLim);
+    rangeXLim = rangeLength(axisData.XLim);
+    rangeYLim = rangeLength(axisData.YLim);
+    rangeZLim = rangeLength(axisData.ZLim);
     cameraEye = cameraEye./[rangeXLim, rangeYLim rangeZLim];
     eyeNorm = max(abs(cameraEye)) - 1.4;
 
@@ -123,8 +124,6 @@ function updateScene(obj, dataIndex)
 
     cameraEye = cameraEye / eyeNorm;
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     scene.aspectratio.x = aspectRatio(1);
     scene.aspectratio.y = aspectRatio(2);
@@ -136,12 +135,10 @@ function updateScene(obj, dataIndex)
     scene.camera.eye.z = cameraEye(3);
 
     %-camera up-%
-    scene.camera.up.x = cameraUpVector(1); 
+    scene.camera.up.x = cameraUpVector(1);
     scene.camera.up.y = cameraUpVector(2);
     scene.camera.up.z = cameraUpVector(3);
 
-    %---------------------------------------------------------------------%
-
     %-get each scene axis-%
     scene.xaxis = getSceneAxis(axisData, 'X');
     scene.yaxis = getSceneAxis(axisData, 'Y');
@@ -151,10 +148,8 @@ function updateScene(obj, dataIndex)
         scene.zaxis.visible = false;
     end
 
-    %---------------------------------------------------------------------%
-
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xSource), scene);
+    obj.layout.("scene" + xsource) = scene;
 end
 
 function ax = getSceneAxis(axisData, axName)
@@ -163,22 +158,24 @@ function updateScene(obj, dataIndex)
     ax.zeroline = false;
     ax.showline = true;
     ax.showspikes = true;
-    ax.linecolor = getStringColor(255*axx.Color);
+    ax.linecolor = getStringColor(round(255*axx.Color));
     ax.range = axisData.(axName + "Lim");
 
     %-label-%
     label = axisData.(axName + "Label");
     ax.title = label.String;
-    if ~isempty(ax.title), ax.title = parseString(ax.title); end
+    if ~isempty(ax.title)
+        ax.title = parseString(ax.title);
+    end
     ax.titlefont.size = label.FontSize;
-    ax.titlefont.color = getStringColor(255*label.Color);
+    ax.titlefont.color = getStringColor(round(255*label.Color));
     ax.titlefont.family = matlab2plotlyfont(label.FontName);
 
     %-ticks-%
     ax.tickvals = axx.TickValues;
     ax.ticktext = axx.TickLabels;
 
-    ax.tickcolor = getStringColor(255*axx.Color);
+    ax.tickcolor = getStringColor(round(255*axx.Color));
     ax.tickfont.size = axx.FontSize;
     ax.tickfont.family = matlab2plotlyfont(axx.FontName);
 
@@ -191,10 +188,14 @@ function updateScene(obj, dataIndex)
 
     %-grid-%
     axGrid = axisData.(axName + "Grid");
-    if strcmp(axGrid, 'off'), ax.showgrid = false; end
+    if strcmp(axGrid, 'off')
+        ax.showgrid = false;
+    end
 
     %-box-%
-    if strcmp(axisData.Box, 'on'), ax.mirror = true; end
+    if strcmp(axisData.Box, 'on')
+        ax.mirror = true;
+    end
 end
 
 function bar_ = barData(position3d, size_)
@@ -226,7 +227,7 @@ function updateScene(obj, dataIndex)
 end
 
 function [vertices, I, J, K] = triangulateBarFaces(positions, sizes)
-    % positions - array of shape (N, 3) that contains all positions in the plane z=0, where a histogram bar is placed 
+    % positions - array of shape (N, 3) that contains all positions in the plane z=0, where a histogram bar is placed
     % sizes -  array of shape (N,3); each row represents the sizes to scale a unit cube to get a bar
     % returns the array of unique vertices, and the lists i, j, k to be used in instantiating the go.Mesh3d class
 
@@ -253,7 +254,7 @@ function updateScene(obj, dataIndex)
     all_bars = reshape(all_bars, [r, p*q])';
     [vertices, ~, ixr] = unique(all_bars, 'rows');
 
-    %for each bar, derive the sublists of indices i, j, k assocated to its chosen  triangulation
+    %for each bar, derive the sublists of indices i, j, k associated to its chosen  triangulation
     I = [];
     J = [];
     K = [];
@@ -269,7 +270,7 @@ function updateScene(obj, dataIndex)
 end
 
 function [X, Y, Z, I, J, K] = getPlotlyMesh3d(xedges, yedges, values, bargap)
-    % x, y- array-like of shape (n,), defining the x, and y-ccordinates of data set for which we plot a 3d hist
+    % x, y- array-like of shape (n,), defining the x, and y-coordinates of data set for which we plot a 3d hist
 
     xsize = xedges(2)-xedges(1)-bargap;
     ysize = yedges(2)-yedges(1)-bargap;
@@ -302,6 +303,6 @@ function updateScene(obj, dataIndex)
     colorScale = cell(nColors, 1);
 
     for n = 1:nColors
-        colorScale{n} = {normInd(n), getStringColor(255*colorMap(n, :))};
+        colorScale{n} = {normInd(n), getStringColor(round(255*colorMap(n, :)))};
     end
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateHistogramPolar.m b/plotly/plotlyfig_aux/handlegraphics/updateHistogramPolar.m
index c507da21..241b7a2b 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateHistogramPolar.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateHistogramPolar.m
@@ -1,4 +1,4 @@
-function obj = updateHistogramPolar(obj,histIndex)
+function data = updateHistogramPolar(obj,histIndex)
     % x:...[DONE]
     % y:...[DONE]
     % histnorm:...[DONE]
@@ -45,51 +45,30 @@
     % outliercolor: ...[NA]
     % outlierwidth: ...[NA]
 
-    %---------------------------------------------------------------------%
-
-    %-AXIS INDEX-%
-    axIndex = obj.getAxisIndex(obj.State.Plot(histIndex).AssociatedAxis);
-
-    %-HIST DATA STRUCTURE- %
     hist_data = obj.State.Plot(histIndex).Handle;
 
-    %---------------------------------------------------------------------%
-
-    %-barpolar type-%
-    obj.data{histIndex}.type = 'barpolar';
-
-    %---------------------------------------------------------------------%
+    data.type = "barpolar";
 
-    %-barpolar data-%
     binedges = rad2deg(hist_data.BinEdges);
-    obj.data{histIndex}.theta = binedges(1:end-1) + 0.5*diff(binedges);
-    obj.data{histIndex}.width = diff(binedges);
-    obj.data{histIndex}.r = double(hist_data.BinCounts);
+    data.theta = binedges(1:end-1) + 0.5*diff(binedges);
+    data.width = diff(binedges);
+    data.r = double(hist_data.BinCounts);
 
-    %---------------------------------------------------------------------%
+    data.name = hist_data.DisplayName;
+    obj.layout.barmode = "group";
+    data.marker.line.width = hist_data.LineWidth;
 
-    obj.data{histIndex}.name = hist_data.DisplayName;
-    obj.layout.barmode = 'group';
-    obj.data{histIndex}.marker.line.width = hist_data.LineWidth;
-
-    %-hist opacity-%
     if ~ischar(hist_data.FaceAlpha)
-        obj.data{histIndex}.opacity = hist_data.FaceAlpha;
+        data.opacity = hist_data.FaceAlpha;
     end
 
-    obj.data{histIndex}.marker = extractPatchFace(hist_data);
-    obj.data{histIndex}.visible = strcmp(hist_data.Visible,'on');
-
-    %-hist showlegend-%
-    leg = hist_data.Annotation;
-    legInfo = leg.LegendInformation;
+    data.marker = extractPatchFace(hist_data);
+    data.visible = hist_data.Visible == "on";
 
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch hist_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            data.showlegend = true;
+        case "off"
+            data.showlegend = false;
     end
-
-    obj.data{histIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateImage.m b/plotly/plotlyfig_aux/handlegraphics/updateImage.m
index 7d04576b..d0a1d69e 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateImage.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateImage.m
@@ -1,4 +1,4 @@
-function obj = updateImage(obj, imageIndex)
+function data = updateImage(obj, imageIndex)
     % HEATMAPS
     % z: ...[DONE]
     % x: ...[DONE]
@@ -33,7 +33,7 @@
     axis_data = obj.State.Plot(imageIndex).AssociatedAxis;
 
     %-AXIS INDEX-%
-    axIndex = obj.getAxisIndex(obj.State.Plot(imageIndex).AssociatedAxis);
+    axIndex = obj.getAxisIndex(axis_data);
 
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
@@ -41,83 +41,53 @@
     %-IMAGE DATA STRUCTURE- %
     image_data = obj.State.Plot(imageIndex).Handle;
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
+    data.xaxis = "x" + xsource;
+    data.yaxis = "y" + ysource;
+    data.type = 'heatmap';
 
-    %---------------------------------------------------------------------%
-
-    obj.data{imageIndex}.xaxis = "x" + xsource;
-    obj.data{imageIndex}.yaxis = "y" + ysource;
-    obj.data{imageIndex}.type = 'heatmap';
-
-    %---------------------------------------------------------------------%
-
-    %-image x-%
     x = image_data.XData;
     cdata = image_data.CData;
-
     if (size(image_data.XData,2) == 2)
-        obj.data{imageIndex}.x = linspace(x(1), x(2), size(cdata,2));
+        data.x = linspace(x(1), x(2), size(cdata,2));
     else
-        obj.data{imageIndex}.x = image_data.XData;
+        data.x = image_data.XData;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-image y-%
     y = image_data.YData;
-
     if (size(image_data.YData,2) == 2)
-        obj.data{imageIndex}.y = linspace(y(1), y(2), size(cdata,1));
+        data.y = linspace(y(1), y(2), size(cdata,1));
     else
-        obj.data{imageIndex}.y = y;
+        data.y = y;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-image z-%
     isrgbimg = (size(image_data.CData,3) > 1);
-
     if isrgbimg
         [IND,colormap] = rgb2ind(cdata, 256);
-        obj.data{imageIndex}.z = IND;
+        data.z = IND;
     else
-        obj.data{imageIndex}.z = cdata;
+        data.z = cdata;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-image name-%
-    try
-        obj.data{imageIndex}.name = image_data.DisplayName;
-    catch
-        obj.data{imageIndex}.name = '';
+    if isprop(image_data, "DisplayName")
+        data.name = image_data.DisplayName;
+    else
+        data.name = '';
     end
 
-    %---------------------------------------------------------------------%
-
-    obj.data{imageIndex}.opacity = image_data.AlphaData;
-    obj.data{imageIndex}.visible = strcmp(image_data.Visible, 'on');
-    obj.data{imageIndex}.showscale = false;
-    obj.data{imageIndex}.zauto = false;
-    obj.data{imageIndex}.zmin = axis_data.CLim(1);
-
-    %---------------------------------------------------------------------%
+    data.opacity = image_data.AlphaData;
+    data.visible = image_data.Visible == "on";
+    data.showscale = false;
+    data.zauto = false;
+    data.zmin = axis_data.CLim(1);
 
-    %-image zmax-%
-    if ~strcmpi(image_data.CDataMapping, 'direct')
-        obj.data{imageIndex}.zmax = axis_data.CLim(2);
+    if lower(image_data.CDataMapping) ~= "direct"
+        data.zmax = axis_data.CLim(2);
     else
-        obj.data{imageIndex}.zmax = 255;
+        data.zmax = 255;
     end
 
-    %---------------------------------------------------------------------%
-
     %-COLORSCALE (ASSUMES IMAGE CDATAMAP IS 'SCALED')-%
 
-    %-image colorscale-%
-
     if ~isrgbimg
         colormap = figure_data.Colormap;
     end
@@ -126,25 +96,17 @@
 
     for c = 1:size(colormap, 1)
         col = round(255*(colormap(c,:)));
-        obj.data{imageIndex}.colorscale{c} = ...
-                {(c-1)/len, sprintf("rgb(%d,%d,%d)", col)};
+        data.colorscale{c} = {(c-1)/len, getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
-    %-image showlegend-%
     try
-        leg = image_data.Annotation;
-        legInfo = leg.LegendInformation;
-        switch legInfo.IconDisplayStyle
-            case 'on'
-                showleg = true;
-            case 'off'
-                showleg = false;
+        switch image_data.Annotation.LegendInformation.IconDisplayStyle
+            case "on"
+                data.showlegend = true;
+            case "off"
+                data.showlegend = false;
         end
-        obj.data{imageIndex}.showlegend = showleg;
     catch
         %TODO to future
     end
 end
-
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateImage3D.m b/plotly/plotlyfig_aux/handlegraphics/updateImage3D.m
index 80b2473e..a6bd3d94 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateImage3D.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateImage3D.m
@@ -42,18 +42,10 @@
     %-IMAGE DATA STRUCTURE- %
     image_data = obj.State.Plot(imageIndex).Handle;
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     obj.data{imageIndex}.xaxis = "x" + xsource;
     obj.data{imageIndex}.yaxis = "y" + ysource;
     obj.data{imageIndex}.type = 'surface';
 
-    %---------------------------------------------------------------------%
-
     %-format x an y data-%
     x = image_data.XData;
     y = image_data.YData;
@@ -63,22 +55,18 @@
         if size(x,2) == 2
             x = linspace(x(1), x(2), size(cdata,2));
         end
-        
+
         if size(y,2) == 2
             y = linspace(y(1), y(2), size(cdata,1));
         end
-        
+
         [x, y] = meshgrid(x, y);
     end
 
-    %---------------------------------------------------------------------%
-
     %-surface x and y-%
     obj.data{imageIndex}.x = x;
     obj.data{imageIndex}.y = y;
 
-    %---------------------------------------------------------------------%
-
     %-surface z-%
     isrgbimg = (size(image_data.CData,3) > 1);
 
@@ -89,35 +77,25 @@
         obj.data{imageIndex}.z = zeros(size(cdata));
     end
 
-    %---------------------------------------------------------------------%
-
     %-surface coloring-%
     obj.data{imageIndex}.surfacecolor = cdata;
 
-    %---------------------------------------------------------------------%
-
     %-surface setting-%
     obj.layout.scene.aspectmode = 'cube';
 
-    %---------------------------------------------------------------------%
-
     %-image name-%
-    try
+    if isprop(image_data, "DisplayName")
         obj.data{imageIndex}.name = image_data.DisplayName;
-    catch
+    else
         obj.data{imageIndex}.name = '';
     end
 
-    %---------------------------------------------------------------------%
-
     obj.data{imageIndex}.opacity = image_data.AlphaData;
     obj.data{imageIndex}.visible = strcmp(image_data.Visible, 'on');
     obj.data{imageIndex}.showscale = false;
     obj.data{imageIndex}.zauto = false;
     obj.data{imageIndex}.zmin = axis_data.CLim(1);
 
-    %---------------------------------------------------------------------%
-
     %-image zmax-%
     if ~strcmpi(image_data.CDataMapping, 'direct')
         obj.data{imageIndex}.zmax = axis_data.CLim(2);
@@ -125,10 +103,7 @@
         obj.data{imageIndex}.zmax = 255;
     end
 
-    %---------------------------------------------------------------------%
-
     %-COLORSCALE (ASSUMES IMAGE CDATAMAP IS 'SCALED')-%
-
     %-image colorscale-%
 
     if ~isrgbimg
@@ -140,22 +115,16 @@
     for c = 1:size(colormap, 1)
         col = round(255*(colormap(c,:)));
         obj.data{imageIndex}.colorscale{c} = ...
-                {(c-1)/len, sprintf("rgb(%d,%d,%d)", col)};
+                {(c-1)/len, getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
-    %-image showlegend-%
     try
-        leg = image_data.Annotation;
-        legInfo = leg.LegendInformation;
-        switch legInfo.IconDisplayStyle
-            case 'on'
-                showleg = true;
-            case 'off'
-                showleg = false;
+        switch image_data.Annotation.LegendInformation.IconDisplayStyle
+            case "on"
+                obj.data{imageIndex}.showlegend = true;
+            case "off"
+                obj.data{imageIndex}.showlegend = false;
         end
-        obj.data{imageIndex}.showlegend = showleg;
     catch
         %TODO to future
     end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateImplicitFunctionSurface.m b/plotly/plotlyfig_aux/handlegraphics/updateImplicitFunctionSurface.m
index 89fd2169..3d442e9b 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateImplicitFunctionSurface.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateImplicitFunctionSurface.m
@@ -9,18 +9,10 @@
     image_data = obj.State.Plot(surfaceIndex).Handle;
     figure_data = obj.State.Figure.Handle;
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     obj.data{surfaceIndex}.xaxis = "x" + xsource;
     obj.data{surfaceIndex}.yaxis = "y" + ysource;
     obj.data{surfaceIndex}.type = 'surface';
 
-    %---------------------------------------------------------------------%
-
     %-getting x,y,z surface data-%
 
     strf = func2str(image_data.Function);
@@ -56,19 +48,15 @@
     X(Z < z(1)) = nan; X(Z > z(2)) = nan;
     Y(Z < z(1)) = nan; Y(Z > z(2)) = nan;
 
-    %---------------------------------------------------------------------%
-
     %-surface x,z,y-%
     obj.data{surfaceIndex}.x = X;
     obj.data{surfaceIndex}.y = Y;
     obj.data{surfaceIndex}.z = Z;
 
-    %---------------------------------------------------------------------%
-
     %- setting grid mesh by default -%
     % x-direction
     mden = image_data.MeshDensity;
-    xsize = (x(2) - x(1)) / mden; 
+    xsize = (x(2) - x(1)) / mden;
     obj.data{surfaceIndex}.contours.x.start = x(1);
     obj.data{surfaceIndex}.contours.x.end = x(2);
     obj.data{surfaceIndex}.contours.x.size = xsize;
@@ -89,8 +77,6 @@
     obj.data{surfaceIndex}.contours.z.show = true;
     obj.data{surfaceIndex}.contours.z.color = 'black';
 
-    %---------------------------------------------------------------------%
-
     %-image colorscale-%
 
     cmap = figure_data.Colormap;
@@ -99,27 +85,18 @@
     for c = 1: length(cmap)
         col = round(255 * cmap(c, :));
         obj.data{surfaceIndex}.colorscale{c} = ...
-                {(c-1)/len , sprintf("rgb(%d,%d,%d)", col)};
+                {(c-1)/len, getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
     obj.data{surfaceIndex}.surfacecolor = Z;
     obj.data{surfaceIndex}.name = image_data.DisplayName;
     obj.data{surfaceIndex}.showscale = false;
     obj.data{surfaceIndex}.visible = strcmp(image_data.Visible, 'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = image_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch image_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
-
-    obj.data{surfaceIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateIsosurface.m b/plotly/plotlyfig_aux/handlegraphics/updateIsosurface.m
index 598fd384..8b36caf1 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateIsosurface.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateIsosurface.m
@@ -1,77 +1,49 @@
-function obj = updateIsosurface(obj, isoIndex)
-	%-INITIALIZATIONS-%
-
+function data = updateIsosurface(obj, isoIndex)
 	axIndex = obj.getAxisIndex(obj.State.Plot(isoIndex).AssociatedAxis);
 	plotData = obj.State.Plot(isoIndex).Handle;
 	axisData = plotData.Parent;
-	[xSource, ySource] = findSourceAxis(obj, axIndex);
+	xSource = findSourceAxis(obj, axIndex);
 
-	%-update scene-%
 	updateScene(obj, isoIndex)
 
-	%-get mesh data-%
-	xData = plotData.Vertices(:, 1);
-	yData = plotData.Vertices(:, 2);
-	zData = plotData.Vertices(:, 3);
-
-	iData = plotData.Faces(:, 1) - 1;
-	jData = plotData.Faces(:, 2) - 1;
-	kData = plotData.Faces(:, 3) - 1;
-
-	%---------------------------------------------------------------------%
-
-	%-get trace-%
-	obj.data{isoIndex}.type = 'mesh3d';
-	obj.data{isoIndex}.name = plotData.DisplayName;
-	obj.data{isoIndex}.showscale = false;
-
-	%---------------------------------------------------------------------%	
-
-	%-set mesh data-%
-	obj.data{isoIndex}.x = xData;
-	obj.data{isoIndex}.y = yData;
-	obj.data{isoIndex}.z = zData;
+	data = struct( ...
+		"type", "mesh3d", ...
+		"name", plotData.DisplayName, ...
+		"showscale", false, ...
+		"x", plotData.Vertices(:, 1), ...
+		"y", plotData.Vertices(:, 2), ...
+		"z", plotData.Vertices(:, 3), ...
+		"i", plotData.Faces(:, 1) - 1, ...
+		"j", plotData.Faces(:, 2) - 1, ...
+		"k", plotData.Faces(:, 3) - 1, ...
+		"scene", "scene" + xSource ...
+	);
 
-	obj.data{isoIndex}.i = iData;
-	obj.data{isoIndex}.j = jData;
-	obj.data{isoIndex}.k = kData;
-
-	%---------------------------------------------------------------------%
-
-	%-mesh coloring-%
 	faceColor = getFaceColor(plotData, axisData);
-
 	if iscell(faceColor)
-		obj.data{isoIndex}.facecolor = faceColor;
+		data.facecolor = faceColor;
 	else
-		obj.data{isoIndex}.color = faceColor;
+		data.color = faceColor;
 	end
 
-	%---------------------------------------------------------------------%
-
-	%-lighting settings-%
-	if ~strcmp(plotData.FaceLighting, 'flat')
-		obj.data{isoIndex}.lighting.diffuse = plotData.DiffuseStrength;
-		obj.data{isoIndex}.lighting.ambient = plotData.AmbientStrength;
-		obj.data{isoIndex}.lighting.specular = plotData.SpecularStrength;
-		obj.data{isoIndex}.lighting.roughness = 0.2;
-		obj.data{isoIndex}.lighting.fresnel = 0.5;
-		obj.data{isoIndex}.lighting.vertexnormalsepsilon = 1e-12;
-		obj.data{isoIndex}.lighting.facenormalsepsilon = 1e-6;
+	if plotData.FaceLighting ~= "flat"
+		data.lighting = struct( ...
+			"diffuse", plotData.DiffuseStrength, ...
+			"ambient", plotData.AmbientStrength, ...
+			"specular", plotData.SpecularStrength, ...
+			"roughness", 0.2, ...
+			"fresnel", 0.5, ...
+			"vertexnormalsepsilon", 1e-12, ...
+			"facenormalsepsilon", 1e-6 ...
+		);
 	end
-
-	%---------------------------------------------------------------------%
-
-	%-associate scene to trace-%
-	obj.data{isoIndex}.scene = sprintf('scene%d', xSource);
 end
 
 function updateScene(obj, isoIndex)
-	%-INITIALIZATIONS-%
 	axIndex = obj.getAxisIndex(obj.State.Plot(isoIndex).AssociatedAxis);
 	plotData = obj.State.Plot(isoIndex).Handle;
 	axisData = plotData.Parent;
-	[xSource, ySource] = findSourceAxis(obj, axIndex);
+	xSource = findSourceAxis(obj, axIndex);
 	scene = obj.layout.("scene" + xSource);
 
 	aspectRatio = axisData.PlotBoxAspectRatio;
@@ -81,70 +53,62 @@ function updateScene(obj, isoIndex)
 	cameraEye = cameraPosition./dataAspectRatio;
 	normFac = 0.5*abs(min(cameraEye));
 
-	%-aspect ratio-%
 	scene.aspectratio.x = aspectRatio(1);
 	scene.aspectratio.y = aspectRatio(2);
 	scene.aspectratio.z = aspectRatio(3);
 
-	%-camera eye-%
 	scene.camera.eye.x = cameraEye(1) / normFac;
     scene.camera.eye.y = cameraEye(2) / normFac;
     scene.camera.eye.z = cameraEye(3) / normFac;
 
-    %-camera up-%
-    scene.camera.up.x = cameraUpVector(1); 
+    scene.camera.up.x = cameraUpVector(1);
     scene.camera.up.y = cameraUpVector(2);
     scene.camera.up.z = cameraUpVector(3);
 
-    %-camera projection-%
-    % scene.camera.projection.type = axisData.Projection;
-
-	%-scene axis configuration-%
 	scene.xaxis.range = axisData.XLim;
-	scene.yaxis.range = axisData.YLim;
-	scene.zaxis.range = axisData.ZLim;
-
 	scene.xaxis.zeroline = false;
-	scene.yaxis.zeroline = false;
-	scene.zaxis.zeroline = false;
-
 	scene.xaxis.showline = true;
-	scene.yaxis.showline = true;
-	scene.zaxis.showline = true;
-
-	scene.xaxis.ticklabelposition = 'outside';
-	scene.yaxis.ticklabelposition = 'outside';
-	scene.zaxis.ticklabelposition = 'outside';
-
+	scene.xaxis.ticklabelposition = "outside";
 	scene.xaxis.title = axisData.XLabel.String;
-	scene.yaxis.title = axisData.YLabel.String;
-	scene.zaxis.title = axisData.ZLabel.String;
-
-	%-tick labels-%
 	scene.xaxis.tickvals = axisData.XTick;
 	scene.xaxis.ticktext = axisData.XTickLabel;
+	scene.xaxis.tickcolor = "rgba(0,0,0,1)";
+	scene.xaxis.tickfont.size = axisData.FontSize;
+	scene.xaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
+
+	scene.yaxis.range = axisData.YLim;
+	scene.yaxis.zeroline = false;
+	scene.yaxis.showline = true;
+	scene.yaxis.ticklabelposition = "outside";
+	scene.yaxis.title = axisData.YLabel.String;
 	scene.yaxis.tickvals = axisData.YTick;
 	scene.yaxis.ticktext = axisData.YTickLabel;
+	scene.yaxis.tickcolor = "rgba(0,0,0,1)";
+	scene.yaxis.tickfont.size = axisData.FontSize;
+	scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
+
+	scene.zaxis.range = axisData.ZLim;
+	scene.zaxis.zeroline = false;
+	scene.zaxis.showline = true;
+	scene.zaxis.ticklabelposition = "outside";
+	scene.zaxis.title = axisData.ZLabel.String;
 	scene.zaxis.tickvals = axisData.ZTick;
 	scene.zaxis.ticktext = axisData.ZTickLabel;
-
-	scene.xaxis.tickcolor = 'rgba(0,0,0,1)';
-	scene.yaxis.tickcolor = 'rgba(0,0,0,1)';
-	scene.zaxis.tickcolor = 'rgba(0,0,0,1)';
-	scene.xaxis.tickfont.size = axisData.FontSize;
-	scene.yaxis.tickfont.size = axisData.FontSize;
+	scene.zaxis.tickcolor = "rgba(0,0,0,1)";
 	scene.zaxis.tickfont.size = axisData.FontSize;
-	scene.xaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
-	scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 	scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-	%-grid-%
-	if strcmp(axisData.XGrid, 'off'), scene.xaxis.showgrid = false; end
-	if strcmp(axisData.YGrid, 'off'), scene.yaxis.showgrid = false; end
-	if strcmp(axisData.ZGrid, 'off'), scene.zaxis.showgrid = false; end
+	if axisData.XGrid == "off"
+	    scene.xaxis.showgrid = false;
+	end
+	if axisData.YGrid == "off"
+	    scene.yaxis.showgrid = false;
+	end
+	if axisData.ZGrid == "off"
+	    scene.zaxis.showgrid = false;
+	end
 
-	%-SET SCENE TO LAYOUT-%
-	obj.layout = setfield(obj.layout, sprintf('scene%d', xSource), scene);
+	obj.layout.("scene" + xSource) = scene;
 end
 
 function fillColor = getFaceColor(plotData, axisData)
@@ -153,17 +117,16 @@ function updateScene(obj, isoIndex)
 	cData = plotData.CData;
 	cLim = axisData.CLim;
 	colorMap = axisData.Colormap;
-	
+
 	%-get face color depending of faceColor attribute
 	if isnumeric(faceColor)
-		numColor = round(255 * faceColor);
-		fillColor = sprintf("rgb(%d,%d,%d)", numColor);
+		fillColor = getStringColor(round(255*faceColor));
 	elseif strcmpi(faceColor, "flat")
-		fillColor = getStringColor(cData, colorMap, cLim);
+		fillColor = getColor(cData, colorMap, cLim);
     elseif strcmpi(faceColor, "interp")
     	if size(cData, 1) ~= 1
     		for n = 1:size(cData, 2)
-				fillColor{n} = getStringColor(mean(cData(:, n)), colorMap, cLim);
+				fillColor{n} = getColor(mean(cData(:, n)), colorMap, cLim);
     		end
     	else
     		% TODO
@@ -171,11 +134,10 @@ function updateScene(obj, isoIndex)
 	end
 end
 
-function stringColor = getStringColor(cData, colorMap, cLim)
+function color = getColor(cData, colorMap, cLim)
 	nColors = size(colorMap, 1);
-	cIndex = max( min( cData, cLim(2) ), cLim(1) );
+	cIndex = max(min(cData, cLim(2)), cLim(1));
     scaleColor = (cIndex - cLim(1)) / diff(cLim);
     cIndex = 1 + floor(scaleColor*(nColors-1));
-    numColor =  round(255 * colorMap(cIndex, :));
-    stringColor = sprintf("rgb(%d,%d,%d)", numColor);
+    color = getStringColor(round(255 * colorMap(cIndex, :)));
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateLineseries.m b/plotly/plotlyfig_aux/handlegraphics/updateLineseries.m
index f7ff5aab..d60e9535 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateLineseries.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateLineseries.m
@@ -1,36 +1,27 @@
-function updateLineseries(obj, plotIndex)
+function data = updateLineseries(obj, plotIndex)
     %-INITIALIZATIONS-%
 
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
 
     %-check for multiple axes-%
-    try
+    if isprop(plotData.Parent, "YAxis") && numel(plotData.Parent.YAxis) > 1
+        yaxMatch = zeros(1,2);
         for yax = 1:2
             yAxisColor = plotData.Parent.YAxis(yax).Color;
-            yaxIndex(yax) = sum(yAxisColor == plotData.Color);
+            yaxMatch(yax) = sum(yAxisColor == plotData.Color);
         end
-
-        [~, yaxIndex] = max(yaxIndex);
+        [~, yaxIndex] = max(yaxMatch);
         [xSource, ySource] = findSourceAxis(obj, axIndex, yaxIndex);
-
-    catch
+    else
         [xSource, ySource] = findSourceAxis(obj,axIndex);
     end
 
-    %-check if polar plot-%
     treatAs = lower(obj.PlotOptions.TreatAs);
     isPolar = ismember('compass', treatAs) || ismember('ezpolar', treatAs);
 
-    %-check is 3D plot-%
-    try
-        isPlot3D = isfield(plotData,'ZData');
-        isPlot3D = isPlot3D & ~isempty(plotData.ZData);
-    catch
-        isPlot3D = false;
-    end
+    isPlot3D = isfield(plotData, "ZData") && ~isempty(plotData.ZData);
 
-    %-get trace data-%
     xData = plotData.XData;
     yData = plotData.YData;
 
@@ -44,62 +35,42 @@ function updateLineseries(obj, plotIndex)
         zData = plotData.ZData;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set trace-%
     if isPolar
-        obj.data{plotIndex}.type = 'scatterpolar';
-        updateDefaultPolaraxes(obj, plotIndex)
-        obj.data{plotIndex}.subplot = sprintf('polar%d', xSource+1);
+        data.type = "scatterpolar";
+        data.subplot = sprintf("polar%d", xSource+1);
+        obj.layout.(data.subplot) = updateDefaultPolarAxes(obj, plotIndex);
     elseif ~isPlot3D
-        obj.data{plotIndex}.type = 'scatter';
-        obj.data{plotIndex}.xaxis = sprintf('x%d', xSource);
-        obj.data{plotIndex}.yaxis = sprintf('y%d', ySource);
+        data.type = "scatter";
+        data.xaxis = "x" + xSource;
+        data.yaxis = "y" + ySource;
     else
-        obj.data{plotIndex}.type = 'scatter3d';
-        obj.data{plotIndex}.scene = sprintf('scene%d', xSource);
-
+        data.type = "scatter3d";
+        data.scene = "scene" + xSource;
         updateScene(obj, plotIndex);
     end
 
-    obj.data{plotIndex}.visible = strcmp(plotData.Visible,'on');
-    obj.data{plotIndex}.name = plotData.DisplayName;
-    obj.data{plotIndex}.mode = getScatterMode(plotData);
-
-    %---------------------------------------------------------------------%
+    data.visible = plotData.Visible == "on";
+    data.name = plotData.DisplayName;
+    data.mode = getScatterMode(plotData);
 
-    %-set trace data-%
     if isPolar
-        obj.data{plotIndex}.r = rData;
-        obj.data{plotIndex}.theta = thetaData;
+        data.r = rData;
+        data.theta = thetaData;
     else
-        obj.data{plotIndex}.x = xData;
-        obj.data{plotIndex}.y = yData;
-
-        if isscalar(xData) % plotly has trouble plotting a single point
-            obj.data{plotIndex}.x = repmat(obj.data{plotIndex}.x,[1,2]);
-            obj.data{plotIndex}.y = repmat(obj.data{plotIndex}.y,[1,2]);
-        end
-
+        data.x = xData;
+        data.y = yData;
         if isPlot3D
-            obj.data{plotIndex}.z = zData;
+            data.z = zData;
             obj.PlotOptions.is3d = true;
         end
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set trace line-%
-    obj.data{plotIndex}.line = extractLineLine(plotData);
+    data.line = extractLineLine(plotData);
     if isPolar
-        obj.data{plotIndex}.line.width = obj.data{plotIndex}.line.width * 1.5;
+        data.line.width = data.line.width * 1.5;
     end
-
-    %-set trace marker-%
-    obj.data{plotIndex}.marker = extractLineMarker(plotData);
-
-    %-set trace legend-%
-    obj.data{plotIndex}.showlegend = getShowLegend(plotData);
+    data.marker = extractLineMarker(plotData);
+    data.showlegend = getShowLegend(plotData);
 end
 
 function updateScene(obj, dataIndex)
@@ -107,11 +78,9 @@ function updateScene(obj, dataIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
     axisData = plotData.Parent;
-    [xSource, ~] = findSourceAxis(obj, axIndex);
+    xSource = findSourceAxis(obj, axIndex);
     scene = obj.layout.("scene" + xSource);
 
-    cameraTarget = axisData.CameraTarget;
-    position = axisData.Position;
     aspectRatio = axisData.PlotBoxAspectRatio;
     cameraPosition = axisData.CameraPosition;
     dataAspectRatio = axisData.DataAspectRatio;
@@ -122,8 +91,6 @@ function updateScene(obj, dataIndex)
     normFac = abs(min(cameraEye));
     normFac = normFac / (max(aspectRatio)/min(aspectRatio) + cameraOffset);
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     scene.aspectratio.x = 1.0*aspectRatio(1);
     scene.aspectratio.y = 1.0*aspectRatio(2);
@@ -135,12 +102,10 @@ function updateScene(obj, dataIndex)
     scene.camera.eye.z = cameraEye(3)/normFac;
 
     %-camera up-%
-    scene.camera.up.x = cameraUpVector(1); 
+    scene.camera.up.x = cameraUpVector(1);
     scene.camera.up.y = cameraUpVector(2);
     scene.camera.up.z = cameraUpVector(3);
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
     scene.xaxis.range = axisData.XLim;
     scene.yaxis.range = axisData.YLim;
@@ -154,17 +119,17 @@ function updateScene(obj, dataIndex)
     scene.yaxis.showline = true;
     scene.zaxis.showline = true;
 
-    scene.xaxis.ticklabelposition = 'outside';
-    scene.yaxis.ticklabelposition = 'outside';
-    scene.zaxis.ticklabelposition = 'outside';
+    scene.xaxis.ticklabelposition = "outside";
+    scene.yaxis.ticklabelposition = "outside";
+    scene.zaxis.ticklabelposition = "outside";
 
     scene.xaxis.title = axisData.XLabel.String;
     scene.yaxis.title = axisData.YLabel.String;
     scene.zaxis.title = axisData.ZLabel.String;
 
-    scene.xaxis.titlefont.color = 'rgba(0,0,0,1)';
-    scene.yaxis.titlefont.color = 'rgba(0,0,0,1)';
-    scene.zaxis.titlefont.color = 'rgba(0,0,0,1)';
+    scene.xaxis.titlefont.color = "rgba(0,0,0,1)";
+    scene.yaxis.titlefont.color = "rgba(0,0,0,1)";
+    scene.zaxis.titlefont.color = "rgba(0,0,0,1)";
     scene.xaxis.titlefont.size = axisData.XLabel.FontSize;
     scene.yaxis.titlefont.size = axisData.YLabel.FontSize;
     scene.zaxis.titlefont.size = axisData.ZLabel.FontSize;
@@ -223,9 +188,9 @@ function updateScene(obj, dataIndex)
     scene.zaxis.tickvals = zTick;
     scene.zaxis.ticktext = axisData.ZTickLabel;
 
-    scene.xaxis.tickcolor = 'rgba(0,0,0,1)';
-    scene.yaxis.tickcolor = 'rgba(0,0,0,1)';
-    scene.zaxis.tickcolor = 'rgba(0,0,0,1)';
+    scene.xaxis.tickcolor = "rgba(0,0,0,1)";
+    scene.yaxis.tickcolor = "rgba(0,0,0,1)";
+    scene.zaxis.tickcolor = "rgba(0,0,0,1)";
     scene.xaxis.tickfont.size = axisData.FontSize;
     scene.yaxis.tickfont.size = axisData.FontSize;
     scene.zaxis.tickfont.size = axisData.FontSize;
@@ -234,27 +199,28 @@ function updateScene(obj, dataIndex)
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
     %-grid-%
-    if strcmp(axisData.XGrid, 'off'), scene.xaxis.showgrid = false; end
-    if strcmp(axisData.YGrid, 'off'), scene.yaxis.showgrid = false; end
-    if strcmp(axisData.ZGrid, 'off'), scene.zaxis.showgrid = false; end
-
-    %---------------------------------------------------------------------%
+    if strcmp(axisData.XGrid, "off")
+        scene.xaxis.showgrid = false;
+    end
+    if strcmp(axisData.YGrid, "off")
+        scene.yaxis.showgrid = false;
+    end
+    if strcmp(axisData.ZGrid, "off")
+        scene.zaxis.showgrid = false;
+    end
 
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xSource), scene);
+    obj.layout.("scene" + xsource) = scene;
 end
 
-function updateDefaultPolaraxes(obj, plotIndex)
+function polarAxis = updateDefaultPolarAxes(obj, plotIndex)
     %-INITIALIZATIONS-%
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
-    [xSource, ysource] = findSourceAxis(obj, axIndex);
     plotData = obj.State.Plot(plotIndex).Handle;
     axisData = plotData.Parent;
 
     thetaAxis = axisData.XAxis;
     rAxis = axisData.YAxis;
-
-    %---------------------------------------------------------------------%
+    thetaLabel = thetaAxis.Label;
 
     %-set domain plot-%
     xo = axisData.Position(1);
@@ -262,79 +228,62 @@ function updateDefaultPolaraxes(obj, plotIndex)
     w = axisData.Position(3);
     h = axisData.Position(4);
 
-    polarAxis.domain.x = min([xo xo + w], 1);
-    polarAxis.domain.y = min([yo yo + h], 1);
-
     tickValues = rAxis.TickValues;
     tickValues = tickValues(find(tickValues==0) + 1 : end);
-
-    %---------------------------------------------------------------------%
-        
-    %-SET ANGULAR AXIS-%
+    rLabel = rAxis.Label;
 
     gridColor = getStringColor(255*axisData.GridColor, axisData.GridAlpha);
     gridWidth = axisData.LineWidth;
 
-    polarAxis.angularaxis.ticklen = 0;
-    polarAxis.angularaxis.autorange = true;
-    polarAxis.angularaxis.linecolor = gridColor;
-    polarAxis.angularaxis.gridwidth = gridWidth;
-    polarAxis.angularaxis.gridcolor = gridColor;
-    polarAxis.angularaxis.rotation = -axisData.View(1);
-
-    %-axis tick-%
-    polarAxis.angularaxis.showticklabels = true;
-    polarAxis.angularaxis.nticks = 16;
-    polarAxis.angularaxis.tickfont.size = thetaAxis.FontSize;
-    polarAxis.angularaxis.tickfont.color = getStringColor(...
-            255*thetaAxis.Color);
-    polarAxis.angularaxis.tickfont.family = matlab2plotlyfont(...
-            thetaAxis.FontName);
-
-    %-axis label-%
-    thetaLabel = thetaAxis.Label;
-
-    polarAxis.angularaxis.title.text = thetaLabel.String;
-    polarAxis.radialaxis.title.font.size = thetaLabel.FontSize;
-    polarAxis.radialaxis.title.font.color = getStringColor(...
-            255*thetaLabel.Color);
-    polarAxis.radialaxis.title.font.family = matlab2plotlyfont(...
-            thetaLabel.FontName);
-
-    %---------------------------------------------------------------------%
-        
-    %-SET RADIAL AXIS-%
-
-    polarAxis.radialaxis.ticklen = 0;
-    polarAxis.radialaxis.range = [0,  tickValues(end)];
-    polarAxis.radialaxis.showline = false;
-
-    polarAxis.radialaxis.angle = 80;
-    polarAxis.radialaxis.tickangle = 80;
-
-    polarAxis.radialaxis.gridwidth = gridWidth;
-    polarAxis.radialaxis.gridcolor = gridColor;
-
-    %-axis tick-%
-    polarAxis.radialaxis.showticklabels = true;
-    polarAxis.radialaxis.tickvals = tickValues;
-    polarAxis.radialaxis.tickfont.size = rAxis.FontSize;
-    polarAxis.radialaxis.tickfont.color = getStringColor(255*rAxis.Color);
-    polarAxis.radialaxis.tickfont.family = matlab2plotlyfont(...
-            rAxis.FontName);
-
-    %-axis label-%
-    rLabel = rAxis.Label;
-
-    polarAxis.radialaxis.title.text = rLabel.String;
-    polarAxis.radialaxis.title.font.size = rLabel.FontSize;
-    polarAxis.radialaxis.title.font.color = getStringColor(255*rLabel.Color);
-    polarAxis.radialaxis.title.font.family = matlab2plotlyfont(...
-            rLabel.FontName);
-
-    %---------------------------------------------------------------------%
-
-    %-set Polar Axes to layout-%
-    obj.layout = setfield(obj.layout, sprintf('polar%d', xSource+1), ...
-            polarAxis);
+    polarAxis.domain = struct( ...
+        "x", min([xo xo + w], 1), ...
+        "y", min([yo yo + h], 1) ...
+    );
+    polarAxis.angularaxis = struct(...
+        "ticklen", 0, ...
+        "autorange", true, ...
+        "linecolor", gridColor, ...
+        "gridwidth", gridWidth, ...
+        "gridcolor", gridColor, ...
+        "rotation", -axisData.View(1), ...
+        "showticklabels", true, ...
+        "nticks", 16, ...
+        "tickfont", struct( ...
+            "size", thetaAxis.FontSize, ...
+            "color", getStringColor(round(255*thetaAxis.Color)), ...
+            "family", matlab2plotlyfont(thetaAxis.FontName) ...
+        ), ...
+        "title", struct( ...
+            "text", thetaLabel.String, ...
+            "font", struct( ...
+                "size", thetaLabel.FontSize, ...
+                "color", getStringColor(round(255*thetaLabel.Color)), ...
+                "family", matlab2plotlyfont(thetaLabel.FontName) ...
+            ) ...
+        ) ...
+    );
+    polarAxis.radialaxis = struct( ...
+        "ticklen", 0, ...
+        "range", [0,  tickValues(end)], ...
+        "showline", false, ...
+        "angle", 80, ...
+        "tickangle", 80, ...
+        "gridwidth", gridWidth, ...
+        "gridcolor", gridColor, ...
+        "showticklabels", true, ...
+        "tickvals", tickValues, ...
+        "tickfont", struct( ...
+            "size", rAxis.FontSize, ...
+            "color", getStringColor(round(255*rAxis.Color)), ...
+            "family", matlab2plotlyfont(rAxis.FontName) ...
+        ), ...
+        "title", struct( ...
+            "text", rLabel.String, ...
+            "font", struct( ...
+                "size", rLabel.FontSize, ...
+                "color", getStringColor(round(255*rLabel.Color)), ...
+                "family", matlab2plotlyfont(rLabel.FontName) ...
+            ) ...
+        ) ...
+    );
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateMesh.m b/plotly/plotlyfig_aux/handlegraphics/updateMesh.m
index 89d58634..834250c6 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateMesh.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateMesh.m
@@ -3,7 +3,7 @@
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     meshData = obj.State.Plot(surfaceIndex).Handle;
@@ -19,23 +19,17 @@
     contourIndex = obj.PlotOptions.nPlots;
     obj.PlotOptions.contourIndex(surfaceIndex) = contourIndex;
 
-    %---------------------------------------------------------------------%
-
     %-associate scene-%
     obj.data{surfaceIndex}.scene = sprintf('scene%d', xsource);
     obj.data{contourIndex}.scene = sprintf('scene%d', xsource);
 
-    %---------------------------------------------------------------------%
-
     %-surface type for face color-%
     obj.data{surfaceIndex}.type = 'surface';
-        
+
     %-scatter3d type for contour mesh lines-%
     obj.data{contourIndex}.type = 'scatter3d';
     obj.data{contourIndex}.mode = 'lines';
 
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     xData = meshData.XData;
     yData = meshData.YData;
@@ -66,8 +60,6 @@
     yDataContour = [yDataContourDir1(:); yDataContourDir2(:)];
     zDataContour = [zDataContourDir1(:); zDataContourDir2(:)];
 
-    %---------------------------------------------------------------------%
-
     %-set data on surface-%
     obj.data{surfaceIndex}.x = xDataSurface;
     obj.data{surfaceIndex}.y = yDataSurface;
@@ -85,22 +77,16 @@
     yData = yData(:, 1);
     obj.data{surfaceIndex}.contours.y.start = yData(1);
     obj.data{surfaceIndex}.contours.y.end = yData(end);
-    obj.data{surfaceIndex}.contours.y.size = mean(diff(yData));;
+    obj.data{surfaceIndex}.contours.y.size = mean(diff(yData));
     obj.data{surfaceIndex}.contours.y.show = true;
 
-    %---------------------------------------------------------------------%
-
     %-set data on scatter3d-%
     obj.data{contourIndex}.x = xDataContour(:);
     obj.data{contourIndex}.y = yDataContour(:);
     obj.data{contourIndex}.z = zDataContour(:);
 
-    %---------------------------------------------------------------------%
-
     %-COLORING-%
 
-    %---------------------------------------------------------------------%
-
     %-get colormap-%
     cMap = axisData.Colormap;
     fac = 1/(length(cMap)-1);
@@ -108,15 +94,12 @@
 
     for c = 1: length(cMap)
         colorScale{c} = {(c-1)*fac, ...
-                sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                getStringColor(round(255*cMap(c, :)))};
     end
 
-    %---------------------------------------------------------------------%
-
     %-get edge color-%
     if isnumeric(meshData.EdgeColor)
-        cDataContour = sprintf("rgb(%d,%d,%d)", ...
-                round(255*meshData.EdgeColor));
+        cDataContour = getStringColor(round(255*meshData.EdgeColor));
 
     elseif strcmpi(meshData.EdgeColor, "interp")
         cDataContour = zDataContour(:);
@@ -138,7 +121,7 @@
 
             for c = 1: length(cMap)
                 edgeColorScale{c} = {(c-1)*fac, ...
-                        sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                        getStringColor(round(255*cMap(c, :)))};
             end
 
             obj.data{surfaceIndex}.line.cmin = 0;
@@ -162,7 +145,6 @@
         cDataContour = 'rgba(0,0,0,0)';
         obj.data{surfaceIndex}.contours.x.show = false;
         obj.data{surfaceIndex}.contours.y.show = false;
-
     end
 
     %-set edge color-%
@@ -170,13 +152,10 @@
     obj.data{surfaceIndex}.contours.x.color = cDataContour;
     obj.data{surfaceIndex}.contours.y.color = cDataContour;
 
-    %---------------------------------------------------------------------%
-
     %-get face color-%
     faceColor = meshData.FaceColor;
 
     if isnumeric(faceColor)
-
         if all(faceColor == [1, 1, 1])
             faceColor = [0.96, 0.96, 0.96];
         end
@@ -192,7 +171,7 @@
 
         for c = 1: size(cMapSurface, 1)
             colorScale{c} = {(c-1)*fac, ...
-                    sprintf("rgba(%f,%f,%f, 1)", cMapSurface(c, :))};
+                    getStringColor(round(255*cMapSurface(c, :)), 1)};
         end
 
         obj.data{surfaceIndex}.cmin = axisData.CLim(1);
@@ -230,14 +209,13 @@
 
             for c = 1: length(cMap)
                 colorScale{c} = {(c-1)*fac, ...
-                        sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                        getStringColor(round(255*cMap(c, :)))};
             end
         else
             cDataSurface = cData;
             obj.data{surfaceIndex}.cmin = axisData.CLim(1);
             obj.data{surfaceIndex}.cmax = axisData.CLim(2);
         end
-        
     end
 
     %-set face color-%
@@ -264,8 +242,6 @@
     %-opacity-%
     obj.data{surfaceIndex}.opacity = meshData.FaceAlpha;
 
-    %---------------------------------------------------------------------%
-
     %-line style-%
 
     obj.data{contourIndex}.line.width = 3*meshData.LineWidth;
@@ -278,11 +254,7 @@
         obj.data{surfaceIndex}.contours.y.show = false;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-SCENE CONFIGUTATION-%
-
-    %---------------------------------------------------------------------%
+    %-SCENE CONFIGURATION-%
 
     %-aspect ratio-%
     asr = obj.PlotOptions.AspectRatio;
@@ -291,8 +263,6 @@
         if ischar(asr)
             scene.aspectmode = asr;
         elseif isvector(ar) && length(asr) == 3
-            xar = asr(1);
-            yar = asr(2);
             zar = asr(3);
         end
     else
@@ -307,8 +277,6 @@
     scene.aspectratio.y = 1.0*xyar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -320,17 +288,29 @@
         end
     else
         %-define as default-%
-        xey = - xyar; if xey>0 xfac = -0.0; else xfac = 0.0; end
-        yey = - xyar; if yey>0 yfac = -0.3; else yfac = 0.3; end
-        if zar>0 zfac = -0.1; else zfac = 0.1; end
-        
-        scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xyar;
+        if xey>0
+            xfac = -0.0;
+        else
+            xfac = 0.0;
+        end
+        yey = - xyar;
+        if yey>0
+            yfac = -0.3;
+        else
+            yfac = 0.3;
+        end
+        if zar>0
+            zfac = -0.1;
+        else
+            zfac = 0.1;
+        end
+
+        scene.camera.eye.x = xey + xfac*xey;
         scene.camera.eye.y = yey + yfac*yey;
         scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
 
     scene.xaxis.range = axisData.XLim;
@@ -374,12 +354,8 @@
     scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-    %---------------------------------------------------------------------%
-
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
-
-    %---------------------------------------------------------------------%
+    obj.layout.("scene" + xsource) = scene;
 
     obj.data{surfaceIndex}.name = meshData.DisplayName;
     obj.data{contourIndex}.name = meshData.DisplayName;
@@ -388,17 +364,10 @@
     obj.data{surfaceIndex}.visible = strcmp(meshData.Visible,'on');
     obj.data{contourIndex}.visible = strcmp(meshData.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = meshData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch meshData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
-
-    obj.data{surfaceIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateOnlyAxes.m b/plotly/plotlyfig_aux/handlegraphics/updateOnlyAxes.m
index 244defbe..3af758e9 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateOnlyAxes.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateOnlyAxes.m
@@ -1,20 +1,17 @@
-function updateOnlyAxes(obj, plotIndex)
+function data = updateOnlyAxes(obj, plotIndex)
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj, axIndex);
 
-    %-ASSOCIATE AXIS LAYOUT-%
-    obj.data{plotIndex}.xaxis = "x" + xsource;
-    obj.data{plotIndex}.yaxis = "y" + ysource;
-
-    %-set scatter trace-%
-    obj.data{plotIndex}.type = "scatter";
-    obj.data{plotIndex}.mode = "none";
-
-    %-set empty data-%
-    obj.data{plotIndex}.x = [];
-    obj.data{plotIndex}.y = [];
-    obj.data{plotIndex}.name = "";
+    data = struct( ...
+        "xaxis", "x" + xsource, ...
+        "yaxis", "y" + ysource, ...
+        "type", "scatter", ...
+        "mode", "none", ...
+        "x", [], ...
+        "y", [], ...
+        "name", "" ...
+    );
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updatePColor.m b/plotly/plotlyfig_aux/handlegraphics/updatePColor.m
index c22c7453..a2dee2a9 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updatePColor.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updatePColor.m
@@ -9,23 +9,13 @@
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     %-pcolor xaxis and yaxis-%
     obj.data{patchIndex}.xaxis = "x" + xsource;
     obj.data{patchIndex}.yaxis = "y" + ysource;
 
-    %---------------------------------------------------------------------%
-
     %-plot type: surface-%
     obj.data{patchIndex}.type = 'surface';
 
-    %---------------------------------------------------------------------%
-
     %-format data-%
     XData = pcolor_data.XData;
     YData = pcolor_data.YData;
@@ -39,17 +29,16 @@
     end
 
     sizes = [(size(XData, 1)-1)*2, (size(XData, 2)-1)*2];
-    xdata = zeros(sizes); 
-    ydata = zeros(sizes); 
-    zdata = zeros(sizes); 
-    cdata = zeros(sizes); 
+    xdata = zeros(sizes);
+    ydata = zeros(sizes);
+    zdata = zeros(sizes);
+    cdata = zeros(sizes);
 
     for n = 1:size(XData, 2)-1
         for m = 1:size(XData, 1)-1
-            
             % get indices
             n1 = 2*(n-1)+1; m1 = 2*(m-1)+1;
-            
+
             % get surface mesh
             xdata(m1:m1+1,n1:n1+1) = XData(m:m+1, n:n+1);
             ydata(m1:m1+1,n1:n1+1) = YData(m:m+1, n:n+1);
@@ -58,14 +47,10 @@
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-x,y,z-data-%
-    obj.data{patchIndex}.x = xdata; 
-    obj.data{patchIndex}.y = ydata; 
-    obj.data{patchIndex}.z = zdata; 
-
-    %---------------------------------------------------------------------%
+    obj.data{patchIndex}.x = xdata;
+    obj.data{patchIndex}.y = ydata;
+    obj.data{patchIndex}.z = zdata;
 
     %-coloring-%
     cmap = figure_data.Colormap;
@@ -74,7 +59,7 @@
     for c = 1:length(cmap)
         col = round(255 * cmap(c, :));
         obj.data{patchIndex}.colorscale{c} = ...
-                {(c-1)/len, sprintf("rgb(%d,%d,%d)", col)};
+                {(c-1)/len, getStringColor(col)};
     end
 
     obj.data{patchIndex}.surfacecolor = cdata;
@@ -82,14 +67,12 @@
     obj.data{patchIndex}.cmin = min(CData(:));
     obj.data{patchIndex}.cmax = max(CData(:));
 
-    %---------------------------------------------------------------------%
-
     %-setting grid mesh-%
     if usegrid
         % x-direction
         xmin = min(XData(:));
         xmax = max(XData(:));
-        xsize = (xmax - xmin) / (size(XData, 2) - 1); 
+        xsize = (xmax - xmin) / (size(XData, 2) - 1);
         obj.data{patchIndex}.contours.x.start = xmin;
         obj.data{patchIndex}.contours.x.end = xmax;
         obj.data{patchIndex}.contours.x.size = xsize;
@@ -106,38 +89,28 @@
         obj.data{patchIndex}.contours.y.color = 'black';
     end
 
-    %---------------------------------------------------------------------%
-
     %-aspectratio-%
     obj.layout.scene.aspectratio.x = 12;
     obj.layout.scene.aspectratio.y = 10;
     obj.layout.scene.aspectratio.z = 0.0001;
 
-    %---------------------------------------------------------------------%
-
     %-camera.eye-%
     obj.layout.scene.camera.eye.x = 0;
     obj.layout.scene.camera.eye.y = -0.5;
     obj.layout.scene.camera.eye.z = 14;
 
-    %---------------------------------------------------------------------%
-
     %-hide axis-x-%
     obj.layout.scene.xaxis.showticklabels = true;
     obj.layout.scene.xaxis.zeroline = false;
     obj.layout.scene.xaxis.showgrid = false;
     obj.layout.scene.xaxis.title = '';
 
-    %---------------------------------------------------------------------%
-
     %-hide axis-y-%
     obj.layout.scene.yaxis.zeroline = false;
     obj.layout.scene.yaxis.showgrid = false;
     obj.layout.scene.yaxis.showticklabels = true;
     obj.layout.scene.yaxis.title = '';
 
-    %---------------------------------------------------------------------%
-
     %-hide axis-z-%
     obj.layout.scene.zaxis.title = '';
     obj.layout.scene.zaxis.autotick = false;
@@ -146,18 +119,10 @@
     obj.layout.scene.zaxis.showticklabels = false;
     obj.layout.scene.zaxis.showgrid = false;
 
-    %---------------------------------------------------------------------%
-
-    %-patch showlegend-%
-    leg = pcolor_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch pcolor_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{patchIndex}.showlegend = true;
+        case "off"
+            obj.data{patchIndex}.showlegend = false;
     end
-
-    obj.data{patchIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updatePatch.m b/plotly/plotlyfig_aux/handlegraphics/updatePatch.m
index 1824f0a4..eb373c9a 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updatePatch.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updatePatch.m
@@ -52,18 +52,10 @@
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     %-patch xaxis and yaxis-%
     obj.data{patchIndex}.xaxis = "x" + xsource;
     obj.data{patchIndex}.yaxis = "y" + ysource;
 
-    %---------------------------------------------------------------------%
-
     %-patch type-%
     if any(nonzeros(patch_data.ZData))
         if obj.PlotOptions.TriangulatePatch
@@ -74,18 +66,15 @@
             obj.data{patchIndex}.type = 'scatter3d';
         end
     else
-        obj.data{patchIndex}.type = 'scatter'; 
+        obj.data{patchIndex}.type = 'scatter';
     end
 
-    %---------------------------------------------------------------------%
-
     if ~strcmp(obj.data{patchIndex}.type, 'mesh3d')
         %-patch x-%
         xdata = patch_data.XData;
         if isvector(xdata)
             obj.data{patchIndex}.x = [xdata' xdata(1)];
         else
-            xtemp = reshape(xdata,[],1);
             xnew = [];
             for n = 1:size(xdata,2)
                 xnew = [xnew ; xdata(:,n) ; xdata(1,n); NaN];
@@ -93,14 +82,11 @@
             obj.data{patchIndex}.x = xnew;
         end
 
-        %-----------------------------------------------------------------%
-
         %-patch y-%
         ydata = patch_data.YData;
         if isvector(ydata)
             obj.data{patchIndex}.y = [ydata' ydata(1)];
         else
-            ytemp = reshape(ydata,[],1);
             ynew = [];
             for n = 1:size(ydata,2)
                 ynew = [ynew ; ydata(:,n) ; ydata(1,n); NaN];
@@ -108,15 +94,12 @@
             obj.data{patchIndex}.y = ynew;
         end
 
-        %-----------------------------------------------------------------%
-
         %-patch z-%
         if any(nonzeros(patch_data.ZData))
             zdata = patch_data.ZData;
             if isvector(ydata)
                 obj.data{patchIndex}.z = [zdata' zdata(1)];
             else
-                ztemp = reshape(zdata,[],1);
                 znew = [];
                 for n = 1:size(zdata,2)
                     znew = [znew ; zdata(:,n) ; zdata(1,n); NaN];
@@ -125,13 +108,9 @@
             end
         end
 
-        %-----------------------------------------------------------------%
-
         obj.data{patchIndex}.name = patch_data.DisplayName;
         obj.data{patchIndex}.visible = strcmp(patch_data.Visible,'on');
 
-        %-----------------------------------------------------------------%
-
         %-patch fill-%
         obj.data{patchIndex}.fill = 'tozeroy';
 
@@ -151,24 +130,20 @@
         obj.data{patchIndex}.marker = extractPatchMarker(patch_data);
         obj.data{patchIndex}.line = extractPatchLine(patch_data);
 
-        %-----------------------------------------------------------------%
-
         %-patch fillcolor-%
         fill = extractPatchFace(patch_data);
 
         if strcmp(obj.data{patchIndex}.type,'scatter')
-            obj.data{patchIndex}.fillcolor = fill.color; 
+            obj.data{patchIndex}.fillcolor = fill.color;
         else
             obj.data{patchIndex}.surfacecolor = fill.color;
         end
 
-        %-----------------------------------------------------------------%
-
         %-surfaceaxis-%
         if strcmp(obj.data{patchIndex}.type,'scatter3d')
             minstd = min([std(patch_data.XData) std(patch_data.YData) std(patch_data.ZData)]);
             ind = find([std(patch_data.XData) std(patch_data.YData) std(patch_data.ZData)] == minstd)-1;
-            obj.data{patchIndex}.surfaceaxis = ind; 
+            obj.data{patchIndex}.surfaceaxis = ind;
         end
     else
         % handle vertices
@@ -177,38 +152,31 @@
         z_data = patch_data_red.vertices(:,3);
 
         % specify how vertices connect to form the faces
-        i_data = patch_data_red.faces(:,1)-1; 
+        i_data = patch_data_red.faces(:,1)-1;
         j_data = patch_data_red.faces(:,2)-1;
         k_data = patch_data_red.faces(:,3)-1;
-        
+
         %-patch x/y/z-%
-        obj.data{patchIndex}.x = x_data; 
-        obj.data{patchIndex}.y = y_data; 
-        obj.data{patchIndex}.z = z_data; 
-        
+        obj.data{patchIndex}.x = x_data;
+        obj.data{patchIndex}.y = y_data;
+        obj.data{patchIndex}.z = z_data;
+
         %-patch i/j/k-%
-        obj.data{patchIndex}.i = i_data; 
-        obj.data{patchIndex}.j = j_data; 
+        obj.data{patchIndex}.i = i_data;
+        obj.data{patchIndex}.j = j_data;
         obj.data{patchIndex}.k = k_data;
-        
+
         %-patch fillcolor-%
         fill = extractPatchFace(patch_data);
         obj.data{patchIndex}.color = fill.color;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-patch showlegend-%
-    leg = patch_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch patch_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{patchIndex}.showlegend = true;
+        case "off"
+            obj.data{patchIndex}.showlegend = false;
     end
 
-    showleg = showleg & ~isempty(obj.data{patchIndex}.name);
-    obj.data{patchIndex}.showlegend = showleg;
+    obj.data{patchIndex}.showlegend = obj.data{patchIndex}.showlegend & ~isempty(obj.data{patchIndex}.name);
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updatePie3.m b/plotly/plotlyfig_aux/handlegraphics/updatePie3.m
index b91513aa..7ea25fbd 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updatePie3.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updatePie3.m
@@ -13,7 +13,7 @@ function updatePie3(obj,plotIndex)
     obj.PlotOptions.scene.xaxis.showline = false;
     obj.PlotOptions.scene.xaxis.showticklabels = false;
     obj.PlotOptions.scene.xaxis.showgrid = false;
-    
+
     %-hide axis-y-%
     obj.PlotOptions.scene.yaxis.title = '';
     obj.PlotOptions.scene.yaxis.autotick = false;
@@ -21,7 +21,7 @@ function updatePie3(obj,plotIndex)
     obj.PlotOptions.scene.yaxis.showline = false;
     obj.PlotOptions.scene.yaxis.showticklabels = false;
     obj.PlotOptions.scene.yaxis.showgrid = false;
-    
+
     %-hide axis-z-%
     obj.PlotOptions.scene.zaxis.title = '';
     obj.PlotOptions.scene.zaxis.autotick = false;
@@ -29,7 +29,7 @@ function updatePie3(obj,plotIndex)
     obj.PlotOptions.scene.zaxis.showline = false;
     obj.PlotOptions.scene.zaxis.showticklabels = false;
     obj.PlotOptions.scene.zaxis.showgrid = false;
-    
+
     %-put text-%
     obj.data{plotIndex}.hoverinfo = 'text';
     obj.data{plotIndex}.hovertext = obj.PlotOptions.perc;
@@ -60,37 +60,32 @@ function updatePie3(obj,plotIndex)
     if ~any(nonzeros(patch_data.ZData))
         t1 = atan2(patch_data.YData(2), patch_data.XData(2));
         t2 = atan2(patch_data.YData(end-1), patch_data.XData(end-1));
-        
+
         a = rad2deg(t2-t1);
         if a < 0
             a = a+360;
         end
-        
+
         obj.PlotOptions.perc = sprintf('%d %%', round(100*a/360));
     end
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-AXIS DATA-%
     scene = obj.layout.("scene" + xsource);
     obj.PlotOptions.scene_anchor = "scene" + xsource;
 
-    %---------------------------------------------------------------------%
-
     %-scene to be set-%
     obj.PlotOptions.scene = scene;
 
     obj.data{patchIndex}.type = 'scatter3d';
 
-    %---------------------------------------------------------------------%
-
     %-patch x-%
     xdata = patch_data.XData;
     if isvector(xdata)
         obj.data{patchIndex}.x = [xdata' xdata(1)];
     else
-        xtemp = reshape(xdata,[],1);
         xnew = [];
         for n = 1:size(xdata,2)
             xnew = [xnew ; xdata(:,n) ; xdata(1,n); NaN];
@@ -98,14 +93,11 @@ function updatePie3(obj,plotIndex)
         obj.data{patchIndex}.x = xnew;
     end
 
-    %---------------------------------------------------------------------%
-
     %-patch y-%
     ydata = patch_data.YData;
     if isvector(ydata)
         obj.data{patchIndex}.y = [ydata' ydata(1)];
     else
-        ytemp = reshape(ydata,[],1);
         ynew = [];
         for n = 1:size(ydata,2)
             ynew = [ynew ; ydata(:,n) ; ydata(1,n); NaN];
@@ -113,15 +105,12 @@ function updatePie3(obj,plotIndex)
         obj.data{patchIndex}.y = ynew;
     end
 
-    %---------------------------------------------------------------------%
-
     %-patch z-%
     zdata = patch_data.ZData;
 
     if isvector(ydata)
         obj.data{patchIndex}.z = [zdata' zdata(1)];
     else
-        ztemp = reshape(zdata,[],1);
         znew = [];
         for n = 1:size(zdata,2)
             znew = [znew ; zdata(:,n) ; zdata(1,n); NaN];
@@ -129,22 +118,11 @@ function updatePie3(obj,plotIndex)
         obj.data{patchIndex}.z = znew;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-patch name-%
-    if ~isempty(patch_data.DisplayName)
-        obj.data{patchIndex}.name = patch_data.DisplayName;
-    else
-        obj.data{patchIndex}.name = patch_data.DisplayName;
-    end
-
-    %---------------------------------------------------------------------%
+    obj.data{patchIndex}.name = patch_data.DisplayName;
 
     %-patch visible-%
     obj.data{patchIndex}.visible = strcmp(patch_data.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
     %-patch fill-%
     % obj.data{patchIndex}.fill = 'tozeroy';
 
@@ -164,8 +142,6 @@ function updatePie3(obj,plotIndex)
     obj.data{patchIndex}.marker = extractPatchMarker(patch_data);
     obj.data{patchIndex}.line = extractPatchLine(patch_data);
 
-    %---------------------------------------------------------------------%
-
     %-patch fillcolor-%
     fill = extractPatchFace(patch_data);
     obj.data{patchIndex}.surfacecolor = fill.color;
@@ -175,27 +151,18 @@ function updatePie3(obj,plotIndex)
         obj.data{patchIndex}.line.color = fill.color;
     end
 
-    %---------------------------------------------------------------------%
-
     %-surfaceaxis-%
     minstd = min([std(patch_data.XData) std(patch_data.YData) std(patch_data.ZData)]);
     ind = find([std(patch_data.XData) std(patch_data.YData) std(patch_data.ZData)] == minstd)-1;
     obj.data{patchIndex}.surfaceaxis = ind;
 
-    %---------------------------------------------------------------------%
-
     %-patch showlegend-%
-    leg = patch_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch patch_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{patchIndex}.showlegend = true;
+        case "off"
+            obj.data{patchIndex}.showlegend = false;
     end
-
-    obj.data{patchIndex}.showlegend = showleg;
 end
 
 function obj = updateSurfacePie3(obj, surfaceIndex)
@@ -203,7 +170,7 @@ function updatePie3(obj,plotIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     image_data = obj.State.Plot(surfaceIndex).Handle;
@@ -213,15 +180,11 @@ function updatePie3(obj,plotIndex)
     scene = obj.layout.("scene" + xsource);
     obj.PlotOptions.scene_anchor = "scene" + xsource;
 
-    %---------------------------------------------------------------------%
-
     obj.data{surfaceIndex}.type = 'surface';
     obj.data{surfaceIndex}.x = image_data.XData;
     obj.data{surfaceIndex}.y = image_data.YData;
     obj.data{surfaceIndex}.z = image_data.ZData;
 
-    %---------------------------------------------------------------------%
-
     %-image colorscale-%
 
     cmap = figure_data.Colormap;
@@ -230,7 +193,7 @@ function updatePie3(obj,plotIndex)
     for c = 1:length(cmap)
         col = round(255 * cmap(c, :));
         obj.data{surfaceIndex}.colorscale{c} = ...
-                {(c-1)/len, sprintf("rgb(%d,%d,%d)", col)};
+                {(c-1)/len, getStringColor(col)};
     end
 
     obj.data{surfaceIndex}.surfacecolor = ...
@@ -238,8 +201,6 @@ function updatePie3(obj,plotIndex)
     obj.data{surfaceIndex}.cmax = 255;
     obj.data{surfaceIndex}.cmin = 0;
 
-    %---------------------------------------------------------------------%
-
     %-get data-%
     xdata = image_data.XData;
     ydata = image_data.YData;
@@ -266,16 +227,9 @@ function updatePie3(obj,plotIndex)
     fac2 = 0.175;
     nax = length(obj.PlotOptions.nbars);
 
-    scene.aspectratio.x = xar + fac1*(nax-1)*xar; 
-    scene.aspectratio.y = yar + fac1*(nax-1)*yar; 
-    scene.aspectratio.z = (zar + fac1*(nax-1)*zar)*fac2; 
-
-    % optional equations
-    % scene.aspectratio.x = xar*(1+fac1); 
-    % scene.aspectratio.y = yar*(1+fac1); 
-    % scene.aspectratio.z = zar*fac2*(1+fac1); 
-
-    %---------------------------------------------------------------------%
+    scene.aspectratio.x = xar + fac1*(nax-1)*xar;
+    scene.aspectratio.y = yar + fac1*(nax-1)*yar;
+    scene.aspectratio.z = (zar + fac1*(nax-1)*zar)*fac2;
 
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
@@ -287,19 +241,30 @@ function updatePie3(obj,plotIndex)
             scene.camera.eye.z = ey(3);
         end
     else
-
         %-define as default-%
-        xey = - xar; if xey>0 xfac = -0.2; else xfac = 0.2; end
-        yey = - yar; if yey>0 yfac = -0.2; else yfac = 0.2; end
-        if zar>0 zfac = 0.2; else zfac = -0.2; end
-        
-        scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xar;
+        if xey>0
+            xfac = -0.2;
+        else
+            xfac = 0.2;
+        end
+        yey = - yar;
+        if yey>0
+            yfac = -0.2;
+        else
+            yfac = 0.2;
+        end
+        if zar>0
+            zfac = 0.2;
+        else
+            zfac = -0.2;
+        end
+
+        scene.camera.eye.x = xey + xfac*xey;
         scene.camera.eye.y = yey + yfac*yey;
         scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
     %-scene to be set-%
     obj.PlotOptions.scene = scene;
 
@@ -308,18 +273,11 @@ function updatePie3(obj,plotIndex)
     obj.data{surfaceIndex}.showscale = false;
     obj.data{surfaceIndex}.visible = strcmp(image_data.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = image_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch image_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex-1}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex-1}.showlegend = false;
     end
-
-    obj.data{surfaceIndex-1}.showlegend = showleg;
     obj.data{surfaceIndex}.showlegend = false;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updatePolarplot.m b/plotly/plotlyfig_aux/handlegraphics/updatePolarplot.m
index 5f477df8..88498097 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updatePolarplot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updatePolarplot.m
@@ -1,4 +1,4 @@
-function updatePolarplot(obj, plotIndex)
+function data = updatePolarplot(obj, plotIndex)
 
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
@@ -7,12 +7,10 @@ function updatePolarplot(obj, plotIndex)
     plotData = obj.State.Plot(plotIndex).Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
+    xsource = findSourceAxis(obj, axIndex);
 
     %-ASSOCIATE POLAR-AXES LAYOUT-%
-    obj.data{plotIndex}.subplot = sprintf('polar%d', xsource+1);
-
-    %---------------------------------------------------------------------%
+    data.subplot = sprintf('polar%d', xsource+1);
 
     %-parse plot data-%
     rData = plotData.RData;
@@ -21,51 +19,39 @@ function updatePolarplot(obj, plotIndex)
     thetaData(rData<0) = mod(thetaData(rData<0)+180, 360);
     rData = abs(rData);
 
-    %---------------------------------------------------------------------%
-
     %-scatterpolar trace setting-%
-    obj.data{plotIndex}.type = 'scatterpolar';
-    obj.data{plotIndex}.visible = strcmp(plotData.Visible,'on');
-    obj.data{plotIndex}.name = plotData.DisplayName;
-
-    %---------------------------------------------------------------------%
+    data.type = 'scatterpolar';
+    data.visible = strcmp(plotData.Visible,'on');
+    data.name = plotData.DisplayName;
 
     %-set scatterpolar data-%
-    obj.data{plotIndex}.r = rData;
-    obj.data{plotIndex}.theta = thetaData;
-
-    %---------------------------------------------------------------------%
+    data.r = rData;
+    data.theta = thetaData;
 
     %-trace settings-%
     if ~strcmpi('none', plotData.Marker) ...
             && ~strcmpi('none', plotData.LineStyle)
-        obj.data{plotIndex}.mode = 'lines+markers';
+        data.mode = 'lines+markers';
     elseif ~strcmpi('none', plotData.Marker)
-        obj.data{plotIndex}.mode = 'markers';
+        data.mode = 'markers';
     elseif ~strcmpi('none', plotData.LineStyle)
-        obj.data{plotIndex}.mode = 'lines';
+        data.mode = 'lines';
     else
-        obj.data{plotIndex}.mode = 'none';
+        data.mode = 'none';
     end
 
-    obj.data{plotIndex}.marker = extractLineMarker(plotData);
-    obj.data{plotIndex}.line = extractLineLine(plotData);
-    obj.data{plotIndex}.line.width = 2 * obj.data{plotIndex}.line.width;
-
-    %---------------------------------------------------------------------%
-
-    %-legend setting-%
-    leg = plotData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            obj.data{plotIndex}.showlegend = true;
-        case 'off'
-            obj.data{plotIndex}.showlegend = false;
+    data.marker = extractLineMarker(plotData);
+    data.line = extractLineLine(plotData);
+    if isfield(data.line, "width")
+        data.line.width = 2 * data.line.width;
     end
 
-    %---------------------------------------------------------------------%
+    switch plotData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            data.showlegend = true;
+        case "off"
+            data.showlegend = false;
+    end
 
     %-set polar axes-%
     updatePolaraxes(obj, plotIndex)
@@ -82,16 +68,14 @@ function updatePolaraxes(obj, plotIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
-        
+    xsource = findSourceAxis(obj, axIndex);
+
     %-GET DATA STRUCTURES-%
     plotData = obj.State.Plot(plotIndex).Handle;
     axisData = plotData.Parent;
     thetaAxis = axisData.ThetaAxis;
     rAxis = axisData.RAxis;
 
-    %---------------------------------------------------------------------%
-
     %-set domain plot-%
     xo = axisData.Position(1);
     yo = axisData.Position(2);
@@ -101,14 +85,12 @@ function updatePolaraxes(obj, plotIndex)
     polarAxis.domain.x = min([xo xo + w], 1);
     polarAxis.domain.y = min([yo yo + h], 1);
 
-    %---------------------------------------------------------------------%
-        
     %-setting angular axis-%
-    gridColor = sprintf("rgba(%d,%d,%d,%f)", ...
-            [round(255*axisData.GridColor) axisData.GridAlpha]);
+    gridColor = getStringColor( ...
+            round(255*axisData.GridColor), axisData.GridAlpha);
     gridWidth = axisData.LineWidth;
     thetaLim = thetaAxis.Limits;
-    
+
     polarAxis.angularaxis.linecolor = gridColor;
     polarAxis.angularaxis.ticklen = mean(thetaAxis.TickLength);
 
@@ -123,8 +105,6 @@ function updatePolaraxes(obj, plotIndex)
         polarAxis.angularaxis.gridcolor = gridColor;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set angular axis label-%
     thetaLabel = thetaAxis.Label;
 
@@ -132,11 +112,9 @@ function updatePolaraxes(obj, plotIndex)
     polarAxis.radialaxis.title.font.family = matlab2plotlyfont(...
             thetaLabel.FontName);
     polarAxis.radialaxis.title.font.size = thetaLabel.FontSize;
-    polarAxis.radialaxis.title.font.color = sprintf("rgb(%d,%d,%d)", ...
+    polarAxis.radialaxis.title.font.color = getStringColor( ...
             round(255*thetaLabel.Color));
 
-    %---------------------------------------------------------------------%
-        
     %-setting radial axis-%
     rLim = rAxis.Limits;
 
@@ -156,8 +134,6 @@ function updatePolaraxes(obj, plotIndex)
         polarAxis.radialaxis.gridcolor = gridColor;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set radial axis label-%
     rLabel = thetaAxis.Label;
 
@@ -165,36 +141,28 @@ function updatePolaraxes(obj, plotIndex)
     polarAxis.angularaxis.title.font.family = matlab2plotlyfont(...
             rLabel.FontName);
     polarAxis.angularaxis.title.font.size = rLabel.FontSize;
-    polarAxis.angularaxis.title.font.color = sprintf("rgb(%d,%d,%d)", ...
+    polarAxis.angularaxis.title.font.color = getStringColor( ...
             round(255*rLabel.Color));
 
-    %---------------------------------------------------------------------%
-
     %-angular tick labels settings-%
-    tickValues = axisData.ThetaTick; 
+    tickValues = axisData.ThetaTick;
     tickLabels = axisData.ThetaTickLabel;
     showTickLabels = true;
 
-    try
-        if tickValues(1) == 0 && tickValues(end) == 360
-            tickValues = tickValues(1:end-1);
-        end
-    catch
-        tickValues = tickValues;
+    if ~isempty(tickValues) && tickValues(1) == 0 && tickValues(end) == 360
+        tickValues = tickValues(1:end-1);
     end
 
-    if isempty(tickValues) 
+    if isempty(tickValues)
         showTickLabels = false;
         polarAxis.angularaxis.showticklabels = showTickLabels;
         polarAxis.angularaxis.ticks = '';
 
     elseif isempty(tickLabels)
         polarAxis.angularaxis.tickvals = tickValues;
-
     else
         polarAxis.angularaxis.tickvals = tickValues;
         polarAxis.angularaxis.ticktext = tickLabels;
-
     end
 
     if showTickLabels
@@ -209,25 +177,21 @@ function updatePolaraxes(obj, plotIndex)
         polarAxis.angularaxis.tickfont.family = matlab2plotlyfont(...
                 thetaAxis.FontName);
         polarAxis.angularaxis.tickfont.size = thetaAxis.FontSize;
-        polarAxis.angularaxis.tickfont.color = sprintf("rgb(%d,%d,%d)", ...
+        polarAxis.angularaxis.tickfont.color = getStringColor( ...
                 round(255*thetaAxis.Color));
     end
 
-    %---------------------------------------------------------------------%
-
     %-radial tick labels settings-%
     tickValues = axisData.RTick;
     tickLabels = axisData.RTickLabel;
     showTickLabels = true;
 
-    if isempty(tickValues) 
+    if isempty(tickValues)
         showTickLabels = false;
         polarAxis.radialaxis.showticklabels = showTickLabels;
         polarAxis.radialaxis.ticks = '';
-
     elseif isempty(tickLabels)
         polarAxis.radialaxis.tickvals = tickValues;
-
     else
         polarAxis.radialaxis.tickvals = tickValues;
         polarAxis.radialaxis.ticktext = tickLabels;
@@ -245,12 +209,9 @@ function updatePolaraxes(obj, plotIndex)
         polarAxis.radialaxis.tickfont.family = matlab2plotlyfont(...
                 rAxis.FontName);
         polarAxis.radialaxis.tickfont.size = rAxis.FontSize;
-        polarAxis.radialaxis.tickfont.color = sprintf("rgb(%d,%d,%d)", ...
+        polarAxis.radialaxis.tickfont.color = getStringColor( ...
                 round(255*rAxis.Color));
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set polaraxes to layout-%
-    obj.layout = setfield(obj.layout, sprintf('polar%d', xsource+1), polarAxis);
+    obj.layout.(sprintf('polar%d', xsource+1)) = polarAxis;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateQuiver.m b/plotly/plotlyfig_aux/handlegraphics/updateQuiver.m
index eddb70dd..3b6bfc32 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateQuiver.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateQuiver.m
@@ -4,14 +4,16 @@
     %-get structures-%
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
-    [xSource, ySource] = findSourceAxis(obj,axIndex);
+    xSource = findSourceAxis(obj,axIndex);
 
     %-get trace data-%
     xData = plotData.XData;
     yData = plotData.YData;
     zData = plotData.ZData;
 
-    if isvector(xData), [xData, yData] = meshgrid(xData, yData); end
+    if isvector(xData)
+        [xData, yData] = meshgrid(xData, yData);
+    end
 
     if strcmpi(plotData.AutoScale, 'on')
         scaleFactor = getScaleFactor(xData, plotData.UData, 45);
@@ -27,9 +29,9 @@
     isQuiver3D = ~isempty(zData);
 
     %-update axis-%
-    if isQuiver3D, updateScene(obj, dataIndex); end
-
-    %---------------------------------------------------------------------%
+    if isQuiver3D
+        updateScene(obj, dataIndex);
+    end
 
     %-set trace-%
     if isQuiver3D
@@ -41,43 +43,37 @@
         obj.data{dataIndex}.yaxis = sprintf('y%d', xSource);
     end
 
-    obj.data{dataIndex}.mode = 'lines'; 
+    obj.data{dataIndex}.mode = 'lines';
     obj.data{dataIndex}.visible = strcmp(plotData.Visible,'on');
     obj.data{dataIndex}.name = plotData.DisplayName;
 
-    %---------------------------------------------------------------------%
-
     %-quiver line color-%
-    lineColor = 255 * plotData.Color; 
+    lineColor = round(255*plotData.Color);
     obj.data{dataIndex}.line.color = getStringColor(lineColor);
 
     %-quiver line width-%
     obj.data{dataIndex}.line.width = 2.5 * plotData.LineWidth;
 
-    %---------------------------------------------------------------------%
-    
     %-set trace data for quiver line only-%
-    m = 1; 
+    m = 1;
 
     for n = 1:numel(xData)
-        obj.data{dataIndex}.x(m) = xData(n); 
+        obj.data{dataIndex}.x(m) = xData(n);
         obj.data{dataIndex}.x(m+1) = xData(n) + uData(n);
-        obj.data{dataIndex}.x(m+2) = nan; 
+        obj.data{dataIndex}.x(m+2) = nan;
 
-        obj.data{dataIndex}.y(m) = yData(n); 
+        obj.data{dataIndex}.y(m) = yData(n);
         obj.data{dataIndex}.y(m+1) = yData(n) + vData(n);
         obj.data{dataIndex}.y(m+2) = nan;
 
         if isQuiver3D
-            obj.data{dataIndex}.z(m) = zData(n); 
+            obj.data{dataIndex}.z(m) = zData(n);
             obj.data{dataIndex}.z(m+1) = zData(n) + wData(n);
-            obj.data{dataIndex}.z(m+2) = nan; 
+            obj.data{dataIndex}.z(m+2) = nan;
         end
         m = m + 3;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set trace data for quiver barb-%
     if isHG2() && strcmp(plotData.ShowArrowHead, 'on')
         maxHeadSize = plotData.MaxHeadSize * 1.5;
@@ -106,20 +102,13 @@
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-set trace legend-%
-    leg = plotData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showLeg = true;
-        case 'off'
-            showLeg = false;
+    switch plotData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{dataIndex}.showlegend = true;
+        case "off"
+            obj.data{dataIndex}.showlegend = false;
     end
-
-    obj.data{dataIndex}.showlegend = showLeg;
 end
 
 function updateScene(obj, dataIndex)
@@ -127,30 +116,27 @@ function updateScene(obj, dataIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
     axisData = plotData.Parent;
-    [xSource, ~] = findSourceAxis(obj, axIndex);
+    xSource = findSourceAxis(obj, axIndex);
     scene = obj.layout.("scene" + xSource);
 
-    position = axisData.Position;
     aspectRatio = axisData.PlotBoxAspectRatio;
     cameraPosition = axisData.CameraPosition;
     dataAspectRatio = axisData.DataAspectRatio;
     cameraUpVector = axisData.CameraUpVector;
     cameraEye = cameraPosition./dataAspectRatio;
     normFac = abs(min(cameraEye));
-    
-    try
+
+    if isprop(axisData, "Layout") && isprop(axisData.Layout, "TileSpan")
         fac = size(axisData.Layout.TileSpan, 2);
-    catch
+    else
         fac = 1;
     end
 
-    r1 = range([ 1, prod(aspectRatio([1,2])) ]);
-    r2 = range([ 1, prod(aspectRatio([1,3])) ]);
-    r3 = range([ 1, prod(aspectRatio([2,3])) ]);
+    r1 = rangeLength([ 1, prod(aspectRatio([1,2])) ]);
+    r2 = rangeLength([ 1, prod(aspectRatio([1,3])) ]);
+    r3 = rangeLength([ 1, prod(aspectRatio([2,3])) ]);
     r = max([r1, r2, r3]);
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     scene.aspectratio.x = 1.0*aspectRatio(1);
     scene.aspectratio.y = 1.0*aspectRatio(2);
@@ -162,27 +148,25 @@ function updateScene(obj, dataIndex)
     scene.camera.eye.z = cameraEye(3) / normFac * (1.4 + r * fac);
 
     %-camera up-%
-    scene.camera.up.x = cameraUpVector(1); 
+    scene.camera.up.x = cameraUpVector(1);
     scene.camera.up.y = cameraUpVector(2);
     scene.camera.up.z = cameraUpVector(3);
 
     %-camera projection-%
     % scene.camera.projection.type = axisData.Projection;
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
     rangeFac = 0.0;
 
-    xRange = range(axisData.XLim);
+    xRange = rangeLength(axisData.XLim);
     scene.xaxis.range(1) = axisData.XLim(1) - rangeFac * xRange;
     scene.xaxis.range(2) = axisData.XLim(2) + rangeFac * xRange;
 
-    yRange = range(axisData.YLim);
+    yRange = rangeLength(axisData.YLim);
     scene.yaxis.range(1) = axisData.YLim(1) - rangeFac * yRange;
     scene.yaxis.range(2) = axisData.YLim(2) + rangeFac * yRange;
 
-    zRange = range(axisData.ZLim);
+    zRange = rangeLength(axisData.ZLim);
     scene.zaxis.range(1) = axisData.ZLim(1) - rangeFac * zRange;
     scene.zaxis.range(2) = axisData.ZLim(2) + rangeFac * zRange;
 
@@ -221,14 +205,18 @@ function updateScene(obj, dataIndex)
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
     %-grid-%
-    if strcmp(axisData.XGrid, 'off'), scene.xaxis.showgrid = false; end
-    if strcmp(axisData.YGrid, 'off'), scene.yaxis.showgrid = false; end
-    if strcmp(axisData.ZGrid, 'off'), scene.zaxis.showgrid = false; end
-
-    %---------------------------------------------------------------------%
+    if strcmp(axisData.XGrid, 'off')
+        scene.xaxis.showgrid = false;
+    end
+    if strcmp(axisData.YGrid, 'off')
+        scene.yaxis.showgrid = false;
+    end
+    if strcmp(axisData.ZGrid, 'off')
+        scene.zaxis.showgrid = false;
+    end
 
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xSource), scene);
+    obj.layout.("scene" + xsource) = scene;
 end
 
 function quiverBarb = getQuiverBarb2D(...
@@ -250,8 +238,6 @@ function updateScene(obj, dataIndex)
     yHead = yData + vData;
     head = [xHead; yHead];
 
-    %---------------------------------------------------------------------%
-
     quiverBarb = getBarb2D(head, refAngle, refLen, maxHeadSize, headWidth);
 end
 
@@ -310,8 +296,6 @@ function updateScene(obj, dataIndex)
     zHead = zData + wData;
     head = [xHead; yHead; zHead];
 
-    %---------------------------------------------------------------------%
-
     xBarb = getBarb3D(head, refAngle, refLen, maxHeadSize, headWidth, 'x');
     yBarb = getBarb3D(head, refAngle, refLen, maxHeadSize, headWidth, 'y');
     zBarb = getBarb3D(head, refAngle, refLen, maxHeadSize, headWidth, 'z');
@@ -359,7 +343,7 @@ function updateScene(obj, dataIndex)
                     0, cos(phi) , sin(phi) , 0; ...
                     0, -sin(phi), cos(phi) , 0; ...
                     0, 0        , 0        , 1  ...
-                    
+
                 ]...
             );
 
@@ -392,7 +376,3 @@ function updateScene(obj, dataIndex)
 
     scaleFactor = 0.8 * xStep/uStep;
 end
-
-function stringColor = getStringColor(numColor)
-    stringColor = sprintf('rgb(%f,%f,%f)', numColor);
-end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateQuivergroup.m b/plotly/plotlyfig_aux/handlegraphics/updateQuivergroup.m
index 96b9a595..44cdd14b 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateQuivergroup.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateQuivergroup.m
@@ -11,7 +11,7 @@
     for n = 1:2;
         %-update line -%
         obj.State.Plot(quiverIndex).Handle = quiver_child(n);
-        updateLineseries(obj,quiverIndex);
+        obj.data{quiverIndex} = updateLineseries(obj,quiverIndex);
 
         %update xdata and ydata
         xdata = [xdata obj.data{quiverIndex}.x];
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateRectangle.m b/plotly/plotlyfig_aux/handlegraphics/updateRectangle.m
index 3d422d15..2641f072 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateRectangle.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateRectangle.m
@@ -1,6 +1,5 @@
 function obj = updateRectangle(obj, rectIndex)
     %----RECTANGLE FIELDS----%
-
     % x - [DONE]
     % y - [DONE]
     % mode - [DONE]
@@ -36,39 +35,21 @@
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
-    %-rectangle xaxis and yaxis-%
     obj.data{rectIndex}.xaxis = "x" + xsource;
     obj.data{rectIndex}.yaxis = "y" + ysource;
-
-    %---------------------------------------------------------------------%
-
-    %-rectangle type-%
     obj.data{rectIndex}.type = 'scatter';
 
-    %---------------------------------------------------------------------%
-
-    %-rectangle x-%
     obj.data{rectIndex}.x = [rect_data.Position(1) rect_data.Position(1) ...
         rect_data.Position(1) + rect_data.Position(3) ...
         rect_data.Position(1) + rect_data.Position(3) ...
         rect_data.Position(1)];
 
-    %---------------------------------------------------------------------%
-
-    %-rectangle y-%
-    obj.data{rectIndex}.y = [rect_data.Position(2) rect_data.Position(2) + rect_data.Position(4) ...
+    obj.data{rectIndex}.y = [rect_data.Position(2) ...
+        rect_data.Position(2) + rect_data.Position(4) ...
         rect_data.Position(2) + rect_data.Position(4) ...
         rect_data.Position(2) ...
         rect_data.Position(2)];
 
-    %---------------------------------------------------------------------%
-
     obj.data{rectIndex}.name = rect_data.DisplayName;
     obj.data{rectIndex}.mode = 'lines';
     obj.data{rectIndex}.visible = strcmp(rect_data.Visible,'on');
@@ -77,18 +58,10 @@
     fill = extractPatchFace(rect_data);
     obj.data{rectIndex}.fillcolor = fill.color;
 
-    %---------------------------------------------------------------------%
-
-    %-rectangle showlegend-%
-    leg = rect_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch rect_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{rectIndex}.showlegend = true;
+        case "off"
+            obj.data{rectIndex}.showlegend = false;
     end
-
-    obj.data{rectIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateScatter.m b/plotly/plotlyfig_aux/handlegraphics/updateScatter.m
index b67987c0..c8fe5737 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateScatter.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateScatter.m
@@ -1,76 +1,48 @@
-function updateScatter(obj,plotIndex)
-    %-INITIALIZATIONS-%
+function data = updateScatter(obj,plotIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     [xSource, ySource] = findSourceAxis(obj,axIndex);
     plotData = obj.State.Plot(plotIndex).Handle;
 
-    %-check is 3D scatter-%
-    try
-        isScatter3D = isfield(plotData, "ZData");
-        isScatter3D = isScatter3D & ~isempty(plotData.ZData);
-    catch
-        isScatter3D = false;
-    end
-
-    %---------------------------------------------------------------------%
+    data.mode = "markers";
+    data.visible = plotData.Visible == "on";
+    data.name = plotData.DisplayName;
+    data.marker = extractScatterMarker(plotData);
+    [data.x, data.y] = getTraceData2D(plotData);
 
-    %-set trace-%
+    isScatter3D = isprop(plotData,"ZData") && ~isempty(plotData.ZData);
     if ~isScatter3D
-        obj.data{plotIndex}.type = "scatter";
-        obj.data{plotIndex}.xaxis = "x" + xSource;
-        obj.data{plotIndex}.yaxis = "y" + ySource;
+        data.type = "scatter";
+        data.xaxis = "x" + xSource;
+        data.yaxis = "y" + ySource;
         updateCategoricalAxis(obj, plotIndex);
     else
-        obj.data{plotIndex}.type = "scatter3d";
-        obj.data{plotIndex}.scene = "scene" + xSource;
-
+        data.type = "scatter3d";
+        data.scene = "scene" + xSource;
         updateScene(obj, plotIndex);
+        data.z = plotData.ZData;
+        data.marker.size = 2*data.marker.size;
     end
 
-    obj.data{plotIndex}.mode = "markers";
-    obj.data{plotIndex}.visible = strcmp(plotData.Visible, "on");
-    obj.data{plotIndex}.name = plotData.DisplayName;
-
-    %---------------------------------------------------------------------%
-
-    %-set trace data-%
-    [xData, yData] = getTraceData2D(plotData);
-    obj.data{plotIndex}.x = xData;
-    obj.data{plotIndex}.y = yData;
-
-    isSingle = isscalar(obj.data{plotIndex}.x);
-    if isSingle % fix single point plots
-        obj.data{plotIndex}.x = repelem(obj.data{plotIndex}.x,1,2);
-        obj.data{plotIndex}.y = repelem(obj.data{plotIndex}.y,1,2);
-    end
-
-    if isScatter3D
-        obj.data{plotIndex}.z = plotData.ZData;
-        if isSingle
-            obj.data{plotIndex}.z = repelem(obj.data{plotIndex}.z,1,2);
+    dataTipRows = plotData.DataTipTemplate.DataTipRows;
+    dataTipRows = dataTipRows(~ismember({dataTipRows.Label},["Size" "Color" "X" "Y" "Z"]));
+    if numel(dataTipRows) > 0
+        customLabel = "";
+        for i = 1:numel(dataTipRows)
+            dataTipRow = dataTipRows(i);
+            customLabel = customLabel + arrayfun(@(value) string(dataTipRow.Label) + ": " + string(value) + "<br>", dataTipRow.Value);
         end
+        data.hovertext = "X: " + data.x + "<br>" + "Y: " + data.y + "<br>" + customLabel;
+        data.hoverinfo = "text";
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set trace marker-%
-    obj.data{plotIndex}.marker = extractScatterMarker(plotData);
-
-    if isScatter3D
-        markerSize = obj.data{plotIndex}.marker.size;
-        obj.data{plotIndex}.marker.size = 2*markerSize;
-    end
-
-    %-set trace legend-%
-    obj.data{plotIndex}.showlegend = getShowLegend(plotData);
+    data.showlegend = getShowLegend(plotData);
 end
 
 function updateScene(obj, dataIndex)
-    %-INITIALIZATIONS-%
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
     axisData = plotData.Parent;
-    [xSource, ~] = findSourceAxis(obj, axIndex);
+    xSource = findSourceAxis(obj, axIndex);
     scene = obj.layout.("scene" + xSource);
 
     aspectRatio = axisData.PlotBoxAspectRatio;
@@ -83,8 +55,6 @@ function updateScene(obj, dataIndex)
     normFac = abs(min(cameraEye));
     normFac = normFac / (max(aspectRatio)/min(aspectRatio) + cameraOffset);
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     scene.aspectratio.x = 1.0*aspectRatio(1);
     scene.aspectratio.y = 1.0*aspectRatio(2);
@@ -100,8 +70,6 @@ function updateScene(obj, dataIndex)
     scene.camera.up.y = cameraUpVector(2);
     scene.camera.up.z = cameraUpVector(3);
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
     scene.xaxis.range = axisData.XLim;
     scene.yaxis.range = axisData.YLim;
@@ -138,7 +106,6 @@ function updateScene(obj, dataIndex)
     if isduration(xTick) || isdatetime(xTick)
         xTickChar = char(xTick);
         xTickLabel = axisData.XTickLabel;
-
         for n = 1:length(xTickLabel)
             for m = 1:size(xTickChar, 1)
                 if ~isempty(strfind(string(xTickChar(m, :)), xTickLabel{n}))
@@ -153,7 +120,6 @@ function updateScene(obj, dataIndex)
     if isduration(yTick) || isdatetime(yTick)
         yTickChar = char(yTick);
         yTickLabel = axisData.YTickLabel;
-
         for n = 1:length(yTickLabel)
             for m = 1:size(yTickChar, 1)
                 if ~isempty(strfind(string(yTickChar(m, :)), yTickLabel{n}))
@@ -208,10 +174,7 @@ function updateScene(obj, dataIndex)
         scene.zaxis.showgrid = false;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf("scene%d", xSource), scene);
+    obj.layout.(sprintf("scene%d", xSource)) = scene;
 end
 
 function updateCategoricalAxis(obj, plotIndex)
@@ -286,10 +249,8 @@ function updateCategoricalAxis(obj, plotIndex)
 
 function jitWeight = getJitWeight(jitData, refData)
     jitUnique = sort(unique(jitData), "ascend");
-
     for n = 1:length(jitUnique)
         jitInd = find(jitData == jitUnique(n));
-
         if length(jitInd) > 1
             refDataN = refData(jitInd);
             stdData(n) = std(refDataN(~isnan(refDataN)));
@@ -305,14 +266,13 @@ function updateCategoricalAxis(obj, plotIndex)
         refPoints = linspace(min(refData), max(refData), 2*length(refData));
         [densityData, refPoints] = ksdensity(refData, refPoints);
         densityData = jitWeight * rescale(densityData, 0, 1);
-
         for n = 1:length(refData)
             [~, refInd] = min(abs(refPoints - refData(n)));
             jitData(n) = jitData(n) * densityData(refInd);
         end
     elseif strcmp(jitType, "rand")
         jitData = jitWeight * jitData;
-    elseif strcmp(jitType, "rand")
+    elseif strcmp(jitType, "randn")
         jitData = jitWeight * rescale(randn(size(refData)), -0.5, 0.5);
     end
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateScatterPolar.m b/plotly/plotlyfig_aux/handlegraphics/updateScatterPolar.m
index 15827ca5..fe5f55eb 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateScatterPolar.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateScatterPolar.m
@@ -6,13 +6,11 @@ function updateScatterPolar(obj, plotIndex)
     plotData = obj.State.Plot(plotIndex).Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
+    xsource = findSourceAxis(obj, axIndex);
 
     %-ASSOCIATE POLAR-AXES LAYOUT-%
     obj.data{plotIndex}.subplot = sprintf('polar%d', xsource+1);
 
-    %---------------------------------------------------------------------%
-
     %-parse plot data-%
     rData = plotData.RData;
     thetaData = rad2deg(plotData.ThetaData);
@@ -20,28 +18,22 @@ function updateScatterPolar(obj, plotIndex)
     thetaData(rData<0) = mod(thetaData(rData<0)+180, 360);
     rData = abs(rData);
 
-    %---------------------------------------------------------------------%
-
     %-scatterpolar trace setting-%
     obj.data{plotIndex}.type = 'scatterpolar';
     obj.data{plotIndex}.mode = 'markers';
     obj.data{plotIndex}.visible = strcmp(plotData.Visible,'on');
     obj.data{plotIndex}.name = plotData.DisplayName;
 
-    %---------------------------------------------------------------------%
-
     %-set scatterpolar data-%
     obj.data{plotIndex}.r = rData;
     obj.data{plotIndex}.theta = thetaData;
 
-    %---------------------------------------------------------------------%
-
     %-trace settings-%
     markerStruct = extractScatterMarker(plotData);
 
     obj.data{plotIndex}.marker = markerStruct;
 
-    if length(markerStruct.size) == 1
+    if isscalar(markerStruct.size)
         obj.data{plotIndex}.marker.size = markerStruct.size * 0.2;
     end
 
@@ -49,21 +41,14 @@ function updateScatterPolar(obj, plotIndex)
         obj.data{plotIndex}.marker.line.color = markerStruct.line.color{1};
     end
 
-    %---------------------------------------------------------------------%
-
     %-legend setting-%
-    leg = plotData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
+    switch plotData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
             obj.data{plotIndex}.showlegend = true;
-        case 'off'
+        case "off"
             obj.data{plotIndex}.showlegend = false;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set polar axes-%
     updatePolaraxes(obj, plotIndex);
 end
@@ -75,23 +60,18 @@ function updateScatterPolar(obj, plotIndex)
 %-------------------------------------------------------------------------%
 
 function updatePolaraxes(obj, plotIndex)
-
-    %---------------------------------------------------------------------%
-
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
-        
+    xsource = findSourceAxis(obj, axIndex);
+
     %-GET DATA STRUCTURES-%
     plotData = obj.State.Plot(plotIndex).Handle;
     axisData = plotData.Parent;
     thetaAxis = axisData.ThetaAxis;
     rAxis = axisData.RAxis;
 
-    %---------------------------------------------------------------------%
-
     %-set domain plot-%
     xo = axisData.Position(1);
     yo = axisData.Position(2);
@@ -101,14 +81,11 @@ function updatePolaraxes(obj, plotIndex)
     polarAxis.domain.x = min([xo xo + w], 1);
     polarAxis.domain.y = min([yo yo + h], 1);
 
-    %---------------------------------------------------------------------%
-        
     %-setting angular axis-%
-    gridColor = sprintf("rgba(%d,%d,%d,%f)", ...
-            [round(255*axisData.GridColor) axisData.GridAlpha]);
+    gridColor = getStringColor(round(255*axisData.GridColor), axisData.GridAlpha);
     gridWidth = axisData.LineWidth;
     thetaLim = thetaAxis.Limits;
-    
+
     polarAxis.angularaxis.linecolor = gridColor;
     polarAxis.angularaxis.ticklen = mean(thetaAxis.TickLength);
 
@@ -123,8 +100,6 @@ function updatePolaraxes(obj, plotIndex)
         polarAxis.angularaxis.gridcolor = gridColor;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set angular axis label-%
     thetaLabel = thetaAxis.Label;
 
@@ -132,11 +107,9 @@ function updatePolaraxes(obj, plotIndex)
     polarAxis.radialaxis.title.font.family = matlab2plotlyfont(...
             thetaLabel.FontName);
     polarAxis.radialaxis.title.font.size = thetaLabel.FontSize;
-    polarAxis.radialaxis.title.font.color = sprintf("rgb(%d,%d,%d)", ...
+    polarAxis.radialaxis.title.font.color = getStringColor( ...
             round(255*thetaLabel.Color));
 
-    %---------------------------------------------------------------------%
-        
     %-setting radial axis-%
     rLim = rAxis.Limits;
 
@@ -156,8 +129,6 @@ function updatePolaraxes(obj, plotIndex)
         polarAxis.radialaxis.gridcolor = gridColor;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set radial axis label-%
     rLabel = thetaAxis.Label;
 
@@ -165,25 +136,19 @@ function updatePolaraxes(obj, plotIndex)
     polarAxis.angularaxis.title.font.family = matlab2plotlyfont(...
             rLabel.FontName);
     polarAxis.angularaxis.title.font.size = rLabel.FontSize;
-    polarAxis.angularaxis.title.font.color = sprintf("rgb(%d,%d,%d)", ...
+    polarAxis.angularaxis.title.font.color = getStringColor( ...
             round(255*rLabel.Color));
 
-    %---------------------------------------------------------------------%
-
     %-angular tick labels settings-%
-    tickValues = axisData.ThetaTick; 
+    tickValues = axisData.ThetaTick;
     tickLabels = axisData.ThetaTickLabel;
     showTickLabels = true;
 
-    try
-        if tickValues(1) == 0 && tickValues(end) == 360
-            tickValues = tickValues(1:end-1);
-        end
-    catch
-        tickValues = tickValues;
+    if ~isempty(tickValues) && tickValues(1) == 0 && tickValues(end) == 360
+        tickValues = tickValues(1:end-1);
     end
 
-    if isempty(tickValues) 
+    if isempty(tickValues)
         showTickLabels = false;
         polarAxis.angularaxis.showticklabels = showTickLabels;
         polarAxis.angularaxis.ticks = '';
@@ -194,7 +159,6 @@ function updatePolaraxes(obj, plotIndex)
     else
         polarAxis.angularaxis.tickvals = tickValues;
         polarAxis.angularaxis.ticktext = tickLabels;
-
     end
 
     if showTickLabels
@@ -209,19 +173,16 @@ function updatePolaraxes(obj, plotIndex)
         polarAxis.angularaxis.tickfont.family = matlab2plotlyfont(...
                 thetaAxis.FontName);
         polarAxis.angularaxis.tickfont.size = thetaAxis.FontSize;
-        polarAxis.angularaxis.tickfont.color = sprintf("rgb(%d,%d,%d)", ...
-                round(255*thetaAxis.Color));
+        polarAxis.angularaxis.tickfont.color = getStringColor(round(255*thetaAxis.Color));
     end
 
 
-    %---------------------------------------------------------------------%
-
     %-radial tick labels settings-%
     tickValues = axisData.RTick;
     tickLabels = axisData.RTickLabel;
     showTickLabels = true;
 
-    if isempty(tickValues) 
+    if isempty(tickValues)
         showTickLabels = false;
         polarAxis.radialaxis.showticklabels = showTickLabels;
         polarAxis.radialaxis.ticks = '';
@@ -246,12 +207,8 @@ function updatePolaraxes(obj, plotIndex)
         polarAxis.radialaxis.tickfont.family = matlab2plotlyfont(...
                 rAxis.FontName);
         polarAxis.radialaxis.tickfont.size = rAxis.FontSize;
-        polarAxis.radialaxis.tickfont.color = sprintf("rgb(%d,%d,%d)", ...
-                round(255*rAxis.Color));
+        polarAxis.radialaxis.tickfont.color = getStringColor(round(255*rAxis.Color));
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set polaraxes to layout-%
-    obj.layout = setfield(obj.layout, sprintf('polar%d', xsource+1), polarAxis);
+    obj.layout.(sprintf('polar%d', xsource+1)) = polarAxis;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateScattergroup.m b/plotly/plotlyfig_aux/handlegraphics/updateScattergroup.m
index 8b713c4d..69000056 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateScattergroup.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateScattergroup.m
@@ -2,7 +2,6 @@ function updateScattergroup(obj,scatterIndex)
     %check: http://undocumentedmatlab.com/blog/undocumented-scatter-plot-behavior
 
     %----SCATTER FIELDS----%
-
     % x - [DONE]
     % y - [DONE]
     % r - [HANDLED BY SCATTER]
@@ -65,41 +64,24 @@ function updateScattergroup(obj,scatterIndex)
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
-    %-scatter xaxis and yaxis-%
     obj.data{scatterIndex}.xaxis = "x" + xsource;
     obj.data{scatterIndex}.yaxis = "y" + ysource;
 
-    %---------------------------------------------------------------------%
-
-    %-scatter type-%
     if any(nonzeros(scatter_data.ZData))
         obj.data{scatterIndex}.type = 'scatter3d';
     else
         obj.data{scatterIndex}.type = 'scatter';
     end
 
-    %---------------------------------------------------------------------%
-
     obj.data{scatterIndex}.mode = 'markers';
     obj.data{scatterIndex}.visible = strcmp(scatter_data.Visible,'on');
     obj.data{scatterIndex}.name = scatter_data.DisplayName;
 
-    %---------------------------------------------------------------------%
-
     %-scatter patch data-%
     for m = 1:length(scatter_child_data)
-
         %reverse counter
         n = length(scatter_child_data) - m + 1;
 
-        %-----------------------------------------------------------------%
-
         %-scatter x-%
         if length(scatter_child_data) > 1
             obj.data{scatterIndex}.x(m) = scatter_child_data(n).XData;
@@ -107,8 +89,6 @@ function updateScattergroup(obj,scatterIndex)
             obj.data{scatterIndex}.x = scatter_child_data.XData;
         end
 
-        %-----------------------------------------------------------------%
-
         %-scatter y-%
         if length(scatter_child_data) > 1
             obj.data{scatterIndex}.y(m) = scatter_child_data(n).YData;
@@ -116,8 +96,6 @@ function updateScattergroup(obj,scatterIndex)
             obj.data{scatterIndex}.y = scatter_child_data.YData;
         end
 
-        %-----------------------------------------------------------------%
-
         %-scatter z-%
         if any(nonzeros(scatter_data.ZData))
             if length(scatter_child_data) > 1
@@ -127,28 +105,16 @@ function updateScattergroup(obj,scatterIndex)
             end
         end
 
-        %-----------------------------------------------------------------%
-
-        %-scatter showlegend-%
-        leg = scatter_data.Annotation;
-        legInfo = leg.LegendInformation;
-
-        switch legInfo.IconDisplayStyle
-            case 'on'
-                showleg = true;
-            case 'off'
-                showleg = false;
+        switch scatter_data.Annotation.LegendInformation.IconDisplayStyle
+            case "on"
+                obj.data{scatterIndex}.showlegend = true;
+            case "off"
+                obj.data{scatterIndex}.showlegend = false;
         end
 
-        obj.data{scatterIndex}.showlegend = showleg;
-
-        %-----------------------------------------------------------------%
-
         %-scatter marker-%
         childmarker = extractPatchMarker(scatter_child_data(n));
 
-        %-----------------------------------------------------------------%
-
         %-line color-%
         if length(scatter_child_data) > 1
             if iscell(childmarker.line.color)
@@ -160,8 +126,6 @@ function updateScattergroup(obj,scatterIndex)
             obj.data{scatterIndex}.marker.line.color = childmarker.line.color;
         end
 
-        %-----------------------------------------------------------------%
-
         %-marker color-%
         if length(scatter_child_data) > 1
             if iscell(childmarker.color)
@@ -173,14 +137,10 @@ function updateScattergroup(obj,scatterIndex)
             obj.data{scatterIndex}.marker.color = childmarker.color;
         end
 
-        %-----------------------------------------------------------------%
-
         obj.data{scatterIndex}.marker.sizeref = childmarker.sizeref;
         obj.data{scatterIndex}.marker.sizemode = childmarker.sizemode;
         obj.data{scatterIndex}.marker.symbol{m} = childmarker.symbol;
 
-        %-----------------------------------------------------------------%
-
         %-size-%
         if length(scatter_child_data) > 1 || ischar(childmarker.color)
             obj.data{scatterIndex}.marker.size(m) = childmarker.size;
@@ -188,10 +148,7 @@ function updateScattergroup(obj,scatterIndex)
             obj.data{scatterIndex}.marker.size(1:length(childmarker.color)) = childmarker.size;
         end
 
-        %-----------------------------------------------------------------%
-
         %-line width-%
-
         if length(scatter_child_data) > 1 || ischar(childmarker.line.color)
             obj.data{scatterIndex}.marker.line.width(m) = childmarker.line.width;
         else
@@ -199,4 +156,3 @@ function updateScattergroup(obj,scatterIndex)
         end
     end
 end
-
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateScatterhistogram.m b/plotly/plotlyfig_aux/handlegraphics/updateScatterhistogram.m
index ee205067..bd64e436 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateScatterhistogram.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateScatterhistogram.m
@@ -3,12 +3,9 @@ function updateScatterhistogram(obj, plotIndex)
 
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
-    [xsource, ysource, xoverlay, yoverlay] = findSourceAxis(obj,axIndex);
 
     [~, ~, groupName] = getTraceData(plotData);
 
-    %---------------------------------------------------------------------%
-
     %-SET MAIN SCATTER PLOT-%
 
     %-set plotly layout-%
@@ -21,8 +18,6 @@ function updateScatterhistogram(obj, plotIndex)
     %-set plotly data-%
     updateMainScatter(obj, plotIndex);
 
-    %---------------------------------------------------------------------%
-
     %-SET MARGINAL PLOTS-%
 
     %-set plotly layout-%
@@ -50,22 +45,16 @@ function updateMainScatter(obj, plotIndex)
     %-get trace data-%
     traceIndex = plotIndex;
     [xData, yData, groupName] = getTraceData(plotData);
-    
-    %---------------------------------------------------------------------%
 
-    %-SET EACH ALL TRACES-%
+    %-SET ALL TRACES-%
 
     for t = 1:length(xData)
-
-        %-----------------------------------------------------------------%
         %-get current trace index-%
         if t > 1
             obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
             traceIndex = obj.PlotOptions.nPlots;
         end
 
-        %-----------------------------------------------------------------%
-
         %-set current trace-%
         obj.data{traceIndex}.type = 'scatter';
         obj.data{traceIndex}.mode = 'markers';
@@ -73,27 +62,21 @@ function updateMainScatter(obj, plotIndex)
         obj.data{traceIndex}.yaxis = sprintf('y%d', ySource);
         obj.data{traceIndex}.visible = strcmp(plotData.Visible,'on');
 
-        %-----------------------------------------------------------------%
-
         %-set current trace data-%
         obj.data{traceIndex}.x = xData{t};
         obj.data{traceIndex}.y = yData{t};
 
-        %-----------------------------------------------------------------%
-
         %-scatter marker-%
         childmarker = extractScatterhistogramMarker(plotData, t);
         obj.data{traceIndex}.marker = childmarker;
 
         %-legend-%
-
         if ~isempty(groupName)
             try
               obj.data{traceIndex}.name = char(groupName(t));
             catch
               obj.data{traceIndex}.name = char(string(groupName(t)));
             end
-
             obj.data{traceIndex}.legendgroup = obj.data{traceIndex}.name;
             obj.data{traceIndex}.showlegend = true;
         end
@@ -107,15 +90,13 @@ function updateMainScatterAxis(obj, plotIndex)
     plotData = obj.State.Plot(plotIndex).Handle;
     [xSource, ySource] = findSourceAxis(obj,axIndex);
 
-    %-set x axis-%
     xaxis = getMainScatterAxis(plotData, 'X');
     xaxis.anchor = sprintf('y%d', xSource);
-    obj.layout = setfield(obj.layout, sprintf('xaxis%d',xSource), xaxis);
+    obj.layout.(sprintf('xaxis%d', xSource)) = xaxis;
 
-    %-set y axis-%
     yaxis = getMainScatterAxis(plotData, 'Y');
     yaxis.anchor = sprintf('x%d', ySource);
-    obj.layout = setfield(obj.layout, sprintf('yaxis%d',xSource), yaxis);
+    obj.layout.(sprintf('yaxis%d', ySource)) = yaxis;
 end
 
 function ax = getMainScatterAxis(plotData, axName)
@@ -138,17 +119,19 @@ function updateMainScatterAxis(obj, plotIndex)
     ax.zeroline = true;
     ax.showgrid = false;
     ax.mirror = 'ticks';
-    
+
     %-ticks-%
     ax.showticklabels = true;
     ax.ticks = 'inside';
     ax.tickfont.size = 1.2*plotData.FontSize;
     ax.tickcolor = axisColor;
     ax.tickfont.family = matlab2plotlyfont(plotData.FontName);
-    
+
     %-label-%
     ax.title.text = axisLabel;
-    if ~isempty(axisLabel), axisLabel = parseString(axisLabel); end
+    if ~isempty(axisLabel)
+        axisLabel = parseString(axisLabel);
+    end
     ax.title.font.size = 1.2*plotData.FontSize;
     ax.title.font.color = 1.2*axisColor;
     ax.title.font.family = matlab2plotlyfont(plotData.FontName);
@@ -167,38 +150,33 @@ function updateMainScatterAxis(obj, plotIndex)
 
 function updateMarginalHistogram(obj, plotIndex, axName)
     %-INITIALIZATIONS-%
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
-    if strcmp(axName, 'X'), xySource = 1; else, xySource = 2; end
+    if strcmp(axName, 'X')
+        xySource = 1;
+    else
+        xySource = 2;
+    end
     xySource = obj.State.Figure.NumAxes + xySource;
 
     %-get trace data-%
     [xData, yData, groupName] = getTraceData(plotData);
 
-    %---------------------------------------------------------------------%
 
     %-SET ALL TRACES-%
-
     for t = 1:length(xData)
         %-get current trace index-%
         obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
         traceIndex = obj.PlotOptions.nPlots;
 
-        %-----------------------------------------------------------------%
-
         %-set current trace-%
         obj.data{traceIndex}.type = 'histogram';
         obj.data{traceIndex}.xaxis = sprintf('x%d', xySource);
         obj.data{traceIndex}.yaxis = sprintf('y%d', xySource);
 
-        %-----------------------------------------------------------------%
-
         %-set current plot data-%
         obj.data{traceIndex}.x = xData{t};
         obj.data{traceIndex}.y = yData{t};
 
-        %-----------------------------------------------------------------%
-
         %-set other trace properties-%
         traceColor = getStringColor(plotData.Color(t,:), 0.7);
 
@@ -216,8 +194,6 @@ function updateMarginalHistogram(obj, plotIndex, axName)
                 try obj.data{traceIndex}.nbinsy = plotData.NumBins(2,t); end
         end
 
-        %-----------------------------------------------------------------%
-
         %-link legend-%
         if ~isempty(groupName)
             try
@@ -225,7 +201,6 @@ function updateMarginalHistogram(obj, plotIndex, axName)
             catch
                 obj.data{traceIndex}.name = char(string(groupName(t)));
             end
-
             obj.data{traceIndex}.legendgroup = obj.data{traceIndex}.name;
         end
     end
@@ -233,9 +208,12 @@ function updateMarginalHistogram(obj, plotIndex, axName)
 
 function updateMarginalSmooth(obj, plotIndex, axName)
     %-INITIALIZATIONS-%
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
-    if strcmp(axName, 'X'), xySource = 1; else, xySource = 2; end
+    if strcmp(axName, 'X')
+        xySource = 1;
+    else
+        xySource = 2;
+    end
     xySource = obj.State.Figure.NumAxes + xySource;
 
     %-get trace data-%
@@ -243,28 +221,18 @@ function updateMarginalSmooth(obj, plotIndex, axName)
     axisLim = getAxisLim(plotData, axName);
     evalPoints = linspace(axisLim(1), axisLim(2), 500);
 
-    %---------------------------------------------------------------------%
-
     %-SET ALL TRACES-%
-
     for t = 1:length(xData)
-
-        %-----------------------------------------------------------------%
-
         %-get current trace index-%
         obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
         traceIndex = obj.PlotOptions.nPlots;
 
-        %-----------------------------------------------------------------%
-
         %-set current trace-%
         obj.data{traceIndex}.type = 'scatter';
         obj.data{traceIndex}.mode = 'lines';
         obj.data{traceIndex}.xaxis = sprintf('x%d', xySource);
         obj.data{traceIndex}.yaxis = sprintf('y%d', xySource);
 
-        %-----------------------------------------------------------------%
-
         %-get current trace data-%
         if strcmp(axName, 'X')
             [ySmooth, xSmooth] = ksdensity(xData{t}, evalPoints);
@@ -276,8 +244,6 @@ function updateMarginalSmooth(obj, plotIndex, axName)
         obj.data{traceIndex}.x = xSmooth;
         obj.data{traceIndex}.y = ySmooth;
 
-        %-----------------------------------------------------------------%
-
         %-set other trace properties-%
         traceColor = getStringColor(plotData.Color(t,:), 0.7);
         lineStyle = plotData.LineStyle(t);
@@ -287,8 +253,6 @@ function updateMarginalSmooth(obj, plotIndex, axName)
         obj.data{traceIndex}.line.dash = getLineDash(lineStyle);
         obj.data{traceIndex}.showlegend = false;
 
-        %-----------------------------------------------------------------%
-
         %-link legend-%
         if ~isempty(groupName)
             try
@@ -304,24 +268,17 @@ function updateMarginalSmooth(obj, plotIndex, axName)
 
 function updateXMarginalAxis(obj, plotIndex)
     %-INITIALIZATIONS-%
-
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
-    % [xSource, ySource] = findSourceAxis(obj,axIndex);
 
     xySource = obj.State.Figure.NumAxes + 1;
 
-    %---------------------------------------------------------------------%
-
-    %-set x axis-%
     xaxis = getXMarginalAxis(plotData, 'X');
     xaxis.anchor = sprintf('y%d', xySource);
-    obj.layout = setfield(obj.layout, sprintf('xaxis%d',xySource), xaxis);
+    obj.layout.(sprintf('xaxis%d', xySource)) = xaxis;
 
-    %-set y axis-%
     yaxis = getXMarginalAxis(plotData, 'Y');
     yaxis.anchor = sprintf('x%d', xySource);
-    obj.layout = setfield(obj.layout, sprintf('yaxis%d',xySource), yaxis);
+    obj.layout.(sprintf('yaxis%d', xySource)) = yaxis;
 end
 
 function ax = getXMarginalAxis(plotData, axName)
@@ -349,36 +306,33 @@ function updateXMarginalAxis(obj, plotIndex)
         case 'X'
             axisDomain = min([axisPos(1) sum(axisPos([1,3]))], 1);
         case 'Y'
-            if ~isempty(strfind(plotLocation, 'South'))
+            if contains(plotLocation, 'South')
                 yo = axisPos(2) + axisPos(4) + 0.01;
-                if isTitle, h=0.9-yo; else, h = 0.96 - yo; end
-            elseif ~isempty(strfind(plotLocation, 'North'))
+                if isTitle
+                    h=0.9-yo;
+                else
+                    h = 0.96 - yo;
+                end
+            elseif contains(plotLocation, 'North')
                 yo = 0.02; h = axisPos(2)*0.7-yo;
             end
-            axisDomain = min([yo yo+h], 1); 
+            axisDomain = min([yo yo+h], 1);
     end
 end
 
-
-
 function updateYMarginalAxis(obj, plotIndex)
     %-INITIALIZATIONS-%
-
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
-    % [xSource, ySource] = findSourceAxis(obj,axIndex);
 
     xySource = obj.State.Figure.NumAxes + 2;
 
-    %-set x axis-%
     xaxis = getYMarginalAxis(plotData, 'X');
     xaxis.anchor = sprintf('y%d', xySource);
-    obj.layout = setfield(obj.layout, sprintf('xaxis%d',xySource), xaxis);
+    obj.layout.(sprintf('xaxis%d', xySource)) = xaxis;
 
-    %-set y axis-%
     yaxis = getYMarginalAxis(plotData, 'Y');
     yaxis.anchor = sprintf('x%d', xySource);
-    obj.layout = setfield(obj.layout, sprintf('yaxis%d',xySource), yaxis);
+    obj.layout.(sprintf('yaxis%d', xySource)) = yaxis;
 end
 
 function ax = getYMarginalAxis(plotData, axName)
@@ -401,31 +355,18 @@ function updateYMarginalAxis(obj, plotIndex)
     plotLocation = plotData.ScatterPlotLocation;
     switch axName
         case 'X'
-            if ~isempty(strfind(plotLocation, 'West'))
+            if contains(plotLocation, 'West')
                 xo = axisPos(1) + axisPos(3) + 0.01;
                 w = 0.96-xo;
-            elseif ~isempty(strfind(plotLocation, 'East'))
+            elseif contains(plotLocation, 'East')
                 xo = 0.02; w = axisPos(1)*0.7-xo;
             end
-            axisDomain = min([xo xo+w], 1); 
+            axisDomain = min([xo xo+w], 1);
         case 'Y'
             axisDomain = min([axisPos(2) sum(axisPos([2,4]))], 1);
     end
 end
 
-function lineDash = getLineDash(lineStyle)
-    switch lineStyle
-        case '-'
-            lineDash = 'solid';
-        case '--'
-            lineDash = 'dash';
-        case ':'
-            lineDash = 'dot';
-        case '-.'
-            lineDash = 'dashdot';
-    end
-end
-
 function axisLim = getAxisLim(plotData, axName)
     axisLim = plotData.(axName + "Limits");
     axisPlot = plotData.(axName + "Data");
@@ -438,11 +379,15 @@ function updateYMarginalAxis(obj, plotIndex)
 
 function [xData, yData, groupName] = getTraceData(plotData)
     %-parcing data-%
-    xPlot = plotData.XData; 
+    xPlot = plotData.XData;
     yPlot = plotData.YData;
 
-    if iscategorical(xPlot), [~, ~, xPlot] = unique(xPlot); end
-    if iscategorical(yPlot), [~, ~, yPlot] = unique(yPlot); end
+    if iscategorical(xPlot)
+        [~, ~, xPlot] = unique(xPlot);
+    end
+    if iscategorical(yPlot)
+        [~, ~, yPlot] = unique(yPlot);
+    end
 
     xData = {}; yData = {};
     groupData = plotData.GroupData;
@@ -450,14 +395,18 @@ function updateYMarginalAxis(obj, plotIndex)
     groupName = {};
 
     if isByGroups
-        if iscellstr(groupData), groupData = string(groupData); end
+        if iscellstr(groupData)
+            groupData = string(groupData);
+        end
         groupName = unique(groupData,'stable');
         for g = 1:length(groupName)
             groudInd = groupData == groupName(g);
             xData{g} = xPlot(groudInd);
             yData{g} = yPlot(groudInd);
         end
-        if isnumeric(groupName), groupName=num2str(groupName); end;
+        if isnumeric(groupName)
+            groupName=num2str(groupName);
+        end
     else
         xData{1} = xPlot;
         yData{1} = yPlot;
@@ -467,7 +416,7 @@ function updateYMarginalAxis(obj, plotIndex)
 function updateTitle(obj, plotIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
-    [xSource, ~] = findSourceAxis(obj,axIndex);
+    xSource = findSourceAxis(obj,axIndex);
     isTitle = ~isempty(plotData.Title);
 
     obj.layout.annotations{1}.text = plotData.Title;
@@ -485,7 +434,7 @@ function updateTitle(obj, plotIndex)
         obj.layout.annotations{1}.yref = 'paper';
         obj.layout.annotations{1}.yanchor = 'top';
         obj.layout.annotations{1}.xanchor = 'middle';
-        
+
         obj.layout.annotations{1}.font.color = 'black';
         obj.layout.annotations{1}.font.family = titleFamily;
         obj.layout.annotations{1}.font.size = 1.5*plotData.FontSize;
@@ -493,9 +442,7 @@ function updateTitle(obj, plotIndex)
 end
 
 function updateLegend(obj, plotIndex, groupName)
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
-    isTitle = isempty(plotData.Title);
 
     if ~isempty(groupName)
         fontFamily = matlab2plotlyfont(plotData.FontName);
@@ -520,12 +467,12 @@ function updateLegend(obj, plotIndex, groupName)
             obj.layout.legend.title.font.family = fontFamily;
         end
 
-        if ~isempty(strfind(plotLocation, 'SouthWest'))
+        if contains(plotLocation, 'SouthWest')
             obj.layout.legend.x = 0.96;
             obj.layout.legend.y = 0.96;
             obj.layout.legend.xanchor = 'right';
             obj.layout.legend.yanchor = 'top';
-        elseif ~isempty(strfind(plotLocation, 'NorthEast'))
+        elseif contains(plotLocation, 'NorthEast')
             obj.layout.legend.x = 0.02;
             obj.layout.legend.y = 0.02;
             obj.layout.legend.xanchor = 'left';
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateSlice.m b/plotly/plotlyfig_aux/handlegraphics/updateSlice.m
index 402a2784..32461251 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateSlice.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateSlice.m
@@ -3,9 +3,7 @@
 
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
-    axisData = plotData.Parent;
-    figureData = obj.State.Figure.Handle;
-    [xSource, ~] = findSourceAxis(obj,axIndex);
+    xSource = findSourceAxis(obj,axIndex);
 
     %-update scene-%
     updateScene(obj, dataIndex)
@@ -36,12 +34,9 @@
             elseif strcmp(plotData.FaceColor, 'interp')
                 cDataSurf(m2:m2+1,n2:n2+1) = cData(m:m+1,n:n+1);
             end
-
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-set trace-%
     obj.data{dataIndex}.type = 'surface';
     obj.data{dataIndex}.name = plotData.DisplayName;
@@ -49,16 +44,12 @@
     obj.data{dataIndex}.scene = sprintf('scene%d', xSource);
     obj.data{dataIndex}.showscale = false;
     obj.data{dataIndex}.surfacecolor = cDataSurf;
-    
-    %---------------------------------------------------------------------%
 
     %-set trace data-%
     obj.data{dataIndex}.x = xDataSurf;
     obj.data{dataIndex}.y = yDataSurf;
     obj.data{dataIndex}.z = zDataSurf;
 
-    %---------------------------------------------------------------------%
-
     %-update face color-%
     updateSurfaceFaceColor(obj, dataIndex, cDataSurf);
 
@@ -73,7 +64,7 @@ function updateScene(obj, dataIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
     axisData = plotData.Parent;
-    [xSource, ~] = findSourceAxis(obj, axIndex);
+    xSource = findSourceAxis(obj, axIndex);
     scene = obj.layout.("scene" + xSource);
 
     aspectRatio = axisData.PlotBoxAspectRatio;
@@ -83,8 +74,6 @@ function updateScene(obj, dataIndex)
     cameraEye = cameraPosition./dataAspectRatio;
     normFac = 0.625*abs(min(cameraEye));
 
-    %---------------------------------------------------------------------%
-
     %-aspect ratio-%
     scene.aspectratio.x = 1.15*aspectRatio(1);
     scene.aspectratio.y = 1.0*aspectRatio(2);
@@ -96,15 +85,13 @@ function updateScene(obj, dataIndex)
     scene.camera.eye.z = cameraEye(3) / normFac;
 
     %-camera up-%
-    scene.camera.up.x = cameraUpVector(1); 
+    scene.camera.up.x = cameraUpVector(1);
     scene.camera.up.y = cameraUpVector(2);
     scene.camera.up.z = cameraUpVector(3);
 
     %-camera projection-%
     % scene.camera.projection.type = axisData.Projection;
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
     scene.xaxis.range = axisData.XLim;
     scene.yaxis.range = axisData.YLim;
@@ -145,54 +132,50 @@ function updateScene(obj, dataIndex)
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
     %-grid-%
-    if strcmp(axisData.XGrid, 'off'), scene.xaxis.showgrid = false; end
-    if strcmp(axisData.YGrid, 'off'), scene.yaxis.showgrid = false; end
-    if strcmp(axisData.ZGrid, 'off'), scene.zaxis.showgrid = false; end
-
-    %---------------------------------------------------------------------%
+    if strcmp(axisData.XGrid, 'off')
+        scene.xaxis.showgrid = false;
+    end
+    if strcmp(axisData.YGrid, 'off')
+        scene.yaxis.showgrid = false;
+    end
+    if strcmp(axisData.ZGrid, 'off')
+        scene.zaxis.showgrid = false;
+    end
 
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xSource), scene);
+    obj.layout.("scene" + xsource) = scene;
 end
 
 function updateSurfaceEdgeColor(obj, dataIndex)
     %-INITIALIZATIONS-%
 
-    axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
-    axisData = plotData.Parent;
 
     xData = plotData.XData;
     yData = plotData.YData;
     zData = plotData.ZData;
-    cData = plotData.CData;
     edgeColor = plotData.EdgeColor;
-    cData = plotData.CData;
-    cLim = axisData.CLim;
-    colorMap = axisData.Colormap;
 
     xConst = ( xData(:) - min(xData(:)) ) <= 1e-6;
     yConst = ( yData(:) - min(yData(:)) ) <= 1e-6;
 
-    %---------------------------------------------------------------------%
-
     %-edge lines in x direction-%
     xContourSize = mean(diff(xData(1,:)));
-    xContourStard = min(xData(1,:));
-    xContourEnd = max(xData(1,:));    
+    xContourStart = min(xData(1,:));
+    xContourEnd = max(xData(1,:));
 
     obj.data{dataIndex}.contours.x.show = true;
-    obj.data{dataIndex}.contours.x.start = xContourStard;
+    obj.data{dataIndex}.contours.x.start = xContourStart;
     obj.data{dataIndex}.contours.x.end = xContourEnd;
     obj.data{dataIndex}.contours.x.size = xContourSize;
 
     %-edge lines in y direction-%
     yContourSize = mean(diff(yData(:,1)));
-    yContourStard = min(yData(:,1));
+    yContourStart = min(yData(:,1));
     yContourEnd = max(yData(:,1));
-    
+
     obj.data{dataIndex}.contours.y.show = true;
-    obj.data{dataIndex}.contours.y.start = yContourStard;
+    obj.data{dataIndex}.contours.y.start = yContourStart;
     obj.data{dataIndex}.contours.y.end = yContourEnd;
     obj.data{dataIndex}.contours.y.size = yContourSize;
 
@@ -200,20 +183,17 @@ function updateSurfaceEdgeColor(obj, dataIndex)
 
     if all(xConst) || all(yConst)
         zContourSize = mean(diff(zData(1,:)));
-        zContourStard = min(zData(1,:));
+        zContourStart = min(zData(1,:));
         zContourEnd = max(zData(1,:));
 
         obj.data{dataIndex}.contours.z.show = true;
-        obj.data{dataIndex}.contours.z.start = zContourStard;
+        obj.data{dataIndex}.contours.z.start = zContourStart;
         obj.data{dataIndex}.contours.z.end = zContourEnd;
         obj.data{dataIndex}.contours.z.size = zContourSize;
     end
 
-    %---------------------------------------------------------------------%
-
     %-coloring-%
-    numColor = 255 * edgeColor;
-    stringColor = getStringColor(numColor);
+    stringColor = getStringColor(round(255*edgeColor));
 
     obj.data{dataIndex}.contours.x.color = stringColor;
     obj.data{dataIndex}.contours.y.color = stringColor;
@@ -223,7 +203,6 @@ function updateSurfaceEdgeColor(obj, dataIndex)
 function updateSurfaceFaceColor(obj, dataIndex, surfaceColor)
     %-INITIALIZATIONS-%
 
-    axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
     plotData = obj.State.Plot(dataIndex).Handle;
     axisData = plotData.Parent;
 
@@ -233,11 +212,9 @@ function updateSurfaceFaceColor(obj, dataIndex, surfaceColor)
 
     obj.data{dataIndex}.cauto = false;
     obj.data{dataIndex}.autocolorscale = false;
-    
-    %---------------------------------------------------------------------%
 
     if isnumeric(faceColor)
-        numColor = 255 * faceColor;
+        numColor = round(255*faceColor);
         stringColor = getStringColor(numColor);
 
         colorScale{1} = {0, stringColor};
@@ -247,7 +224,7 @@ function updateSurfaceFaceColor(obj, dataIndex, surfaceColor)
         nColors = size(colorMap, 1);
 
         for c = 1:nColors
-            stringColor = getStringColor(255*colorMap(c,:));
+            stringColor = getStringColor(round(255*colorMap(c,:)));
             colorScale{c} = {(c-1)/(nColors-1), stringColor};
         end
 
@@ -258,7 +235,3 @@ function updateSurfaceFaceColor(obj, dataIndex, surfaceColor)
     obj.data{dataIndex}.surfacecolor = surfaceColor;
     obj.data{dataIndex}.colorscale = colorScale;
 end
-
-function stringColor = getStringColor(numColor)
-    stringColor = sprintf('rgb(%f,%f,%f)', numColor);
-end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateSpiderPlot.m b/plotly/plotlyfig_aux/handlegraphics/updateSpiderPlot.m
index 2beea240..b5bf14bd 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateSpiderPlot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateSpiderPlot.m
@@ -16,11 +16,8 @@
         setLegeng(obj, spiderIndex);
     end
 
-    %---------------------------------------------------------------------%
-
     %-set traces-%
     for t = 1:nTraces
-
         %-get plotIndex-%
         obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
         plotIndex = obj.PlotOptions.nPlots;
@@ -64,8 +61,7 @@
                 obj.data{plotIndex}.showlegend = true;
             end
         end
-
-    end    
+    end
 end
 
 function [xData, yData] = getCartesianPoints(plotData, axesStruct, traceIndex)
@@ -93,7 +89,7 @@
         end
         rPoint = rescale(rPoint, 1/nTicks, 1);
 
-        %-convertion-%
+        %-conversion-%
         xData(a) = rPoint(1) * cos(axesAngle(a));
         yData(a) = rPoint(1) * sin(axesAngle(a));
     end
@@ -104,78 +100,27 @@
 end
 
 function lineStruct = getLine(plotData, traceIndex)
-    %-INITIALIZATIONS-%
-    lineStruct = struct();
-
-    %-line color-%
     [lineColor, ~] = getColor(plotData.Color, traceIndex, ...
         plotData.LineTransparency);
-    lineStruct.color = lineColor;
-
-    %-line width-%
-    lineStruct.width = plotData.LineWidth(traceIndex);
-
-    %-line style-%
-    switch plotData.LineStyle{traceIndex, 1}
-        case '-'
-            lineStyle = 'solid';
-        case '--'
-            lineStyle = 'dash';
-        case ':'
-            lineStyle = 'dot';
-        case '-.'
-            lineStyle = 'dashdot';
-    end
-    
-    lineStruct.dash = lineStyle;
+
+    lineStruct = struct( ...
+        "color", lineColor, ...
+        "width", plotData.LineWidth(traceIndex), ...
+        "dash", getLineDash(plotData.LineStyle{traceIndex, 1}) ...
+    );
 end
 
 function markerStruct = getMarker(plotData, traceIndex)
-    %-INITIALIZATIONS-%
     markerStruct = struct();
 
-    %-marker color-%
     [markerColor, ~] = getColor(plotData.Color, traceIndex, ...
         plotData.MarkerTransparency);
     markerStruct.color = markerColor;
     markerStruct.line.color = markerColor;
-
-    %-marker size-%
     markerStruct.size = plotData.MarkerSize(traceIndex, 1) * 0.2;
 
-    %-marker symbol-%
-    if ~strcmp(plotData.Marker{traceIndex, 1}, 'none')
-
-        switch plotData.Marker{traceIndex, 1}
-            case '.'
-                mSymbol = 'circle';
-            case 'o'
-                mSymbol = 'circle';
-            case 'x'
-                mSymbol = 'x-thin-open';
-            case '+'
-                mSymbol = 'cross-thin-open';
-            case '*'
-                mSymbol = 'asterisk-open';
-            case {'s','square'}
-                mSymbol = 'square';
-            case {'d','diamond'}
-                mSymbol = 'diamond';
-            case 'v'
-                mSymbol = 'triangle-down';
-            case '^'
-                mSymbol = 'triangle-up';
-            case '<'
-                mSymbol = 'triangle-left';
-            case '>'
-                mSymbol = 'triangle-right';
-            case {'p','pentagram'}
-                mSymbol = 'star';
-            case {'h','hexagram'}
-                mSymbol = 'hexagram';
-        end
-
-        markerStruct.symbol = mSymbol;
+    if ~strcmp(plotData.Marker{traceIndex, 1}, "none")
+        markerStruct.symbol = getMarkerSymbol(plotData.Marker{traceIndex, 1});
     end
 end
 
@@ -190,16 +135,16 @@ function setAnnotation(obj, axesStruct, spiderIndex)
     axesLabels = plotData.AxesLabels;
     axesLabelsOffset = plotData.AxesLabelsOffset * 0.5;
     axesDisplay = plotData.AxesDisplay;
-    axesLim = plotData.AxesLimits;
     axesFontColor = plotData.AxesFontColor;
     axesPrecision = plotData.AxesPrecision;
     axesLabelsEdge = plotData.AxesLabelsEdge;
 
     nAxes = axesStruct.nAxes;
     axesAngle = axesStruct.axesAngle;
-    tickValues = axesStruct.axesAngle;
     nTicks = axesStruct.nTicks;
-    if strcmp(axesDisplay, 'data'), nTicks = size(plotData.P, 1); end
+    if strcmp(axesDisplay, 'data')
+        nTicks = size(plotData.P, 1);
+    end
 
     labelColor = 'rgb(0,0,0)';
     labelSize = plotData.LabelFontSize;
@@ -209,11 +154,8 @@ function setAnnotation(obj, axesStruct, spiderIndex)
     axesSize = plotData.AxesFontSize;
     axesFamily = matlab2plotlyfont(plotData.AxesFont);
 
-    %---------------------------------------------------------------------%
-
     %-set axes labels-%
     for l = 1:nAxes
-
         %-create annotation-%
         annotations{anIndex}.showarrow = false;
         annotations{anIndex}.xref = sprintf('x%d', xSource);
@@ -225,7 +167,9 @@ function setAnnotation(obj, axesStruct, spiderIndex)
 
         %-text label-%
         textLabel = axesLabels{l};
-        if isempty(textLabel), textLabel = parseString(textLabel, 'tex'); end
+        if isempty(textLabel)
+            textLabel = parseString(textLabel, 'tex');
+        end
 
         annotations{anIndex}.text = textLabel;
 
@@ -264,17 +208,12 @@ function setAnnotation(obj, axesStruct, spiderIndex)
         anIndex = anIndex + 1;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set axes tick labels-%
     for t = 1:nTicks
-
         indexColor = mod(t-1, nAxesFontColor) + 1;
         axesColor = round(255*axesFontColor(indexColor, :));
-        axesColor = sprintf("rgb(%d,%d,%d)", axesColor);
-
+        axesColor = getStringColor(axesColor);
         for a = 1:nAxes
-
             %-create annotation-%
             annotations{anIndex}.showarrow = false;
             annotations{anIndex}.xref = sprintf('x%d', xSource);
@@ -292,7 +231,7 @@ function setAnnotation(obj, axesStruct, spiderIndex)
             if strcmp(axesDisplay, 'data')
                 tickLabel = plotData.P(t, a);
 
-            else                
+            else
                 tickLabel = linspace(axesLim(1), axesLim(2), nTicks);
                 tickLabel = tickLabel(t);
 
@@ -331,7 +270,7 @@ function setAnnotation(obj, axesStruct, spiderIndex)
                     annotations{anIndex}.yanchor = 'bottom';
                 elseif annotations{anIndex}.y < 0
                     annotations{anIndex}.yanchor = 'top';
-                end 
+                end
 
                 if abs(annotations{anIndex}.x) < 1e-3
                     annotations{anIndex}.xanchor = 'middle';
@@ -339,7 +278,7 @@ function setAnnotation(obj, axesStruct, spiderIndex)
                     annotations{anIndex}.xanchor = 'left';
                 elseif annotations{anIndex}.x < 0
                     annotations{anIndex}.xanchor = 'right';
-                end 
+                end
             end
 
             %-font properties-%
@@ -352,23 +291,22 @@ function setAnnotation(obj, axesStruct, spiderIndex)
 
             %-stop according AxesDisplay-%
             if strcmp(axesDisplay, 'one')
-                if a==1, break; end
+                if a==1
+                    break;
+                end
             elseif strcmp(axesDisplay, 'two')
-                if a==2, break; end
+                if a==2
+                    break;
+                end
             elseif strcmp(axesDisplay, 'three')
-                if a==3, break; end
+                if a==3
+                    break;
+                end
             end
         end
-
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set annotations to layout-%
-    obj.layout = setfield(obj.layout, 'annotations', annotations);
-
-    %---------------------------------------------------------------------%
-
+    obj.layout.annotations = annotations;
     obj.PlotlyDefaults.anIndex = anIndex;
 end
 
@@ -378,14 +316,12 @@ function setAnnotation(obj, axesStruct, spiderIndex)
     plotData = obj.State.Plot(spiderIndex).Handle;
     [xSource, ySource] = findSourceAxis(obj, axIndex);
 
-    %---------------------------------------------------------------------%
-
     %-set axes-%
     nAxes = size(plotData.P,2);
     angleStep = 2*pi/nAxes;
     axesAngle = [pi/2];
     plotIndex = spiderIndex;
-    axesColor = sprintf("rgb(%d,%d,%d)", round(255*plotData.AxesColor));
+    axesColor = getStringColor(round(255*plotData.AxesColor));
 
     for a = 1:nAxes
         %-get plotIndex-%
@@ -402,7 +338,7 @@ function setAnnotation(obj, axesStruct, spiderIndex)
         obj.data{plotIndex}.mode = 'lines';
         obj.data{plotIndex}.line.color = axesColor;
         obj.data{plotIndex}.line.width = 1.75;
-        
+
         obj.data{plotIndex}.x = [0, cos(axesAngle(a))];
         obj.data{plotIndex}.y = [0, sin(axesAngle(a))];
 
@@ -419,8 +355,6 @@ function setAnnotation(obj, axesStruct, spiderIndex)
         obj.data{plotIndex}.showlegend = false;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set grid-%
     nTicks = plotData.AxesInterval + 1;
     tickValues = linspace(1/nTicks, 1, nTicks);
@@ -428,7 +362,6 @@ function setAnnotation(obj, axesStruct, spiderIndex)
     yData = sin([axesAngle, axesAngle(1)]);
 
     for g = 1:nTicks
-
         %-get plotIndex-%
         obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
         plotIndex = obj.PlotOptions.nPlots;
@@ -441,17 +374,14 @@ function setAnnotation(obj, axesStruct, spiderIndex)
         obj.data{plotIndex}.mode = 'lines';
         obj.data{plotIndex}.line.color = axesColor;
         obj.data{plotIndex}.line.width = 0.4;
-        
+
         obj.data{plotIndex}.x = tickValues(g)*xData;
         obj.data{plotIndex}.y = tickValues(g)*yData;
 
         %-hide associated trace-%
         obj.data{plotIndex}.showlegend = false;
-
     end
 
-    %---------------------------------------------------------------------%
-
     %-return-%
     axesStruct.axesAngle = axesAngle;
     axesStruct.nAxes = nAxes;
@@ -470,8 +400,6 @@ function updateSpiderLayout(obj, spiderIndex)
     w = plotData.Position(3);
     h = plotData.Position(4);
 
-    %---------------------------------------------------------------------%
-
     %-get x axis-%
     xaxis.domain = min([xo xo + w],1);
     xaxis.range = [-1.5, 1.5];
@@ -480,8 +408,6 @@ function updateSpiderLayout(obj, spiderIndex)
     xaxis.showgrid = false;
     xaxis.showticklabels = false;
 
-    %---------------------------------------------------------------------%
-
     %-get y axis-%
     yaxis.domain = min([yo yo + h],1);
     yaxis.range = [-1.25, 1.25];
@@ -490,24 +416,17 @@ function updateSpiderLayout(obj, spiderIndex)
     yaxis.showgrid = false;
     yaxis.showticklabels = false;
 
-    %---------------------------------------------------------------------%
-
-    %-set axis-%
-    obj.layout = setfield(obj.layout, sprintf('xaxis%d', xSource), xaxis);
-    obj.layout = setfield(obj.layout, sprintf('yaxis%d', ySource), yaxis);
+    obj.layout.(sprintf('xaxis%d', xSource)) = xaxis;
+    obj.layout.(sprintf('yaxis%d', ySource)) = yaxis;
 end
 
 function setLegeng(obj, spiderIndex)
     %-INITIALIZATIONS-%
-    axIndex = obj.getAxisIndex(obj.State.Plot(spiderIndex).AssociatedAxis);
     plotData = obj.State.Plot(spiderIndex).Handle;
-    [xSource, ySource] = findSourceAxis(obj, axIndex);
 
     legData = plotData.LegendHandle;
     obj.layout.showlegend = strcmpi(plotData.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
     %-legend location-%
     obj.layout.legend.x = legData.Position(1);
     obj.layout.legend.y = legData.Position(2);
@@ -516,8 +435,6 @@ function setLegeng(obj, spiderIndex)
     obj.layout.legend.xanchor = 'left';
     obj.layout.legend.yanchor = 'top';
 
-    %---------------------------------------------------------------------%
-
     %-legend settings-%
     if (strcmp(legData.Box, 'on') && strcmp(legData.Visible, 'on'))
         edgeColor = round(255*legData.EdgeColor);
@@ -526,17 +443,17 @@ function setLegeng(obj, spiderIndex)
 
         obj.layout.legend.traceorder = 'normal';
         obj.layout.legend.borderwidth = legData.LineWidth;
-        obj.layout.legend.bordercolor = sprintf("rgb(%d,%d,%d)", edgeColor);
-        obj.layout.legend.bgcolor = sprintf("rgb(%d,%d,%d)", bgColor);
+        obj.layout.legend.bordercolor = getStringColor(edgeColor);
+        obj.layout.legend.bgcolor = getStringColor(bgColor);
         obj.layout.legend.font.size = legData.FontSize;
         obj.layout.legend.font.family = matlab2plotlyfont(legData.FontName);
-        obj.layout.legend.font.color = sprintf("rgb(%d,%d,%d)", textColor);
+        obj.layout.legend.font.color = getStringColor(textColor);
     end
 end
 
 function [strColor, numColor] = getColor(colorMatrix, traceIndex, ...
     colorOpacities)
-    
+
     colorOpacity = 1;
 
     if nargin > 2
@@ -546,12 +463,12 @@ function setLegeng(obj, spiderIndex)
     nColors = size(colorMatrix, 1);
     colorIndex = mod(traceIndex-1, nColors) + 1;
     numColor = round(255*colorMatrix(colorIndex, :));
-    strColor = sprintf("rgba(%d,%d,%d,%f)", numColor, colorOpacity);
+    strColor = getStringColor(numColor, colorOpacity);
 end
 
 function edgeColor = getLabelEdgeColor(axesLabelsEdge)
     if isnumeric(axesLabelsEdge)
-        edgeColor = sprintf("rgb(%d,%d,%d)", round(255*axesLabelsEdge));
+        edgeColor = getStringColor(round(255*axesLabelsEdge));
     elseif strcmp(axesLabelsEdge, "none")
         edgeColor = "rgba(0,0,0,0)";
     else
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateStackedplot.m b/plotly/plotlyfig_aux/handlegraphics/updateStackedplot.m
index 21daec1f..dee07ff6 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateStackedplot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateStackedplot.m
@@ -1,48 +1,36 @@
 function updateStackedplot(obj, plotIndex)
-    %-INITIALIZATIONS-%
-
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
     lineData = plotData.LineProperties(end:-1:1);
-    
-    %-get trace data-%
 
     sourceTable = plotData.SourceTable;
     displayVariables = plotData.DisplayVariables;
     nTraces = length(plotData.AxesProperties);
-    
+
+    yData = cell(1,nTraces);
     if isempty(sourceTable)
         xData = plotData.XData;
         for t = 1:nTraces
             n = nTraces - t + 1;
             yData{t} = plotData.YData(:, n);
         end
-
     else
         if istimetable(sourceTable)
             xData = sourceTable.Properties.RowTimes;
         else
             xData = 1:size(sourceTable, 1);
         end
-
         for t = 1:nTraces
             n = nTraces - t + 1;
             yData{t} = sourceTable.(displayVariables{n});
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-UPDATE STACKEDPLOT AXIS-%
     updateStackedplotAxis(obj, plotIndex)
 
-    %---------------------------------------------------------------------%
-
-    %-SET TRACES-%
     traceIndex = plotIndex;
 
     for t = 1:nTraces
-
         %-update current trace Index-%
         if t ~= 1
             obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
@@ -50,78 +38,64 @@ function updateStackedplot(obj, plotIndex)
         end
 
         %-set current trace-%
-        obj.data{traceIndex}.type = 'scatter';
-        obj.data{traceIndex}.visible = strcmp(plotData.Visible,'on');
-        obj.data{traceIndex}.name = plotData.DisplayLabels{t};
-        obj.data{traceIndex}.xaxis = sprintf('x%d', 1);
-        obj.data{traceIndex}.yaxis = sprintf('y%d', t);
+        data.type = "scatter";
+        data.visible = plotData.Visible == "on";
+        data.name = plotData.DisplayLabels{t};
+        data.xaxis = "x1";
+        data.yaxis = "y" + t;
 
         %-set current trace data-%
-        obj.data{traceIndex}.x = xData;
-        obj.data{traceIndex}.y = yData{t};
+        data.x = xData;
+        data.y = yData{t};
 
         %-set current trace marker-%
         switch lineData(t).PlotType
-            case 'scatter'
+            case "scatter"
                 markerSize = ones(size(xData)) * lineData(t).MarkerSize;
-                obj.data{traceIndex}.mode = 'markers';
-                obj.data{traceIndex}.marker = extractLineMarker(lineData(t));
-                obj.data{traceIndex}.marker.size = markerSize;
-                obj.data{traceIndex}.marker.line.width = 1;
+                data.mode = "markers";
+                data.marker = extractLineMarker(lineData(t));
+                data.marker.size = markerSize;
+                data.marker.line.width = 1;
             otherwise
-                obj.data{traceIndex}.mode = 'lines';
-                obj.data{traceIndex}.line = extractLineLine(lineData(t));
+                data.mode = "lines";
+                data.line = extractLineLine(lineData(t));
         end
-
+        obj.data{traceIndex} = data;
     end
 end
 
 function updateStackedplotAxis(obj, plotIndex)
-    %-INITIALIZATIONS-%
-
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
 
-    %---------------------------------------------------------------------%
-
-    %-SET X-AXIS-%
+    [xaxis, xExpoFormat] = getAxis(obj, plotIndex, "X");
+    obj.layout.xaxis1 = xaxis{1};
 
-    [xaxis, xExpoFormat] = getAxis(obj, plotIndex, 'X');
-    obj.layout = setfield(obj.layout, 'xaxis1', xaxis{1});
-
-    %---------------------------------------------------------------------%
-
-    %-SET Y-AXIS-%
-
-    [yaxis, yExpoFormat] = getAxis(obj, plotIndex, 'Y');
+    [yaxis, yExpoFormat] = getAxis(obj, plotIndex, "Y");
 
     for a = 1:length(yaxis)
-        obj.layout = setfield(obj.layout, sprintf('yaxis%d', a), yaxis{a});
+        obj.layout.("yaxis" + a) = yaxis{a};
     end
 
-    %---------------------------------------------------------------------%
-
-    %-SET AXES ANOTATIONS-%
-
-    %-trace title-%
-    updateTitle(obj, plotData.Title, [1, 3]);
-
-    %-exponent for x-axis-%
-    updateExponentFormat(obj, xExpoFormat(1), [1,1], 'X');
-
-    %-exponent for y-axis-%
+    obj.layout.annotations{1} = updateTitle(obj, plotData.Title, [1, 3]);
+    if xExpoFormat(1) ~= 0
+        anIndex = obj.PlotlyDefaults.anIndex + 1;
+        obj.layout.annotations{anIndex} = ...
+                updateExponentFormat(obj, xExpoFormat(1), [1,1], "X");
+        obj.PlotlyDefaults.anIndex = anIndex;
+    end
     for a = 1:length(yExpoFormat)
-        updateExponentFormat(obj, yExpoFormat(a), [1, a], 'Y');
+        if yExpoFormat(a) ~= 0
+            anIndex = obj.PlotlyDefaults.anIndex + 1;
+            obj.layout.annotations{anIndex} = ...
+                    updateExponentFormat(obj, yExpoFormat(a), [1, a], "Y");
+            obj.PlotlyDefaults.anIndex = anIndex;
+        end
     end
 end
 
 function [ax, expoFormat] = getAxis(obj, plotIndex, axName)
-    %-INITIALIZATIONS-%
-
-    axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
     plotData = obj.State.Plot(plotIndex).Handle;
 
-    lineFactor = obj.PlotlyDefaults.AxisLineIncreaseFactor;
     axisPos = plotData.Position;
     axisColor = getStringColor(zeros(1,3));
     lineWidth = 1;
@@ -129,30 +103,31 @@ function updateStackedplotAxis(obj, plotIndex)
     fontFamily = matlab2plotlyfont(plotData.FontName);;
     tickLen = 5;
 
-    %---------------------------------------------------------------------%
-
-    %-Parse parameters accorging to axisName (X or Y)
-
+    %-Parse parameters according to axisName (X or Y)
     switch axName
-        case {'x', 'X'}
+        case {"x", "X"}
             nAxis = 1;
             nTicks = [5, 12];
             axisLim{nAxis} = plotData.XLimits;
             axisLabel{nAxis} = plotData.XLabel;
             axisDomain{nAxis} = min([axisPos(1) sum(axisPos([1,3]))], 1);
-            axisAnchor{nAxis} = 'y1';
-            
-        case {'y', 'Y'}
+            axisAnchor{nAxis} = "y1";
+
+        case {"y", "Y"}
             nAxis = length(plotData.AxesProperties);
             yPos = linspace(axisPos(2), sum(axisPos([2,4])), nAxis+1);
             yOffset = diff(yPos)*0.1; yOffset(1) = 0;
 
+            axisLim = cell(1,nAxis);
+            axisLabel = cell(1,nAxis);
+            axisDomain = cell(1,nAxis);
+            axisAnchor = cell(1,nAxis);
             for a = 1:nAxis
                 b = nAxis-a+1;
                 axisLim{a} = plotData.AxesProperties(b).YLimits;
                 axisLabel{a} = plotData.DisplayLabels{b};
                 axisDomain{a} = min([yPos(a)+yOffset(a) yPos(a+1)], 1);
-                axisAnchor{a} = 'x1';
+                axisAnchor{a} = "x1";
             end
 
             if nAxis < 4
@@ -162,64 +137,52 @@ function updateStackedplotAxis(obj, plotIndex)
             end
     end
 
-    %---------------------------------------------------------------------%
-
     %-GET EACH AXIS-%
-
+    ax = cell(1,nAxis);
+    expoFormat = zeros(1,nAxis);
     for a = 1:nAxis
-
-        %-general-%
-        ax{a}.domain = axisDomain{a};
-        ax{a}.anchor = axisAnchor{a};
-        ax{a}.range = axisLim{a};
-
-        ax{a}.side = 'left';
-        ax{a}.mirror = false;
-        ax{a}.zeroline = false;
-    
-        ax{a}.linecolor = axisColor;
-        ax{a}.linewidth = lineWidth;
-        ax{a}.exponentformat = obj.PlotlyDefaults.ExponentFormat;
-
-        %-grid-%
-        if strcmp(plotData.GridVisible, 'on')
-            ax{a}.showgrid = true;
-            ax{a}.gridwidth = lineWidth;
-            ax{a}.gridcolor = getStringColor(0.15*ones(1,3), 0.15);
+        axis.domain = axisDomain{a};
+        axis.anchor = axisAnchor{a};
+        axis.range = axisLim{a};
+        axis.side = "left";
+        axis.mirror = false;
+        axis.zeroline = false;
+        axis.linecolor = axisColor;
+        axis.linewidth = lineWidth;
+        axis.exponentformat = obj.PlotlyDefaults.ExponentFormat;
+
+        if plotData.GridVisible == "on"
+            axis.showgrid = true;
+            axis.gridwidth = lineWidth;
+            axis.gridcolor = getStringColor(round(255*0.15*ones(1,3)), 0.15);
         else
-            ax{a}.showgrid = false;
+            axis.showgrid = false;
         end
 
-        %-ticks-%
         if isnumeric(axisLim{a})
             [tickVals, tickText, expoFormat(a)] = getNumTicks(axisLim{a}, nTicks);
-
-
         elseif isduration(axisLim{a}) || isdatetime(axisLim{a})
             [tickVals, tickText] = getDateTicks(axisLim{a}, nTicks);
             expoFormat(a) = 0;
-
         end
 
-        ax{a}.showticklabels = true;
-        ax{a}.ticks = 'inside';
-        ax{a}.ticklen = tickLen;
-        ax{a}.tickwidth = lineWidth;
+        axis.showticklabels = true;
+        axis.ticks = "inside";
+        axis.ticklen = tickLen;
+        axis.tickwidth = lineWidth;
+        axis.tickfont.size = fontSize;
+        axis.tickfont.family = fontFamily;
+        axis.tickfont.color = axisColor;
+        axis.tickvals = tickVals;
+        axis.ticktext = tickText;
 
-        ax{a}.tickfont.size = fontSize;
-        ax{a}.tickfont.family = fontFamily;
-        ax{a}.tickfont.color = axisColor;
-
-        ax{a}.tickvals = tickVals;
-        ax{a}.ticktext = tickText;
-
-        %-label-%
         if ~isempty(axisLabel{a})
-            ax{a}.title = parseString(axisLabel{a});
-            ax{a}.titlefont.color = axisColor;
-            ax{a}.titlefont.size = fontSize;
-            ax{a}.titlefont.family = fontFamily;
+            axis.title = parseString(axisLabel{a});
+            axis.titlefont.color = axisColor;
+            axis.titlefont.size = fontSize;
+            axis.titlefont.family = fontFamily;
         end
+        ax{a} = axis;
     end
 end
 
@@ -232,6 +195,8 @@ function updateStackedplotAxis(obj, plotIndex)
     if isYear
         yearTick = getTickVals(yearLim, refYear, 1, nTicks);
 
+        tickVals = NaT(1,length(yearTick));
+        tickText = cell(1,length(yearTick));
         for n = 1:length(yearTick)
             tickVals(n) = datetime(yearTick(n),1,1,'Format','yy');
             tickText{n} = num2str(yearTick(n));
@@ -259,6 +224,8 @@ function updateStackedplotAxis(obj, plotIndex)
         hourTick = 24 * ( dayTick - fix(dayTick) );
         dayTick = fix(dayTick);
 
+        tickVals = NaT(1,length(dayTick));
+        tickText = cell(1,length(dayTick));
         for n = 1:length(dayTick)
             matDate = [yearLim(1),monthLim(1),dayTick(n),hourTick(n),0,0];
             tickVals(n) = datetime(matDate,'Format', 'MMM dd, HH:mm');
@@ -271,21 +238,23 @@ function updateStackedplotAxis(obj, plotIndex)
 
 function [tickVals, tickText, expoFormat] = getNumTicks(axisLim, nTicks)
     refVals = [1, 2, 5];
-    refPot = floor(log10(range(axisLim)));
-    nonStop = true;
+    refPot = floor(log10(rangeLength(axisLim)));
 
     fixAxisLim = fix(axisLim);
 
     if ~all(fixAxisLim == 0)
-        expoFormat = floor(log10(max(1, range(fixAxisLim))));
+        expoFormat = floor(log10(max(1, rangeLength(fixAxisLim))));
     else
         expoFormat = refPot;
     end
 
-    if abs(expoFormat) < 3 expoFormat = 0; end
+    if abs(expoFormat) < 3
+        expoFormat = 0;
+    end
 
     tickVals = getTickVals(axisLim, refVals, refPot, nTicks);
 
+    tickText = cell(1,length(tickVals));
     for n = 1:length(tickVals)
         tickText{n} = num2str(tickVals(n)/10^expoFormat);
     end
@@ -299,9 +268,10 @@ function updateStackedplotAxis(obj, plotIndex)
             vp = v*10^p;
 
             startTick = axisLim(1) - mod(axisLim(1), vp);
-            if startTick < axisLim, startTick = startTick + vp; end
+            if startTick < axisLim
+                startTick = startTick + vp;
+            end
             endTick = axisLim(2) - mod(axisLim(2), vp);
-            nPoints = floor(range([startTick, endTick])/vp) + 1;
 
             tickVals = startTick:vp:endTick;
             lenTicks = length(tickVals);
@@ -312,64 +282,65 @@ function updateStackedplotAxis(obj, plotIndex)
             end
         end
 
-        if done, break; end
+        if done
+            break;
+        end
     end
 end
 
-function updateTitle(obj, titleText, xySource)
+function ann = updateTitle(obj, titleText, xySource)
     xaxis = obj.layout.("xaxis" + xySource(1));
     yaxis = obj.layout.("yaxis" + xySource(2));
-    anIndex = 1;
-    if ~isempty(titleText), titleText = parseString(titleText); end
-
-    ann.showarrow = false;
-    ann.text = sprintf('<b>%s</b>', titleText);
-    ann.xref = 'paper';
-    ann.yref = 'paper';
-    ann.x = mean(xaxis.domain);
-    ann.y = yaxis.domain(2);
-    ann.xanchor = 'middle';
-    ann.yanchor = 'bottom';
-    ann.font.size = 1.5*xaxis.tickfont.size;
-    ann.font.color = xaxis.tickfont.color;
-    ann.font.family = xaxis.tickfont.family;
-
-    obj.layout.annotations{anIndex} = ann;
+    if ~isempty(titleText)
+        titleText = parseString(titleText);
+    end
+    ann = struct( ...
+        "showarrow", false, ...
+        "text", sprintf("<b>%s</b>", titleText), ...
+        "xref", "paper", ...
+        "yref", "paper", ...
+        "x", mean(xaxis.domain), ...
+        "y", yaxis.domain(2), ...
+        "xanchor", "middle", ...
+        "yanchor", "bottom", ...
+        "font", struct( ...
+            "size", 1.5*xaxis.tickfont.size, ...
+            "color", xaxis.tickfont.color, ...
+            "family", xaxis.tickfont.family ...
+        ) ...
+    );
 end
 
-function updateExponentFormat(obj, expoFormat, xySource, axName)
+function ann = updateExponentFormat(obj, expoFormat, xySource, axName)
     axName = lower(axName);
     xaxis = obj.layout.("xaxis" + xySource(1));
     yaxis = obj.layout.("yaxis" + xySource(2));
-    anIndex = obj.PlotlyDefaults.anIndex + 1;
-
-    if expoFormat ~= 0
-        exponentText = sprintf('\\times10^%d', expoFormat);
-        exponentText = parseString(exponentText, 'tex');
-        % exponentText = ['<p>' exponentText '</p>'];
-
-        ann.showarrow = false;
-        ann.text = exponentText;
-        ann.xref = 'paper';
-        ann.yref = 'paper';
-        ann.font.size = eval(sprintf('%saxis.tickfont.size', axName));
-        ann.font.color = eval(sprintf('%saxis.tickfont.color', axName));
-        ann.font.family = eval(sprintf('%saxis.tickfont.family', axName));
-        ann.xanchor = 'left';
-
-        switch axName
-            case 'x'
-                ann.yanchor = 'bottom';
-                ann.x = xaxis.domain(2);
-                ann.y = yaxis.domain(1);
-                
-            case 'y'
-                ann.yanchor = 'bottom';
-                ann.x = xaxis.domain(1);
-                ann.y = yaxis.domain(2);
-        end
 
-        obj.layout.annotations{anIndex} = ann;
-        obj.PlotlyDefaults.anIndex = anIndex;
+    exponentText = sprintf("\\times10^%d", expoFormat);
+    exponentText = parseString(exponentText, "tex");
+
+    ann = struct( ...
+        "showarrow", false, ...
+        "text", exponentText, ...
+        "xref", "paper", ...
+        "yref", "paper", ...
+        "font", struct( ...
+            "size", eval(sprintf("%saxis.tickfont.size", axName)), ...
+            "color", eval(sprintf("%saxis.tickfont.color", axName)), ...
+            "family", eval(sprintf("%saxis.tickfont.family", axName)) ...
+        ), ...
+        "xanchor", "left" ...
+    );
+
+    switch axName
+        case "x"
+            ann.yanchor = "bottom";
+            ann.x = xaxis.domain(2);
+            ann.y = yaxis.domain(1);
+
+        case "y"
+            ann.yanchor = "bottom";
+            ann.x = xaxis.domain(1);
+            ann.y = yaxis.domain(2);
     end
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateStair.m b/plotly/plotlyfig_aux/handlegraphics/updateStair.m
index 7b4656d1..4dbde2c8 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateStair.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateStair.m
@@ -1,7 +1,4 @@
-function obj = updateStair(obj, dataIndex)
-    %-update line-%
-    updateLineseries(obj, dataIndex); 
-
-    %-stair shape-%
-    obj.data{dataIndex}.line.shape = "hv";
+function data = updateStair(obj, dataIndex)
+    data = updateLineseries(obj, dataIndex);
+    data.line.shape = "hv";
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateStairseries.m b/plotly/plotlyfig_aux/handlegraphics/updateStairseries.m
index 54144dfb..fe07ef73 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateStairseries.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateStairseries.m
@@ -2,12 +2,9 @@
     %-store original stair handle-%
     stair_group = obj.State.Plot(dataIndex).Handle;
 
-    %-get children-%
-    stair_child = stair_group.Children;
-
     %-update line -%
-    obj.State.Plot(dataIndex).Handle = stair_child(1);
-    updateLineseries(obj,dataIndex);
+    obj.State.Plot(dataIndex).Handle = stair_group.Children(1);
+    obj.data{dataIndex} = updateLineseries(obj,dataIndex);
 
     %-revert handle-%
     obj.State.Plot(dataIndex).Handle = stair_group;
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateStem.m b/plotly/plotlyfig_aux/handlegraphics/updateStem.m
index 6ae0b6c1..251687d3 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateStem.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateStem.m
@@ -1,28 +1,22 @@
-function obj = updateStem(obj, dataIndex)
+function data = updateStem(obj, dataIndex)
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
 
     %-PLOT DATA STRUCTURE- %
-    data = obj.State.Plot(dataIndex).Handle;
+    stem_data = obj.State.Plot(dataIndex).Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %---------------------------------------------------------------------%
-
-    %-get coordenate x,y,z data-%
-    xdata = data.XData;
-    ydata = data.YData;
-    zdata = data.ZData;
+    %-get coordinate x,y,z data-%
+    xdata = stem_data.XData;
+    ydata = stem_data.YData;
+    zdata = stem_data.ZData;
     npoints = length(xdata);
 
-    %---------------------------------------------------------------------%
-
     %-check if stem-%
     isstem = ~isempty(zdata);
 
-    %---------------------------------------------------------------------%
-
     %-SCENE-%
     if isstem
         scene = obj.layout.("scene" + xsource);
@@ -31,32 +25,25 @@
         yaxis = obj.layout.("yaxis" + xsource);
     end
 
-    %---------------------------------------------------------------------%
-
     %-scatter3d scene-%
     if isstem
-        stem_data.scene = "scene" + xsource;
+        data.scene = "scene" + xsource;
     else
-        stem_data.xaxis = "x" + xsource;
-        stem_data.yaxis = "y" + xsource;
+        data.xaxis = "x" + xsource;
+        data.yaxis = "y" + xsource;
     end
 
-    %---------------------------------------------------------------------%
-
     %-scatter3d type-%
     if isstem
-        stem_data.type = "scatter3d";
+        data.type = "scatter3d";
     else
-        stem_data.type = "scatter";
+        data.type = "scatter";
     end
 
-    %---------------------------------------------------------------------%
-
-    stem_data.visible = strcmp(data.Visible, "on");
-    stem_data.name = data.DisplayName;
-    stem_data.mode = "lines+markers";
+    data.visible = stem_data.Visible == "on";
+    data.name = stem_data.DisplayName;
+    data.mode = "lines+markers";
 
-    %---------------------------------------------------------------------%
     if isdatetime(xdata)
         xdata = datenum(xdata);
     end
@@ -65,114 +52,86 @@
     end
 
     %-allocated space for extended data-%
-    xdata_extended = zeros(3*npoints, 1);
-    ydata_extended = zeros(3*npoints, 1);
+    xdata_extended = NaN(3*npoints, 1);
+    ydata_extended = NaN(3*npoints, 1);
 
-    if isstem
-        zdata_extended = zeros(3*npoints, 1);
-    end
+    % Create indices for extended data
+    idx1 = 3*(1:npoints) - 2; % 3n-2 positions
+    idx2 = 3*(1:npoints) - 1; % 3n-1 positions
+    idx3 = 3*(1:npoints); % 3n positions
 
-    %-format data-%
-    m = 1;
-    for n = 1:npoints
-        %-x data-%
-        xdata_extended(m) = xdata(n);
-        xdata_extended(m+1) = xdata(n);
-        xdata_extended(m+2) = nan;
-
-        %-y data-%
-        ydata_extended(m) = 0;
-        if isstem
-            ydata_extended(m) = ydata(n);
-        end
-        ydata_extended(m+1) = ydata(n);
-        ydata_extended(m+2) = nan;
-
-        %-z data-%
-        if isstem
-            zdata_extended(m) = 0;
-            zdata_extended(m+1) = zdata(n);
-            zdata_extended(m+2) = nan;
-        end
+    xdata_extended(idx1) = xdata;
+    xdata_extended(idx2) = xdata;
 
-        m = m + 3;
+    if isstem
+        ydata_extended(idx1) = ydata;
+    else
+        ydata_extended(idx1) = 0;
     end
+    ydata_extended(idx2) = ydata;
 
-    %---------------------------------------------------------------------%
+    if isstem
+        zdata_extended = NaN(3*npoints, 1);
+        zdata_extended(idx1) = 0;
+        zdata_extended(idx2) = zdata;
+    end
 
-    stem_data.line = extractLineLine(data);
-    stem_data.marker = extractLineMarker(data);
 
-    %---------------------------------------------------------------------%
+    data.line = extractLineLine(stem_data);
+    data.marker = extractLineMarker(stem_data);
 
     if isstem
         %-fix marker symbol-%
-        symbol = stem_data.marker.symbol;
+        symbol = data.marker.symbol;
 
-        if strcmpi(symbol, "asterisk-open") ...
-                || strcmpi(symbol, "cross-thin-open")
-            stem_data.marker.symbol = "cross";
+        if contains(lower(symbol), ["asterisk-open" "cross-thin-open"])
+            data.marker.symbol = "cross";
         end
 
-        stem_data.marker.size = stem_data.marker.size * 0.6;
+        data.marker.size = data.marker.size * 0.6;
 
         %-fix dash line-%
-        dash = stem_data.line.dash;
-
-        if strcmpi(dash, "dash")
-            stem_data.line.dash = "dot";
+        if lower(data.line.dash) == "dash"
+            data.line.dash = "dot";
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-hide every other marker-%
     markercolor = cell(3*npoints,1);
     linecolor = cell(3*npoints,1);
     hidecolor = "rgba(0,0,0,0)";
 
-    linecolor(1:3:3*npoints) = {hidecolor};
-    markercolor(1:3:3*npoints) = {hidecolor};
+    linecolor(idx1) = {hidecolor};
+    markercolor(idx1) = {hidecolor};
 
     try
-        linecolor(2:3:3*npoints) = {stem_data.marker.line.color};
-        markercolor(2:3:3*npoints) = {stem_data.marker.color};
+        linecolor(idx2) = {data.marker.line.color};
+        markercolor(idx2) = {data.marker.color};
     catch
-        linecolor(2:3:3*npoints) = {stem_data.marker.color};
-        markercolor(2:3:3*npoints) = {hidecolor};
+        linecolor(idx2) = {data.marker.color};
+        markercolor(idx2) = {hidecolor};
     end
 
-    linecolor(3:3:3*npoints) = {hidecolor};
-    markercolor(3:3:3*npoints) = {hidecolor};
+    linecolor(idx3) = {hidecolor};
+    markercolor(idx3) = {hidecolor};
 
     %-add new marker/line colors-%
-    stem_data.marker.color = markercolor;
-    stem_data.marker.line.color = linecolor;
-
-    stem_data.marker.line.width = stem_data.marker.line.width * 2;
-    stem_data.line.width = stem_data.line.width * 2;
+    data.marker.color = markercolor;
+    data.marker.line.color = linecolor;
 
-    %---------------------------------------------------------------------%
+    data.marker.line.width = data.marker.line.width * 2;
+    data.line.width = data.line.width * 2;
 
     %-set x y z data-%
-    stem_data.x = xdata_extended;
-    stem_data.y = ydata_extended;
+    data.x = xdata_extended;
+    data.y = ydata_extended;
 
     if isstem
-        stem_data.z = zdata_extended;
+        data.z = zdata_extended;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set plotly data-%
-    obj.data{dataIndex} = stem_data;
-
-    %---------------------------------------------------------------------%
-
     %-SETTING SCENE-%
-
     if isstem
-        %-aspect ratio-%
         asr = obj.PlotOptions.AspectRatio;
 
         if ~isempty(asr)
@@ -185,20 +144,16 @@
             end
         else
             %-define as default-%
-            xar = max(xdata(:));
-            yar = max(ydata(:));
-            xyar = max([xar, yar]);
+            xyar = max([max(xdata(:)), max(ydata(:))]);
             xar = xyar;
             yar = xyar;
-            zar = 0.7*max([xar, yar]);
+            zar = 0.7*xyar;
         end
 
         scene.aspectratio.x = xar;
         scene.aspectratio.y = yar;
         scene.aspectratio.z = zar;
 
-        %-----------------------------------------------------------------%
-
         %-camera eye-%
         ey = obj.PlotOptions.CameraEye;
 
@@ -210,20 +165,20 @@
             end
         else
             %-define as default-%
-            xey = - xar;
-            if xey>0
+            xey = -xar;
+            if xey > 0
                 xfac = 0.2;
             else
                 xfac = -0.2;
             end
-            yey = - yar;
-            if yey>0
+            yey = -yar;
+            if yey > 0
                 yfac = -0.2;
             else
                 yfac = 0.2;
             end
 
-            if zar>0
+            if zar > 0
                 zfac = 0.2;
             else
                 zfac = -0.2;
@@ -234,9 +189,7 @@
             scene.camera.eye.z = zar + zfac*zar;
         end
 
-        %-----------------------------------------------------------------%
-
-        %-zerolines hidded-%
+        %-zerolines hidden-%
         scene.xaxis.zeroline = false;
         scene.yaxis.zeroline = false;
         scene.zaxis.zeroline = false;
@@ -253,20 +206,19 @@
         scene.yaxis.tickcolor = "rgba(0,0,0,0.8)";
         scene.zaxis.tickcolor = "rgba(0,0,0,0.8)";
 
-        scene.xaxis.range = data.Parent.XLim;
-        scene.yaxis.range = data.Parent.YLim;
-        scene.zaxis.range = data.Parent.ZLim;
+        scene.xaxis.range = stem_data.Parent.XLim;
+        scene.yaxis.range = stem_data.Parent.YLim;
+        scene.zaxis.range = stem_data.Parent.ZLim;
 
-        scene.xaxis.tickvals = data.Parent.XTick;
-        scene.yaxis.tickvals = data.Parent.YTick;
-        scene.zaxis.tickvals = data.Parent.ZTick;
+        scene.xaxis.tickvals = stem_data.Parent.XTick;
+        scene.yaxis.tickvals = stem_data.Parent.YTick;
+        scene.zaxis.tickvals = stem_data.Parent.ZTick;
 
-        scene.xaxis.title = data.Parent.XLabel.String;
-        scene.yaxis.title = data.Parent.YLabel.String;
-        scene.zaxis.title = data.Parent.ZLabel.String;
+        scene.xaxis.title = stem_data.Parent.XLabel.String;
+        scene.yaxis.title = stem_data.Parent.YLabel.String;
+        scene.zaxis.title = stem_data.Parent.ZLabel.String;
 
-        %-update scene-%
-        obj.layout = setfield(obj.layout, "scene" + xsource, scene);
+        obj.layout.("scene" + xsource) = scene;
     else
         yaxis.zeroline = true;
 
@@ -276,14 +228,13 @@
         xaxis.tickcolor = "rgba(0,0,0,0.4)";
         yaxis.tickcolor = "rgba(0,0,0,0.4)";
 
-        xaxis.tickvals = data.Parent.XTick;
-        yaxis.tickvals = data.Parent.YTick;
+        xaxis.tickvals = stem_data.Parent.XTick;
+        yaxis.tickvals = stem_data.Parent.YTick;
 
-        xaxis.title = data.Parent.XLabel.String;
-        yaxis.title = data.Parent.YLabel.String;
+        xaxis.title = stem_data.Parent.XLabel.String;
+        yaxis.title = stem_data.Parent.YLabel.String;
 
-        %-update axis-%
-        obj.layout = setfield(obj.layout, "xaxis" + xsource, xaxis);
-        obj.layout = setfield(obj.layout, "yaxis" + ysource, yaxis);
+        obj.layout.("xaxis" + xsource) = xaxis;
+        obj.layout.("yaxis" + ysource) = yaxis;
     end
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateStemseries.m b/plotly/plotlyfig_aux/handlegraphics/updateStemseries.m
index 8cd01422..7d65a1a8 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateStemseries.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateStemseries.m
@@ -5,25 +5,16 @@
     %-get children-%
     stem_child = stem_group.Children;
 
-    %---------------------------------------------------------------------%
-
     %-update line-%
     obj.State.Plot(dataIndex).Handle = stem_child(1);
-    updateLineseries(obj,dataIndex);
-    stem_temp_data = obj.data{dataIndex};
-
-    %---------------------------------------------------------------------%
+    stem_temp_data = updateLineseries(obj,dataIndex);
 
     %-scatter mode-%
     stem_temp_data.mode = 'lines+markers';
 
-    %---------------------------------------------------------------------%
-
     %-update marker-%
     obj.State.Plot(dataIndex).Handle = stem_child(2);
-    updateLineseries(obj,dataIndex);
-
-    %---------------------------------------------------------------------%
+    stem_temp_data = updateLineseries(obj,dataIndex);
 
     stem_temp_data.marker = obj.data{dataIndex}.marker;
 
@@ -44,8 +35,6 @@
     stem_temp_data.marker.color = color_temp;
     stem_temp_data.marker.line.color = line_color_temp;
 
-    %---------------------------------------------------------------------%
-
     %-revert handle-%
     obj.State.Plot(dataIndex).Handle = stem_group;
     obj.data{dataIndex} = stem_temp_data;
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateStreamtube.m b/plotly/plotlyfig_aux/handlegraphics/updateStreamtube.m
index c7d8694e..9434e32d 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateStreamtube.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateStreamtube.m
@@ -15,23 +15,10 @@ function updateSurfaceStreamtube(obj, surfaceIndex)
     image_data = obj.State.Plot(surfaceIndex).Handle;
     figure_data = obj.State.Figure.Handle;
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
-    %-surface xaxis and yaxis-%
     obj.data{surfaceIndex}.xaxis = "x" + xsource;
     obj.data{surfaceIndex}.yaxis = "y" + ysource;
-        
-    %---------------------------------------------------------------------%
-
-    %-surface type-%
     obj.data{surfaceIndex}.type = 'surface';
 
-    %---------------------------------------------------------------------%
-
     %-getting plot data-%
     x = image_data.XData;
     y = image_data.YData;
@@ -66,26 +53,17 @@ function updateSurfaceStreamtube(obj, surfaceIndex)
     z = imresize(z, [ysize, xsize]);
     cdata = imresize(cdata, [ysize, xsize]);
 
-    %-optional-%
-    % if isvector(x)
-    %     [x, y] = meshgrid(x,y);
-    % end
-
-    %---------------------------------------------------------------------%
-
     obj.data{surfaceIndex}.x = x;
     obj.data{surfaceIndex}.y = y;
     obj.data{surfaceIndex}.z = z;
     obj.PlotOptions.Image3D = true;
     obj.PlotOptions.ContourProjection = true;
 
-    %---------------------------------------------------------------------%
-
     %- setting grid mesh by default -%
     % x-direction
     xmin = min(x(:));
     xmax = max(x(:));
-    xsize = (xmax - xmin) / (size(x, 2)-1); 
+    xsize = (xmax - xmin) / (size(x, 2)-1);
     obj.data{surfaceIndex}.contours.x.start = xmin;
     obj.data{surfaceIndex}.contours.x.end = xmax;
     obj.data{surfaceIndex}.contours.x.size = xsize;
@@ -101,90 +79,84 @@ function updateSurfaceStreamtube(obj, surfaceIndex)
     obj.data{surfaceIndex}.contours.y.show = true;
     obj.data{surfaceIndex}.contours.y.color = 'black';
 
-    %---------------------------------------------------------------------%
-
     %-get data-%
-
     %-aspect ratio-%
     ar = obj.PlotOptions.AspectRatio;
 
     if ~isempty(ar)
-    if ischar(ar)
-        scene.aspectmode = ar;
-    elseif isvector(ar) && length(ar) == 3
-        xar = ar(1);
-        yar = ar(2);
-        zar = ar(3);
-    end
+        if ischar(ar)
+            scene.aspectmode = ar;
+        elseif isvector(ar) && length(ar) == 3
+            xar = ar(1);
+            yar = ar(2);
+            zar = ar(3);
+        end
     else
-
-    %-define as default-%
-    xar = 0.5*max(x(:));
-    yar = 0.5*max(y(:));
-    zar = 0.4*max([xar, yar]);
+        %-define as default-%
+        xar = 0.5*max(x(:));
+        yar = 0.5*max(y(:));
+        zar = 0.4*max([xar, yar]);
     end
 
-    scene.aspectratio.x = xar; 
-    scene.aspectratio.y = yar; 
-    scene.aspectratio.z = zar; 
-
-    %---------------------------------------------------------------------%
+    scene.aspectratio.x = xar;
+    scene.aspectratio.y = yar;
+    scene.aspectratio.z = zar;
 
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
     if ~isempty(ey)
-    if isvector(ey) && length(ey) == 3
-    scene.camera.eye.x = ey(1);
-    scene.camera.eye.y = ey(2);
-    scene.camera.eye.z = ey(3);
-    end
+        if isvector(ey) && length(ey) == 3
+            scene.camera.eye.x = ey(1);
+            scene.camera.eye.y = ey(2);
+            scene.camera.eye.z = ey(3);
+        end
     else
-
     %-define as default-%
     fac = 0.35;
-    xey = - xar; if xey>0 xfac = -fac; else xfac = fac; end
-    yey = - yar; if yey>0 yfac = -fac; else yfac = fac; end
-    if zar>0 zfac = fac; else zfac = -fac; end
+    xey = - xar;
+    if xey>0
+        xfac = -fac;
+    else
+        xfac = fac;
+    end
+    yey = - yar;
+    if yey>0
+        yfac = -fac;
+    else
+        yfac = fac;
+    end
+    if zar>0
+        zfac = fac;
+    else
+        zfac = -fac;
+    end
 
-    scene.camera.eye.x = xey + xfac*xey; 
+    scene.camera.eye.x = xey + xfac*xey;
     scene.camera.eye.y = yey + yfac*yey;
     scene.camera.eye.z = zar + zfac*zar;
     end
 
-    obj.layout = setfield(obj.layout,['scene'], scene);
-
-    %---------------------------------------------------------------------%
+    obj.layout.scene = scene;
 
     %-image colorscale-%
-
     cmap = figure_data.Colormap;
     len = length(cmap)-1;
-
     for c = 1: length(cmap)
         col = round(255 * cmap(c, :));
         obj.data{surfaceIndex}.colorscale{c} = ...
-                {(c-1)/len, sprintf("rgb(%d,%d,%d)", col)};
+                {(c-1)/len, getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
     obj.data{surfaceIndex}.surfacecolor = cdata;
     obj.data{surfaceIndex}.name = image_data.DisplayName;
     obj.data{surfaceIndex}.showscale = false;
     obj.data{surfaceIndex}.visible = strcmp(image_data.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = image_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch image_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
-
-    obj.data{surfaceIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateSurf.m b/plotly/plotlyfig_aux/handlegraphics/updateSurf.m
index 9c159175..4b78b416 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateSurf.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateSurf.m
@@ -3,7 +3,7 @@
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     meshData = obj.State.Plot(surfaceIndex).Handle;
@@ -19,23 +19,17 @@
     contourIndex = obj.PlotOptions.nPlots;
     obj.PlotOptions.contourIndex(surfaceIndex) = contourIndex;
 
-    %---------------------------------------------------------------------%
-
     %-associate scene-%
     obj.data{surfaceIndex}.scene = sprintf('scene%d', xsource);
     obj.data{contourIndex}.scene = sprintf('scene%d', xsource);
 
-    %---------------------------------------------------------------------%
-
     %-surface type for face color-%
     obj.data{surfaceIndex}.type = 'surface';
-        
+
     %-scatter3d type for contour mesh lines-%
     obj.data{contourIndex}.type = 'scatter3d';
     obj.data{contourIndex}.mode = 'lines';
 
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     xData = meshData.XData;
     yData = meshData.YData;
@@ -66,8 +60,6 @@
     yDataContour = [yDataContourDir1(:); yDataContourDir2(:)];
     zDataContour = [zDataContourDir1(:); zDataContourDir2(:)];
 
-    %---------------------------------------------------------------------%
-
     %-set data on surface-%
     obj.data{surfaceIndex}.x = xDataSurface;
     obj.data{surfaceIndex}.y = yDataSurface;
@@ -88,19 +80,13 @@
     obj.data{surfaceIndex}.contours.y.size = mean(diff(yData));;
     obj.data{surfaceIndex}.contours.y.show = true;
 
-    %---------------------------------------------------------------------%
-
     %-set data on scatter3d-%
     obj.data{contourIndex}.x = xDataContour(:);
     obj.data{contourIndex}.y = yDataContour(:);
     obj.data{contourIndex}.z = zDataContour(:);
 
-    %---------------------------------------------------------------------%
-
     %-COLORING-%
 
-    %---------------------------------------------------------------------%
-
     %-get colormap-%
     cMap = axisData.Colormap;
     fac = 1/(length(cMap)-1);
@@ -108,15 +94,12 @@
 
     for c = 1: length(cMap)
         colorScale{c} = {(c-1)*fac, ...
-                sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                getStringColor(round(255*cMap(c, :)))};
     end
 
-    %---------------------------------------------------------------------%
-
     %-get edge color-%
     if isnumeric(meshData.EdgeColor)
-        cDataContour = sprintf("rgb(%d,%d,%d)", ...
-                round(255*meshData.EdgeColor));
+        cDataContour = getStringColor(round(255*meshData.EdgeColor));
 
     elseif strcmpi(meshData.EdgeColor, 'interp')
         cDataContour = zDataContour(:);
@@ -138,7 +121,7 @@
 
             for c = 1: length(cMap)
                 edgeColorScale{c} = {(c-1)*fac , ...
-                        sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                        getStringColor(round(255*cMap(c, :)))};
             end
 
             obj.data{surfaceIndex}.line.cmin = 0;
@@ -162,7 +145,6 @@
         cDataContour = 'rgba(0,0,0,0)';
         obj.data{surfaceIndex}.contours.x.show = false;
         obj.data{surfaceIndex}.contours.y.show = false;
-
     end
 
     %-set edge color-%
@@ -170,13 +152,10 @@
     obj.data{surfaceIndex}.contours.x.color = cDataContour;
     obj.data{surfaceIndex}.contours.y.color = cDataContour;
 
-    %---------------------------------------------------------------------%
-
     %-get face color-%
     faceColor = meshData.FaceColor;
 
     if isnumeric(faceColor)
-
         if all(faceColor == [1, 1, 1])
             faceColor = [0.96, 0.96, 0.96];
         end
@@ -192,12 +171,11 @@
 
         for c = 1: size(cMapSurface, 1)
             colorScale{c} = {(c-1)*fac, ...
-                    sprintf("rgba(%f,%f,%f, 1)", cMapSurface(c, :))};
+                    getStringColor(round(255*cMapSurface(c, :)), 1)};
         end
 
         obj.data{surfaceIndex}.cmin = axisData.CLim(1);
         obj.data{surfaceIndex}.cmax = axisData.CLim(2);
-
     elseif strcmpi(faceColor, 'interp')
         cDataSurface = zDataSurface;
 
@@ -216,10 +194,8 @@
                 obj.data{idx}.cmax = cMax;
             end
         end
-
     elseif strcmpi(faceColor, 'flat')
         cData = meshData.CData;
-
         if size(cData, 3) ~= 1
             cMap = unique( reshape(cData, ...
                 [size(cData,1)*size(cData,2), size(cData,3)]), 'rows' );
@@ -230,14 +206,13 @@
 
             for c = 1: length(cMap)
                 colorScale{c} = {(c-1)*fac, ...
-                        sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                        getStringColor(round(255*cMap(c, :)))};
             end
         else
             cDataSurface = cData;
             obj.data{surfaceIndex}.cmin = axisData.CLim(1);
             obj.data{surfaceIndex}.cmax = axisData.CLim(2);
         end
-        
     end
 
     %-set face color-%
@@ -245,7 +220,6 @@
     obj.data{surfaceIndex}.surfacecolor = cDataSurface;
 
     %-lighting settings-%
-
     if isnumeric(meshData.FaceColor) && all(meshData.FaceColor == [1, 1, 1])
         obj.data{surfaceIndex}.lighting.diffuse = 0.5;
         obj.data{surfaceIndex}.lighting.ambient = 0.725;
@@ -261,13 +235,7 @@
         obj.data{surfaceIndex}.lighting.ambient = 0.3;
     end
 
-    %-opacity-%
     obj.data{surfaceIndex}.opacity = meshData.FaceAlpha;
-
-    %---------------------------------------------------------------------%
-
-    %-line style-%
-
     obj.data{contourIndex}.line.width = 3*meshData.LineWidth;
 
     if strcmpi(meshData.LineStyle, '-')
@@ -278,11 +246,7 @@
         obj.data{surfaceIndex}.contours.y.show = false;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-SCENE CONFIGUTATION-%
-
-    %---------------------------------------------------------------------%
+    %-SCENE CONFIGURATION-%
 
     %-aspect ratio-%
     asr = obj.PlotOptions.AspectRatio;
@@ -291,12 +255,9 @@
         if ischar(asr)
             scene.aspectmode = asr;
         elseif isvector(ar) && length(asr) == 3
-            xar = asr(1);
-            yar = asr(2);
             zar = asr(3);
         end
     else
-
         %-define as default-%
         xar = max(xData(:));
         yar = max(yData(:));
@@ -308,8 +269,6 @@
     scene.aspectratio.y = 1.0*xyar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -320,21 +279,31 @@
             scene.camera.eye.z = ey(3);
         end
     else
-
         %-define as default-%
-        xey = - xyar; if xey>0 xfac = -0.0; else xfac = 0.0; end
-        yey = - xyar; if yey>0 yfac = -0.3; else yfac = 0.3; end
-        if zar>0 zfac = -0.1; else zfac = 0.1; end
-        
-        scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xyar;
+        if xey>0
+            xfac = -0.0;
+        else
+            xfac = 0.0;
+        end
+        yey = - xyar;
+        if yey>0
+            yfac = -0.3;
+        else
+            yfac = 0.3;
+        end
+        if zar>0
+            zfac = -0.1;
+        else
+            zfac = 0.1;
+        end
+
+        scene.camera.eye.x = xey + xfac*xey;
         scene.camera.eye.y = yey + yfac*yey;
         scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
-
     scene.xaxis.range = axisData.XLim;
     scene.yaxis.range = axisData.YLim;
     scene.zaxis.range = axisData.ZLim;
@@ -376,12 +345,8 @@
     scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-    %---------------------------------------------------------------------%
-
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
-
-    %---------------------------------------------------------------------%
+    obj.layout.("scene" + xsource) = scene;
 
     obj.data{surfaceIndex}.name = meshData.DisplayName;
     obj.data{contourIndex}.name = meshData.DisplayName;
@@ -390,17 +355,10 @@
     obj.data{surfaceIndex}.visible = strcmp(meshData.Visible,'on');
     obj.data{contourIndex}.visible = strcmp(meshData.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = meshData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch meshData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
-
-    obj.data{surfaceIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateSurfaceplot.m b/plotly/plotlyfig_aux/handlegraphics/updateSurfaceplot.m
index fc388bf0..76e68319 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateSurfaceplot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateSurfaceplot.m
@@ -1,4 +1,4 @@
-function obj = updateSurfaceplot(obj, surfaceIndex)
+function data = updateSurfaceplot(obj, surfaceIndex)
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
@@ -9,28 +9,14 @@
     image_data = obj.State.Plot(surfaceIndex).Handle;
     figure_data = obj.State.Figure.Handle;
 
-    %-AXIS DATA-%
-    xaxis = obj.layout.("xaxis" + xsource);
-    yaxis = obj.layout.("yaxis" + ysource);
-
-    %---------------------------------------------------------------------%
-
     %-surface xaxis and yaxis-%
-    obj.data{surfaceIndex}.xaxis = "x" + xsource;
-    obj.data{surfaceIndex}.yaxis = "y" + ysource;
-
-    %---------------------------------------------------------------------%
+    data.xaxis = "x" + xsource;
+    data.yaxis = "y" + ysource;
 
     % check for 3D
     if any(nonzeros(image_data.ZData))
-        
-        %-----------------------------------------------------------------%
-        
-        %-surface type-%
-        obj.data{surfaceIndex}.type = 'surface';
-        
-        %-----------------------------------------------------------------%
-        
+        data.type = "surface";
+
         %-format x an y data-%
         x = image_data.XData;
         y = image_data.YData;
@@ -38,78 +24,52 @@
         if isvector(x)
             [x, y] = meshgrid(x,y);
         end
-        
-        %-----------------------------------------------------------------%
-        
-        obj.data{surfaceIndex}.x = x;
-        obj.data{surfaceIndex}.y = y;
-        obj.data{surfaceIndex}.z = image_data.ZData;
+
+        data.x = x;
+        data.y = y;
+        data.z = image_data.ZData;
         obj.PlotOptions.Image3D = true;
         obj.PlotOptions.ContourProjection = true;
-        
-        %-----------------------------------------------------------------%
 
-        %- setting grid mesh by default -%
-        % x-direction
-        xmin = min(x(:));
-        xmax = max(x(:));
-        xsize = (xmax - xmin) / (size(x, 2)-1); 
-        obj.data{surfaceIndex}.contours.x.start = xmin;
-        obj.data{surfaceIndex}.contours.x.end = xmax;
-        obj.data{surfaceIndex}.contours.x.size = xsize;
-        obj.data{surfaceIndex}.contours.x.show = true;
-        obj.data{surfaceIndex}.contours.x.color = 'black';
-        % y-direction
-        ymin = min(y(:));
-        ymax = max(y(:));
-        ysize = (ymax - ymin) / (size(y, 1)-1);
-        obj.data{surfaceIndex}.contours.y.start = ymin;
-        obj.data{surfaceIndex}.contours.y.end = ymax;
-        obj.data{surfaceIndex}.contours.y.size = ysize;
-        obj.data{surfaceIndex}.contours.y.show = true;
-        obj.data{surfaceIndex}.contours.y.color = 'black';
+        data.contours = struct( ...
+            "x", struct( ...
+                "start", min(x(:)), ...
+                "end", max(x(:)), ...
+                "size", rangeLength(x(:)) / (size(x, 2)-1), ...
+                "show", true, ...
+                "color", "black" ...
+            ), ...
+            "y", struct( ...
+                "start", min(y(:)), ...
+                "end", max(y(:)), ...
+                "size", rangeLength(y(:)) / (size(y, 1)-1), ...
+                "show", true, ...
+                "color", "black" ...
+            ) ...
+        );
     else
-        %-surface type-%
-        obj = updateImage(obj, surfaceIndex);
-
-        %-surface x-%
-        obj.data{surfaceIndex}.x = image_data.XData(1,:);
-
-        %-surface y-%
-        obj.data{surfaceIndex}.y = image_data.YData(:,1);
+        data = updateImage(obj, surfaceIndex);
+        data.x = image_data.XData(1,:);
+        data.y = image_data.YData(:,1);
     end
 
-    %---------------------------------------------------------------------%
-
-    %-image colorscale-%
-
     cmap = figure_data.Colormap;
     len = length(cmap)-1;
 
     for c = 1: length(cmap)
         col = round(255 * cmap(c, :));
-        obj.data{surfaceIndex}.colorscale{c} = ...
-                {(c-1)/len, sprintf("rgb(%d,%d,%d)", col)};
+        data.colorscale{c} = {(c-1)/len, getStringColor(col)};
     end
 
-    %---------------------------------------------------------------------%
-
-    obj.data{surfaceIndex}.surfacecolor = cdata;
-    obj.data{surfaceIndex}.name = image_data.DisplayName;
-    obj.data{surfaceIndex}.showscale = false;
-    obj.data{surfaceIndex}.visible = strcmp(image_data.Visible,'on');
+    data.surfacecolor = cdata;
+    data.name = image_data.DisplayName;
+    data.showscale = false;
+    data.visible = image_data.Visible == "on";
 
-    %---------------------------------------------------------------------%
-
-    leg = image_data.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch image_data.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            data.showlegend = true;
+        case "off"
+            data.showlegend = false;
     end
-
-    obj.data{surfaceIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateSurfc.m b/plotly/plotlyfig_aux/handlegraphics/updateSurfc.m
index fec07686..de8f02e8 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateSurfc.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateSurfc.m
@@ -13,7 +13,7 @@ function updateContourOnly(obj, contourIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(contourIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-AXIS DATA STRUCTURE-%
     axisData = obj.State.Plot(contourIndex).AssociatedAxis;
@@ -23,19 +23,13 @@ function updateContourOnly(obj, contourIndex)
     surfData = obj.State.Plot(contourIndex-1).Handle;
     figureData = obj.State.Figure.Handle;
 
-    %---------------------------------------------------------------------%
-
     %-associate scene-%
     obj.data{contourIndex}.scene = sprintf('scene%d', xsource);
 
-    %---------------------------------------------------------------------%
-        
     %-scatter3d type for contour projection-%
     obj.data{contourIndex}.type = 'scatter3d';
     obj.data{contourIndex}.mode = 'lines';
 
-    %---------------------------------------------------------------------%
-
     %-get colormap-%
     cMap = figureData.Colormap;
     fac = 1/(length(cMap)-1);
@@ -43,11 +37,9 @@ function updateContourOnly(obj, contourIndex)
 
     for c = 1: length(cMap)
         colorScale{c} = {(c-1)*fac, ...
-                sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                getStringColor(round(255*cMap(c, :)))};
     end
 
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     contourMatrix = contourData.ContourMatrix;
 
@@ -69,12 +61,8 @@ function updateContourOnly(obj, contourIndex)
         yData = [yData, contourMatrix(2, n+1:n+m), NaN];
         zData = [zData, zmin * ones(1, m), NaN];
 
-        %-----------------------------------------------------------------%
-
-        %-get edge color-%
         if isnumeric(contourData.LineColor)
-            cData = sprintf("rgb(%d,%d,%d)", ...
-                    round(255*contourData.LineColor));
+            cData = getStringColor(round(255*contourData.LineColor));
         elseif strcmpi(contourData.LineColor, 'interp')
             cData = zData;
             obj.data{contourIndex}.line.colorscale = colorScale;
@@ -87,41 +75,17 @@ function updateContourOnly(obj, contourIndex)
             obj.data{contourIndex}.line.colorscale = colorScale;
         elseif strcmpi(contourData.LineColor, 'none')
             cData = 'rgba(0,0,0,0)';
-
         end
         n = n + m + 1;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set data on scatter3d-%
     obj.data{contourIndex}.x = xData;
     obj.data{contourIndex}.y = yData;
     obj.data{contourIndex}.z = zData;
 
-    %---------------------------------------------------------------------%
-
-    %-set edge color-%
     obj.data{contourIndex}.line.color = cData;
-
-    %---------------------------------------------------------------------%
-
-    %-line style-%
-
     obj.data{contourIndex}.line.width = 2*contourData.LineWidth;
-
-    switch contourData.LineStyle
-        case '-'
-            obj.data{contourIndex}.line.dash = 'solid';
-        case '--'
-            obj.data{contourIndex}.line.dash = 'dash';
-        case '-.'
-            obj.data{contourIndex}.line.dash = 'dashdot';
-        case ':'
-            obj.data{contourIndex}.line.dash = 'dot';
-    end
-
-    %---------------------------------------------------------------------%
+    obj.data{contourIndex}.line.dash = getLineDash(contourData.LineStyle);
 
     obj.data{contourIndex}.name = contourData.DisplayName;
     obj.data{contourIndex}.showscale = false;
@@ -134,7 +98,7 @@ function updateSurfOnly(obj, surfaceIndex)
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     meshData = obj.State.Plot(surfaceIndex).Handle;
@@ -151,23 +115,17 @@ function updateSurfOnly(obj, surfaceIndex)
     contourIndex = obj.PlotOptions.nPlots;
     obj.PlotOptions.contourIndex(surfaceIndex) = contourIndex;
 
-    %---------------------------------------------------------------------%
-
     %-associate scene-%
     obj.data{surfaceIndex}.scene = sprintf('scene%d', xsource);
     obj.data{contourIndex}.scene = sprintf('scene%d', xsource);
 
-    %---------------------------------------------------------------------%
-
     %-surface type for face color-%
     obj.data{surfaceIndex}.type = 'surface';
-        
+
     %-scatter3d type for contour mesh lines-%
     obj.data{contourIndex}.type = 'scatter3d';
     obj.data{contourIndex}.mode = 'lines';
 
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     xData = meshData.XData;
     yData = meshData.YData;
@@ -198,8 +156,6 @@ function updateSurfOnly(obj, surfaceIndex)
     yDataContour = [yDataContourDir1(:); yDataContourDir2(:)];
     zDataContour = [zDataContourDir1(:); zDataContourDir2(:)];
 
-    %---------------------------------------------------------------------%
-
     %-set data on surface-%
     obj.data{surfaceIndex}.x = xDataSurface;
     obj.data{surfaceIndex}.y = yDataSurface;
@@ -220,19 +176,13 @@ function updateSurfOnly(obj, surfaceIndex)
     obj.data{surfaceIndex}.contours.y.size = mean(diff(yData));
     obj.data{surfaceIndex}.contours.y.show = true;
 
-    %---------------------------------------------------------------------%
-
     %-set data on scatter3d-%
     obj.data{contourIndex}.x = xDataContour(:);
     obj.data{contourIndex}.y = yDataContour(:);
     obj.data{contourIndex}.z = zDataContour(:);
 
-    %---------------------------------------------------------------------%
-
     %-COLORING-%
 
-    %---------------------------------------------------------------------%
-
     %-get colormap-%
     cMap = figureData.Colormap;
     fac = 1/(length(cMap)-1);
@@ -240,15 +190,12 @@ function updateSurfOnly(obj, surfaceIndex)
 
     for c = 1: length(cMap)
         colorScale{c} = {(c-1)*fac, ...
-                sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                getStringColor(round(255*cMap(c, :)))};
     end
 
-    %---------------------------------------------------------------------%
-
     %-get edge color-%
     if isnumeric(meshData.EdgeColor)
-        cDataContour = sprintf("rgb(%d,%d,%d)", ...
-                round(255*meshData.EdgeColor));
+        cDataContour = getStringColor(round(255*meshData.EdgeColor));
 
     elseif strcmpi(meshData.EdgeColor, 'interp')
         cDataContour = zDataContour(:);
@@ -272,7 +219,7 @@ function updateSurfOnly(obj, surfaceIndex)
 
             for c = 1: length(cMap)
                 edgeColorScale{c} = {(c-1)*fac, ...
-                        sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                        getStringColor(round(255*cMap(c, :)))};
             end
 
             obj.data{surfaceIndex}.line.cmin = 0;
@@ -294,7 +241,6 @@ function updateSurfOnly(obj, surfaceIndex)
 
     elseif strcmpi(meshData.EdgeColor, 'none')
         cDataContour = 'rgba(0,0,0,0)';
-
     end
 
     %-set edge color-%
@@ -302,13 +248,10 @@ function updateSurfOnly(obj, surfaceIndex)
     obj.data{surfaceIndex}.contours.x.color = cDataContour;
     obj.data{surfaceIndex}.contours.y.color = cDataContour;
 
-    %---------------------------------------------------------------------%
-
     %-get face color-%
     faceColor = meshData.FaceColor;
 
     if isnumeric(faceColor)
-
         if all(faceColor == [1, 1, 1])
             faceColor = [0.96, 0.96, 0.96];
         end
@@ -324,15 +267,13 @@ function updateSurfOnly(obj, surfaceIndex)
 
         for c = 1: size(cMapSurface, 1)
             colorScale{c} = {(c-1)*fac, ...
-                    sprintf('rgba(%f,%f,%f, 1)', cMapSurface(c, :))};
+                    getStringColor(round(255*cMapSurface(c, :)), 1)};
         end
 
         obj.data{surfaceIndex}.cmin = axisData.CLim(1);
         obj.data{surfaceIndex}.cmax = axisData.CLim(2);
-
     elseif strcmpi(faceColor, 'interp')
         cDataSurface = zDataSurface;
-
         if surfaceIndex > xsource
             cData = [];
 
@@ -348,10 +289,8 @@ function updateSurfOnly(obj, surfaceIndex)
                 obj.data{idx}.cmax = cMax;
             end
         end
-
     elseif strcmpi(faceColor, 'flat')
         cData = meshData.CData;
-
         if size(cData, 3) ~= 1
             cMap = unique(reshape(cData, [size(cData,1)*size(cData,2), ...
                     size(cData,3)]), 'rows');
@@ -362,12 +301,11 @@ function updateSurfOnly(obj, surfaceIndex)
 
             for c = 1: length(cMap)
                 colorScale{c} = {(c-1)*fac, ...
-                        sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                        getStringColor(round(255*cMap(c, :)))};
             end
         else
             cDataSurface = cData;
         end
-        
     end
 
     %-set face color-%
@@ -375,13 +313,9 @@ function updateSurfOnly(obj, surfaceIndex)
     obj.data{surfaceIndex}.surfacecolor = cDataSurface;
 
     %-lighting settings-%
-
     if isnumeric(meshData.FaceColor) && all(meshData.FaceColor == [1, 1, 1])
         obj.data{surfaceIndex}.lighting.diffuse = 0.5;
         obj.data{surfaceIndex}.lighting.ambient = 0.725;
-    else
-        % obj.data{surfaceIndex}.lighting.diffuse = 1.0;
-        % obj.data{surfaceIndex}.lighting.ambient = 0.9;
     end
 
     if meshData.FaceAlpha ~= 1
@@ -394,14 +328,11 @@ function updateSurfOnly(obj, surfaceIndex)
         obj.data{surfaceIndex}.lighting.ambient = 0.3;
     end
 
-    %-opacity-%
     obj.data{surfaceIndex}.opacity = meshData.FaceAlpha;
 
-    %---------------------------------------------------------------------%
 
     %-line style-%
     obj.data{contourIndex}.line.width = 3*meshData.LineWidth;
-
     if strcmpi(meshData.LineStyle, '-')
         obj.data{contourIndex}.line.dash = 'solid';
     else
@@ -410,11 +341,7 @@ function updateSurfOnly(obj, surfaceIndex)
         obj.data{surfaceIndex}.contours.y.show = false;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-SCENE CONFIGUTATION-%
-
-    %---------------------------------------------------------------------%
+    %-SCENE CONFIGURATION-%
 
     %-aspect ratio-%
     asr = obj.PlotOptions.AspectRatio;
@@ -423,12 +350,9 @@ function updateSurfOnly(obj, surfaceIndex)
         if ischar(asr)
             scene.aspectmode = asr;
         elseif isvector(ar) && length(asr) == 3
-            xar = asr(1);
-            yar = asr(2);
             zar = asr(3);
         end
     else
-
         %-define as default-%
         xar = max(xData(:));
         yar = max(yData(:));
@@ -440,8 +364,6 @@ function updateSurfOnly(obj, surfaceIndex)
     scene.aspectratio.y = 1.0*xyar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -452,21 +374,31 @@ function updateSurfOnly(obj, surfaceIndex)
             scene.camera.eye.z = ey(3);
         end
     else
-
         %-define as default-%
-        xey = - xyar; if xey>0 xfac = 0.1; else xfac = -0.1; end
-        yey = - xyar; if yey>0 yfac = -0.5; else yfac = 0.5; end
-        if zar>0 zfac = 0.1; else zfac = -0.1; end
-        
-        scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xyar;
+        if xey>0
+            xfac = 0.1;
+        else
+            xfac = -0.1;
+        end
+        yey = - xyar;
+        if yey>0
+            yfac = -0.5;
+        else
+            yfac = 0.5;
+        end
+        if zar>0
+            zfac = 0.1;
+        else
+            zfac = -0.1;
+        end
+
+        scene.camera.eye.x = xey + xfac*xey;
         scene.camera.eye.y = yey + yfac*yey;
         scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
-
     scene.xaxis.range = axisData.XLim;
     scene.yaxis.range = axisData.YLim;
     scene.zaxis.range = axisData.ZLim;
@@ -508,10 +440,8 @@ function updateSurfOnly(obj, surfaceIndex)
     scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-    %---------------------------------------------------------------------%
-
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
+    obj.layout.("scene" + xsource) = scene;
 
     obj.data{surfaceIndex}.name = meshData.DisplayName;
     obj.data{contourIndex}.name = meshData.DisplayName;
@@ -520,17 +450,10 @@ function updateSurfOnly(obj, surfaceIndex)
     obj.data{surfaceIndex}.visible = strcmp(meshData.Visible,'on');
     obj.data{contourIndex}.visible = strcmp(meshData.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = meshData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch meshData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
-
-    obj.data{surfaceIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateSurfl.m b/plotly/plotlyfig_aux/handlegraphics/updateSurfl.m
index 3ab4ee80..b8a1ddc8 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateSurfl.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateSurfl.m
@@ -3,7 +3,7 @@
     axIndex = obj.getAxisIndex(obj.State.Plot(surfaceIndex).AssociatedAxis);
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj,axIndex);
+    xsource = findSourceAxis(obj,axIndex);
 
     %-SURFACE DATA STRUCTURE- %
     meshData = obj.State.Plot(surfaceIndex).Handle;
@@ -20,23 +20,17 @@
     contourIndex = obj.PlotOptions.nPlots;
     obj.PlotOptions.contourIndex(surfaceIndex) = contourIndex;
 
-    %---------------------------------------------------------------------%
-
     %-associate scene-%
     obj.data{surfaceIndex}.scene = sprintf('scene%d', xsource);
     obj.data{contourIndex}.scene = sprintf('scene%d', xsource);
 
-    %---------------------------------------------------------------------%
-
     %-surface type for face color-%
     obj.data{surfaceIndex}.type = 'surface';
-        
+
     %-scatter3d type for contour mesh lines-%
     obj.data{contourIndex}.type = 'scatter3d';
     obj.data{contourIndex}.mode = 'lines';
 
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     xData = meshData.XData;
     yData = meshData.YData;
@@ -63,8 +57,6 @@
     yDataContour = [yDataContourDir1(:); yDataContourDir2(:)];
     zDataContour = [zDataContourDir1(:); zDataContourDir2(:)];
 
-    %---------------------------------------------------------------------%
-
     %-set data on surface-%
     obj.data{surfaceIndex}.x = xDataSurface;
     obj.data{surfaceIndex}.y = yDataSurface;
@@ -85,19 +77,13 @@
     obj.data{surfaceIndex}.contours.y.size = mean(diff(yData));
     obj.data{surfaceIndex}.contours.y.show = true;
 
-    %---------------------------------------------------------------------%
-
     %-set data on scatter3d-%
     obj.data{contourIndex}.x = xDataContour(:);
     obj.data{contourIndex}.y = yDataContour(:);
     obj.data{contourIndex}.z = zDataContour(:);
 
-    %---------------------------------------------------------------------%
-
     %-COLORING-%
 
-    %---------------------------------------------------------------------%
-
     %-get colormap-%
     cMap = figureData.Colormap;
     fac = 1/(length(cMap)-1);
@@ -105,26 +91,20 @@
 
     for c = 1: length(cMap)
         colorScale{c} = {(c-1)*fac, ...
-                sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                getStringColor(round(255*cMap(c, :)))};
     end
 
-    %---------------------------------------------------------------------%
-
     %-get edge color-%
     if isnumeric(meshData.EdgeColor)
-        cDataContour = sprintf("rgb(%d,%d,%d)", ...
-                round(255*meshData.EdgeColor));
-
+        cDataContour = getStringColor(round(255*meshData.EdgeColor));
     elseif strcmpi(meshData.EdgeColor, 'interp')
         cDataContour = zDataContour(:);
         obj.data{contourIndex}.line.colorscale = colorScale;
 
         obj.data{surfaceIndex}.contours.x.show = false;
         obj.data{surfaceIndex}.contours.y.show = false;
-
     elseif strcmpi(meshData.EdgeColor, 'flat')
         cData = meshData.CData;
-
         if size(cData, 3) ~= 1
             cMap = unique( reshape(cData, ...
                 [size(cData,1)*size(cData,2), size(cData,3)]), 'rows' );
@@ -135,7 +115,7 @@
 
             for c = 1: length(cMap)
                 edgeColorScale{c} = {(c-1)*fac, ...
-                        sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                        getStringColor(round(255*cMap(c, :)))};
             end
 
             obj.data{surfaceIndex}.line.cmin = 0;
@@ -154,12 +134,10 @@
 
         obj.data{surfaceIndex}.contours.x.show = false;
         obj.data{surfaceIndex}.contours.y.show = false;
-
     elseif strcmpi(meshData.EdgeColor, 'none')
         cDataContour = 'rgba(0,0,0,0)';
         obj.data{surfaceIndex}.contours.x.show = false;
         obj.data{surfaceIndex}.contours.y.show = false;
-
     end
 
     %-set edge color-%
@@ -167,8 +145,6 @@
     obj.data{surfaceIndex}.contours.x.color = cDataContour;
     obj.data{surfaceIndex}.contours.y.color = cDataContour;
 
-    %---------------------------------------------------------------------%
-
     %-get face color-%
     faceColor = meshData.FaceColor;
 
@@ -185,7 +161,7 @@
         cDataSurface = double(cDataSurface) + axisData.CLim(1);
         for c = 1: size(cMapSurface, 1)
             colorScale{c} = {(c-1)*fac, ...
-                    sprintf('rgba(%f,%f,%f, 1)', cMapSurface(c, :))};
+                    getStringColor(round(255*cMapSurface(c, :)), 1)};
         end
         obj.data{surfaceIndex}.cmin = axisData.CLim(1);
         obj.data{surfaceIndex}.cmax = axisData.CLim(2);
@@ -213,7 +189,7 @@
             fac = 1/(length(cMap)-1);
             for c = 1: length(cMap)
                 colorScale{c} = {(c-1)*fac, ...
-                        sprintf("rgb(%d,%d,%d)", round(255*cMap(c, :)))};
+                        getStringColor(round(255*cMap(c, :)))};
             end
         else
             cDataSurface = cData;
@@ -243,13 +219,9 @@
         obj.data{surfaceIndex}.lighting.ambient = 0.3;
     end
 
-    %-opacity-%
     obj.data{surfaceIndex}.opacity = meshData.FaceAlpha;
 
-    %---------------------------------------------------------------------%
-
     %-line style-%
-
     obj.data{contourIndex}.line.width = 3*meshData.LineWidth;
 
     if strcmpi(meshData.LineStyle, '-')
@@ -260,11 +232,7 @@
         obj.data{surfaceIndex}.contours.y.show = false;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-SCENE CONFIGUTATION-%
-
-    %---------------------------------------------------------------------%
+    %-SCENE CONFIGURATION-%
 
     %-aspect ratio-%
     asr = obj.PlotOptions.AspectRatio;
@@ -273,8 +241,6 @@
         if ischar(asr)
             scene.aspectmode = asr;
         elseif isvector(ar) && length(asr) == 3
-            xar = asr(1);
-            yar = asr(2);
             zar = asr(3);
         end
     else
@@ -289,8 +255,6 @@
     scene.aspectratio.y = 1.0*xyar;
     scene.aspectratio.z = zar;
 
-    %---------------------------------------------------------------------%
-
     %-camera eye-%
     ey = obj.PlotOptions.CameraEye;
 
@@ -302,17 +266,29 @@
         end
     else
         %-define as default-%
-        xey = - xyar; if xey>0 xfac = -0.0; else xfac = 0.0; end
-        yey = - xyar; if yey>0 yfac = -0.3; else yfac = 0.3; end
-        if zar>0 zfac = -0.1; else zfac = 0.1; end
-        
-        scene.camera.eye.x = xey + xfac*xey; 
+        xey = - xyar;
+        if xey>0
+            xfac = -0.0;
+        else
+            xfac = 0.0;
+        end
+        yey = - xyar;
+        if yey>0
+            yfac = -0.3;
+        else
+            yfac = 0.3;
+        end
+        if zar>0
+            zfac = -0.1;
+        else
+            zfac = 0.1;
+        end
+
+        scene.camera.eye.x = xey + xfac*xey;
         scene.camera.eye.y = yey + yfac*yey;
         scene.camera.eye.z = zar + zfac*zar;
     end
 
-    %---------------------------------------------------------------------%
-
     %-scene axis configuration-%
 
     scene.xaxis.range = axisData.XLim;
@@ -356,10 +332,8 @@
     scene.yaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
     scene.zaxis.tickfont.family = matlab2plotlyfont(axisData.FontName);
 
-    %---------------------------------------------------------------------%
-
     %-SET SCENE TO LAYOUT-%
-    obj.layout = setfield(obj.layout, sprintf('scene%d', xsource), scene);
+    obj.layout.("scene" + xsource) = scene;
 
     obj.data{surfaceIndex}.name = meshData.DisplayName;
     obj.data{contourIndex}.name = meshData.DisplayName;
@@ -368,17 +342,10 @@
     obj.data{surfaceIndex}.visible = strcmp(meshData.Visible,'on');
     obj.data{contourIndex}.visible = strcmp(meshData.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    leg = meshData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch meshData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{surfaceIndex}.showlegend = true;
+        case "off"
+            obj.data{surfaceIndex}.showlegend = false;
     end
-
-    obj.data{surfaceIndex}.showlegend = showleg;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateTernaryContour.m b/plotly/plotlyfig_aux/handlegraphics/updateTernaryContour.m
index 1924905a..866cbd93 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateTernaryContour.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateTernaryContour.m
@@ -8,7 +8,7 @@
     figureData = obj.State.Figure.Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
+    xsource = findSourceAxis(obj, axIndex);
 
     %=====================================================================%
     %
@@ -17,7 +17,7 @@
     %=====================================================================%
 
     if strcmpi(ternaryData.Fill, 'on')
-        fillContours(obj, ternaryIndex)        
+        fillContours(obj, ternaryIndex)
     end
 
     %=====================================================================%
@@ -42,8 +42,7 @@
 
         %-get edge color-%
         if isnumeric(ternaryData.LineColor)
-            lineColor{c} = sprintf("rgb(%d,%d,%d)", ...
-                    round(255*ternaryData.LineColor));
+            lineColor{c} = getStringColor(round(255*ternaryData.LineColor));
         elseif strcmpi(ternaryData.LineColor, "flat")
             cMap = figureData.Colormap;
             cMin = axisData.CLim(1);
@@ -54,8 +53,7 @@
             cData = (cData - cMin)/(cMax - cMin);
             cData = 1 + floor( cData*(nColors-1) );
 
-            lineColor{c} = sprintf("rgb(%d,%d,%d)", ...
-                    round(255*cMap(cData,:)));
+            lineColor{c} = getStringColor(round(255*cMap(cData,:)));
         elseif strcmpi(ternaryData.LineColor, "none")
             lineColor{c} = "rgba(0,0,0,0)";
         end
@@ -64,8 +62,6 @@
         c = c + 1;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set contour lines-%
     for c = 1:length(xData)
         %-get trace index-%
@@ -75,16 +71,12 @@
             obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
             traceIndex = obj.PlotOptions.nPlots;
         end
-        
-        %-----------------------------------------------------------------%
 
         %-set trace-%
         obj.data{traceIndex}.type = 'scatterternary';
         obj.data{traceIndex}.mode = 'lines';
         obj.data{traceIndex}.subplot = sprintf('ternary%d', xsource+1);
 
-        %-----------------------------------------------------------------%
-
         %-convert from cartesian coordinates to trenary points-%
         aData = yData{c}/sin(deg2rad(60));
         bData = 1 - xData{c} - yData{c}*cot(deg2rad(60));
@@ -93,47 +85,18 @@
         obj.data{traceIndex}.a = aData;
         obj.data{traceIndex}.b = bData;
 
-        %-----------------------------------------------------------------%
-
         %-line settings-%
         obj.data{traceIndex}.line.width = 1.0*ternaryData.LineWidth;
         obj.data{traceIndex}.line.color = lineColor{c};
-
-        switch ternaryData.LineStyle
-            case '-'
-                obj.data{traceIndex}.line.dash = 'solid';
-            case '--'
-                obj.data{traceIndex}.line.dash = 'dash';
-            case '-.'
-                obj.data{traceIndex}.line.dash = 'dashdot';
-            case ':'
-                obj.data{traceIndex}.line.dash = 'dot';
-        end
-
-        %-----------------------------------------------------------------%
+        obj.data{traceIndex}.line.dash = getLineDash(ternaryData.LineStyle);
 
         %-some trace settings-%
         obj.data{traceIndex}.name = ternaryData.DisplayName;
         obj.data{traceIndex}.showscale = false;
         obj.data{traceIndex}.visible = strcmp(ternaryData.Visible,'on');
 
-        %-----------------------------------------------------------------%
-
-        %-trace legend-%
-        % leg = get(ternaryData.Annotation);
-        % legInfo = get(leg.LegendInformation);
-
-        % switch legInfo.IconDisplayStyle
-        %     case 'on'
-        %         showleg = true;
-        %     case 'off'
-        %         showleg = false;
-        % end
 
-        % obj.data{traceIndex}.showlegend = showleg;
         obj.data{traceIndex}.showlegend = false;
-
-        %-----------------------------------------------------------------%
     end
 
     %=====================================================================%
@@ -147,7 +110,6 @@
 
 
 function fillContours(obj, ternaryIndex)
-
     %-AXIS INDEX-%
     axIndex = obj.getAxisIndex(obj.State.Plot(ternaryIndex).AssociatedAxis);
 
@@ -157,9 +119,7 @@ function fillContours(obj, ternaryIndex)
     figureData = obj.State.Figure.Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
-
-    %---------------------------------------------------------------------%
+    xsource = findSourceAxis(obj, axIndex);
 
     %-get zLevels-%
     contourMatrix = ternaryData.ContourMatrix;
@@ -176,8 +136,6 @@ function fillContours(obj, ternaryIndex)
 
     zLevel = sort(zLevel);
 
-    %---------------------------------------------------------------------%
-
     %-get close contours-%
     resizeScale = 1000/mean(size(ternaryData.XData));
     xDataResize = imresize(ternaryData.XData, resizeScale, 'triangle');
@@ -190,11 +148,9 @@ function fillContours(obj, ternaryIndex)
 
     for l = 1:length(zLevel)-1
         B = getBoundaries(zDataResize, zLevel(l), zLevel(l+1));
-
         for k = 1:length(B)
             outStruct = getContourData(B{k}, zLevel(l), ...
                 xDataResize, yDataResize, zDataResize, cLim, cMap);
-
             xData{c} = outStruct.xData;
             yData{c} = outStruct.yData;
             contourArea(c) = outStruct.contourArea;
@@ -210,7 +166,6 @@ function fillContours(obj, ternaryIndex)
     for k = 1:length(B)
         outStruct = getContourData(B{k}, zLevel(end), ...
             xDataResize, yDataResize, zDataResize, cLim, cMap);
-
         xData{c} = outStruct.xData;
         yData{c} = outStruct.yData;
         contourArea(c) = outStruct.contourArea;
@@ -225,7 +180,6 @@ function fillContours(obj, ternaryIndex)
     for k = 1:length(B)
         outStruct = getContourData(B{k}, zLevel(1), ...
             xDataResize, yDataResize, zDataResize, cLim, cMap);
-
         xData{c} = outStruct.xData;
         yData{c} = outStruct.yData;
         contourArea(c) = outStruct.contourArea;
@@ -234,8 +188,6 @@ function fillContours(obj, ternaryIndex)
         c = c + 1;
     end
 
-    %---------------------------------------------------------------------%
-
     %-sort contours by area size-%
     [~, idx] = sort(contourArea, 'descend');
 
@@ -249,8 +201,6 @@ function fillContours(obj, ternaryIndex)
     yData = yDataSorted;
     lineColor = lineColorSorted;
 
-    %---------------------------------------------------------------------%
-
     %-set contour fill-%
     for c = 1:length(xData)
         %-get trace index-%
@@ -260,16 +210,12 @@ function fillContours(obj, ternaryIndex)
             obj.PlotOptions.nPlots = obj.PlotOptions.nPlots + 1;
             traceIndex = obj.PlotOptions.nPlots;
         end
-        
-        %-----------------------------------------------------------------%
 
         %-set trace-%
         obj.data{traceIndex}.type = 'scatterternary';
         obj.data{traceIndex}.mode = 'lines';
         obj.data{traceIndex}.subplot = sprintf('ternary%d', xsource+1);
 
-        %-----------------------------------------------------------------%
-
         %-convert from cartesian coordinates to trenary points-%
         aData = yData{c}/sin(deg2rad(60));
         bData = 1 - xData{c} - yData{c}*cot(deg2rad(60));
@@ -278,40 +224,22 @@ function fillContours(obj, ternaryIndex)
         obj.data{traceIndex}.a = aData;
         obj.data{traceIndex}.b = bData;
 
-        %-----------------------------------------------------------------%
-
         %-line settings-%
         obj.data{traceIndex}.line.color = lineColor{c};
         obj.data{traceIndex}.line.shape = 'spline';
         obj.data{traceIndex}.line.smoothing = 1.3;
         obj.data{traceIndex}.line.width = 1.0*ternaryData.LineWidth;
-
-        switch ternaryData.LineStyle
-            case '-'
-                obj.data{traceIndex}.line.dash = 'solid';
-            case '--'
-                obj.data{traceIndex}.line.dash = 'dash';
-            case '-.'
-                obj.data{traceIndex}.line.dash = 'dashdot';
-            case ':'
-                obj.data{traceIndex}.line.dash = 'dot';
-        end
-
-        %-----------------------------------------------------------------%
+        obj.data{traceIndex}.line.dash = getLineDash(ternaryData.LineStyle);
 
         %-fill settings-%
         obj.data{traceIndex}.fill = 'toself';
         obj.data{traceIndex}.fillcolor = lineColor{c};
 
-        %-----------------------------------------------------------------%
-
         %-some trace settings-%
         obj.data{traceIndex}.name = ternaryData.DisplayName;
         obj.data{traceIndex}.showscale = false;
         obj.data{traceIndex}.visible = strcmp(ternaryData.Visible,'on');
 
-        %-----------------------------------------------------------------%
-
         %-trace legend-%
         obj.data{traceIndex}.showlegend = false;
     end
@@ -325,9 +253,7 @@ function ternaryAxes(obj, ternaryIndex)
     axisData = obj.State.Plot(ternaryIndex).AssociatedAxis;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
-
-    %---------------------------------------------------------------------%
+    xsource = findSourceAxis(obj, axIndex);
 
     %-set domain plot-%
     xo = axisData.Position(1);
@@ -338,8 +264,6 @@ function ternaryAxes(obj, ternaryIndex)
     ternary.domain.x = min([xo xo + w],1);
     ternary.domain.y = min([yo yo + h],1);
 
-    %---------------------------------------------------------------------%
-
     %-label settings-%
     l = 1; t = 1;
     labelLetter = {'b', 'a', 'c'};
@@ -347,7 +271,6 @@ function ternaryAxes(obj, ternaryIndex)
     for n = 1:length(axisData.Children)
         if strcmpi(axisData.Children(n).Type, 'text')
             stringText = axisData.Children(n).String;
-
             if any(isletter(stringText))
                 labelIndex(l) = n;
                 l = l + 1;
@@ -362,7 +285,7 @@ function ternaryAxes(obj, ternaryIndex)
         n = labelIndex(l);
 
         labelText = axisData.Children(n).String;
-        labelFontColor = sprintf('rgb(%f,%f,%f)', axisData.Children(n).Color);
+        labelFontColor = getStringColor(round(255*axisData.Children(n).Color));
         labelFontSize = 1.5 * axisData.Children(n).FontSize;
         labelFontFamily = matlab2plotlyfont(axisData.Children(n).FontName);
 
@@ -372,15 +295,13 @@ function ternaryAxes(obj, ternaryIndex)
         ternary.(labelLetter(l) + "axis").title.font.family = labelFontFamily;
     end
 
-    %---------------------------------------------------------------------%
-
     %-tick settings-%
     t0 = tickIndex(1); t1 = tickIndex(2);
     tick0 = str2num(axisData.Children(t0).String);
     tick1 = str2num(axisData.Children(t1).String);
     dtick = tick1 - tick0;
-    
-    tickFontColor = sprintf('rgb(%f,%f,%f)', axisData.Children(t0).Color);
+
+    tickFontColor = getStringColor(round(255*axisData.Children(t0).Color));
     tickFontSize = 1.0 * axisData.Children(t0).FontSize;
     tickFontFamily = matlab2plotlyfont(axisData.Children(t0).FontName);
 
@@ -392,12 +313,8 @@ function ternaryAxes(obj, ternaryIndex)
         ternary.(labelLetter{l} + "axis").tickfont.family = tickFontFamily;
     end
 
-    %---------------------------------------------------------------------%
-
     %-set ternary axes to layout-%
-    obj.layout = setfield(obj.layout, sprintf('ternary%d', xsource+1), ternary);
-
-    %---------------------------------------------------------------------%
+    obj.layout.(sprintf('ternary%d', xsource+1)) = ternary;
 
     obj.PlotlyDefaults.isTernary = true;
 end
@@ -423,6 +340,5 @@ function ternaryAxes(obj, ternaryIndex)
     colorIndex = (colorIndex - cLim(1))/(cLim(2) - cLim(1));
     colorIndex = 1 + floor( colorIndex*(nColors-1) );
 
-    outStruct.lineColor = sprintf("rgb(%d,%d,%d)", ...
-            round(255*cMap(colorIndex,:)));
+    outStruct.lineColor = getStringColor(round(255*cMap(colorIndex,:)));
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateTernaryPlot.m b/plotly/plotlyfig_aux/handlegraphics/updateTernaryPlot.m
index f457c201..c81dbf6d 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateTernaryPlot.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateTernaryPlot.m
@@ -5,10 +5,9 @@
     %-GET DATA STRUCTURES-%
     ternaryData = obj.State.Plot(ternaryIndex).Handle;
     axisData = obj.State.Plot(ternaryIndex).AssociatedAxis;
-    figureData = obj.State.Figure.Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
+    xsource = findSourceAxis(obj, axIndex);
 
     %-ASSOCIATE TERNARY-AXES WITH LAYOUT-%
     obj.data{ternaryIndex}.subplot = sprintf('ternary%d', xsource+1);
@@ -32,8 +31,6 @@
         obj.data{ternaryIndex}.mode = 'none';
     end
 
-    %---------------------------------------------------------------------%
-
     %-get plot data-%
     xData = ternaryData.XData;
     yData = ternaryData.YData;
@@ -46,8 +43,6 @@
     obj.data{ternaryIndex}.a = aData;
     obj.data{ternaryIndex}.b = bData;
 
-    %---------------------------------------------------------------------%
-
     %-trace line settings-%
     obj.data{ternaryIndex}.line = extractLineLine(ternaryData);
     obj.data{ternaryIndex}.marker = extractLineMarker(ternaryData);
@@ -57,21 +52,13 @@
     obj.data{ternaryIndex}.showscale = false;
     obj.data{ternaryIndex}.visible = strcmp(ternaryData.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
-    %-legend-%
-    leg = ternaryData.Annotation;
-    legInfo = leg.LegendInformation;
-
-    switch legInfo.IconDisplayStyle
-        case 'on'
-            showleg = true;
-        case 'off'
-            showleg = false;
+    switch ternaryData.Annotation.LegendInformation.IconDisplayStyle
+        case "on"
+            obj.data{ternaryIndex}.showlegend = true;
+        case "off"
+            obj.data{ternaryIndex}.showlegend = false;
     end
 
-    obj.data{ternaryIndex}.showlegend = showleg;
-
     %=====================================================================%
     %
     %-UPDATE TERNARY AXES-%
@@ -87,8 +74,6 @@
     ternary.domain.x = min([xo xo + w],1);
     ternary.domain.y = min([yo yo + h],1);
 
-    %---------------------------------------------------------------------%
-
     %-label settings-%
     l = 1; t = 1;
     labelLetter = {'b', 'a', 'c'};
@@ -110,7 +95,7 @@
         n = labelIndex(l);
 
         labelText = axisData.Children(n).String;
-        labelFontColor = sprintf('rgb(%f,%f,%f)', axisData.Children(n).Color);
+        labelFontColor = getStringColor(round(255*axisData.Children(n).Color));
         labelFontSize = 1.5 * axisData.Children(n).FontSize;
         labelFontFamily = matlab2plotlyfont(axisData.Children(n).FontName);
 
@@ -120,15 +105,13 @@
         ternary.(labelLetter{l} + "axis").title.font.family = labelFontFamily;
     end
 
-    %---------------------------------------------------------------------%
-
     %-tick settings-%
     t0 = tickIndex(1); t1 = tickIndex(2);
     tick0 = str2num(axisData.Children(t0).String);
     tick1 = str2num(axisData.Children(t1).String);
     dtick = tick1 - tick0;
-    
-    tickFontColor = sprintf('rgb(%f,%f,%f)', axisData.Children(t0).Color);
+
+    tickFontColor = getStringColor(round(255*axisData.Children(t0).Color));
     tickFontSize = 1.0 * axisData.Children(t0).FontSize;
     tickFontFamily = matlab2plotlyfont(axisData.Children(t0).FontName);
 
@@ -140,12 +123,7 @@
         ternary.(labelLetter{l} + "axis").tickfont.family = tickFontFamily;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set ternary axes to layout-%
-    obj.layout = setfield(obj.layout, sprintf('ternary%d', xsource+1), ternary);
-
-    %---------------------------------------------------------------------%
+    obj.layout.(sprintf('ternary%d', xsource+1)) = ternary;
 
     obj.PlotlyDefaults.isTernary = true;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateTernaryPlotPro.m b/plotly/plotlyfig_aux/handlegraphics/updateTernaryPlotPro.m
index 220bea88..36deeb4b 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateTernaryPlotPro.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateTernaryPlotPro.m
@@ -8,7 +8,7 @@
     figureData = obj.State.Figure.Handle;
 
     %-CHECK FOR MULTIPLE AXES-%
-    [xsource, ysource] = findSourceAxis(obj, axIndex);
+    xsource = findSourceAxis(obj, axIndex);
 
     %=====================================================================%
     %
@@ -20,8 +20,6 @@
     xData = ternaryData.XData;
     yData = ternaryData.YData;
 
-    %---------------------------------------------------------------------%
-
     %-set trace-%
     for t = 1:size(xData,2)
         %-get new ternaryIndex-%
@@ -30,14 +28,10 @@
             ternaryIndex = obj.PlotOptions.nPlots;
         end
 
-        %-----------------------------------------------------------------%
-
         %-trace type-%
         obj.data{ternaryIndex}.type = 'scatterternary';
         obj.data{ternaryIndex}.subplot = sprintf('ternary%d', xsource+1);
 
-        %-----------------------------------------------------------------%
-
         %-set mode and properties for trace-%
         if ~strcmpi('none', ternaryData.Marker) && ~strcmpi('none', ternaryData.LineStyle)
             obj.data{ternaryIndex}.mode = 'lines+markers';
@@ -55,8 +49,6 @@
             obj.data{ternaryIndex}.mode = 'none';
         end
 
-        %-----------------------------------------------------------------%
-
         %-convert from cartesian coordinates to trenary points-%
         yTernData = yData(:,t); yTernData(end+1) = yData(1,t);
         xTernData = xData(:,t); xTernData(end+1) = xData(1,t);
@@ -64,14 +56,10 @@
         aData = yTernData/sin(deg2rad(60));
         bData = 1 - xTernData - yTernData*cot(deg2rad(60));
 
-        %-----------------------------------------------------------------%
-
         %-set plot data-%
         obj.data{ternaryIndex}.a = aData;
         obj.data{ternaryIndex}.b = bData;
 
-        %-----------------------------------------------------------------%
-
         %-some trace properties-%
         obj.data{ternaryIndex}.name = ternaryData.DisplayName;
         obj.data{ternaryIndex}.showscale = false;
@@ -81,7 +69,7 @@
         faceColor = ternaryData.FaceColor;
 
         if isnumeric(faceColor)
-            fillColor = sprintf("rgb(%d,%d,%d)", round(255*faceColor));
+            fillColor = getStringColor(round(255*faceColor));
         else
             cMap = figureData.Colormap;
             nColors = size(cMap,1);
@@ -101,15 +89,13 @@
                             cData = max(min(cData, cMax), cMin);
                             cData = (cData - cMin)/diff(axisData.CLim);
                             cData = 1 + floor( cData*(nColors-1) );
-                            fillColor = sprintf("rgb(%d,%d,%d)", ...
-                                    round(255*cMap(cData,:)));
+                            fillColor = getStringColor(round(255*cMap(cData,:)));
                         case 'direct'
-                            fillColor = sprintf("rgb(%d,%d,%d)", ...
-                                    round(255*cMap(ternary(1,t),:)));
+                            fillColor = getStringColor(round(255*cMap(ternary(1,t),:)));
                     end
             end
         end
-        
+
         obj.data{ternaryIndex}.fillcolor = fillColor;
         obj.data{ternaryIndex}.fill = 'toself';
         obj.data{ternaryIndex}.showlegend = false;
@@ -130,8 +116,6 @@
     ternary.domain.x = min([xo xo + w],1);
     ternary.domain.y = min([yo yo + h],1);
 
-    %---------------------------------------------------------------------%
-
     %-label settings-%
     l = 1; t = 1;
     labelLetter = {'b', 'a', 'c'};
@@ -154,7 +138,7 @@
         n = labelIndex(l);
 
         labelText = axisData.Children(n).String;
-        labelFontColor = sprintf('rgb(%f,%f,%f)', axisData.Children(n).Color);
+        labelFontColor = getStringColor(round(255*axisData.Children(n).Color));
         labelFontSize = 1.5 * axisData.Children(n).FontSize;
         labelFontFamily = matlab2plotlyfont(axisData.Children(n).FontName);
 
@@ -164,15 +148,13 @@
         ternary.(labelLetter{l} + "axis").title.font.family = labelFontFamily;
     end
 
-    %---------------------------------------------------------------------%
-
     %-tick settings-%
     t0 = tickIndex(1); t1 = tickIndex(2);
     tick0 = str2num(axisData.Children(t0).String);
     tick1 = str2num(axisData.Children(t1).String);
     dtick = tick1 - tick0;
 
-    tickFontColor = sprintf('rgb(%f,%f,%f)', axisData.Children(t0).Color);
+    tickFontColor = getStringColor(round(255*axisData.Children(t0).Color));
     tickFontSize = 1.0 * axisData.Children(t0).FontSize;
     tickFontFamily = matlab2plotlyfont(axisData.Children(t0).FontName);
 
@@ -184,12 +166,7 @@
         ternary.(labelLetter{l} + "axis").tickfont.family = tickFontFamily;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-set ternary axes to layout-%
-    obj.layout = setfield(obj.layout, sprintf('ternary%d', xsource+1), ternary);
-
-    %---------------------------------------------------------------------%
+    obj.layout.(sprintf('ternary%d', xsource+1)) = ternary;
 
     obj.PlotlyDefaults.isTernary = true;
 end
diff --git a/plotly/plotlyfig_aux/handlegraphics/updateWordcloud.m b/plotly/plotlyfig_aux/handlegraphics/updateWordcloud.m
index b84fcfd5..e7ee0c05 100644
--- a/plotly/plotlyfig_aux/handlegraphics/updateWordcloud.m
+++ b/plotly/plotlyfig_aux/handlegraphics/updateWordcloud.m
@@ -5,17 +5,12 @@ function updateWordcloud(obj,scatterIndex)
     %-SCATTER DATA STRUCTURE- %
     scatter_data = obj.State.Plot(scatterIndex).Handle;
 
-
     %-CHECK FOR MULTIPLE AXES-%
     [xsource, ysource] = findSourceAxis(obj,axIndex);
 
-    %---------------------------------------------------------------------%
-
     %-scatter type-%
     obj.data{scatterIndex}.type = 'scatter';
 
-    %---------------------------------------------------------------------%
-
     %-format the mesh domain-%
     maxx = scatter_data.MaxDisplayWords;
     npoints = round(sqrt(maxx));
@@ -33,26 +28,18 @@ function updateWordcloud(obj,scatterIndex)
     xdata = xdata + xrand;
     ydata = ydata + yrand;
 
-    %---------------------------------------------------------------------%
-
     %-make oval effect-%
     inds = (xdata-0.5*xdomain(end)).^2 + (ydata-0.5*ydomain(end)).^2 < (0.5*maxx)^2;
     xdata(~inds) = NaN;
     ydata(~inds) = NaN;
 
-    %---------------------------------------------------------------------%
-
     %-get frequency-%
     [B, inds] = sort(scatter_data.SizeData, 'descend');
 
-    %---------------------------------------------------------------------%
-
     %-take more freq words-%
     nwords = numel(xdata);
     inds = inds(1:nwords);
 
-    %---------------------------------------------------------------------%
-
     %-get indices for distribution-%
     middle = round(nwords*0.5);
     inds = inds(mod([1:nwords] + middle, nwords)+1);
@@ -62,8 +49,6 @@ function updateWordcloud(obj,scatterIndex)
     inds(inds1) = inds_aux(inds2);
     inds(inds2) = inds_aux(inds1);
 
-    %---------------------------------------------------------------------%
-
     %-exchange columns-%
     inds = reshape(inds, size(xdata));
     inds_aux = inds;
@@ -75,21 +60,14 @@ function updateWordcloud(obj,scatterIndex)
     inds(:,mc+2) = inds_aux(:,mc+1);
     inds = inds(:);
 
-    %---------------------------------------------------------------------%
-
     %-get data to wordcloud-%
-
-    % sizedata
     sizedata = scatter_data.SizeData(inds);
 
-    % worddata
     worddata = cell(nwords,1);
     for w = 1:nwords
         worddata{w} = char(scatter_data.WordData(inds(w)));
     end
 
-    %---------------------------------------------------------------------%
-
     %-sent data to plotly-%
     obj.data{scatterIndex}.mode = 'text';
     obj.data{scatterIndex}.x = xdata(:);
@@ -97,8 +75,6 @@ function updateWordcloud(obj,scatterIndex)
     obj.data{scatterIndex}.text = worddata;
     obj.data{scatterIndex}.textfont.size = sizedata;
 
-    %---------------------------------------------------------------------%
-
     %-coloring-%
     is_colormap = size(scatter_data.Color, 1) > 1;
     col = cell(nwords, 1);
@@ -106,29 +82,21 @@ function updateWordcloud(obj,scatterIndex)
     if ~is_colormap
         for w=1:nwords
             if B(4) > sizedata(w)
-                col{w} = sprintf("rgb(%d,%d,%d)", ...
-                        round(255*scatter_data.Color));
+                col{w} = getStringColor(round(255*scatter_data.Color));
             else
-                col{w} = sprintf("rgb(%d,%d,%d)", ...
-                        round(255*scatter_data.HighlightColor));
+                col{w} = getStringColor(round(255*scatter_data.HighlightColor));
             end
         end
     else
         for w=1:nwords
-            col{w} = sprintf("rgb(%d,%d,%d)", ...
-                    round(255*scatter_data.Color(inds(w), :)));
+            col{w} = getStringColor(round(255*scatter_data.Color(inds(w), :)));
         end
     end
 
     obj.data{scatterIndex}.textfont.color = col;
-
-    %---------------------------------------------------------------------%
-
     obj.data{scatterIndex}.textfont.family = matlab2plotlyfont(scatter_data.FontName);
     obj.data{scatterIndex}.visible = strcmp(scatter_data.Visible,'on');
 
-    %---------------------------------------------------------------------%
-
     %-set layout-%
     xaxis.showgrid = false;
     xaxis.showticklabels = false;
@@ -146,10 +114,8 @@ function updateWordcloud(obj,scatterIndex)
     xaxis.domain = min([xo xo + w],1);
     yaxis.domain = min([yo yo + h],1);
 
-    obj.layout = setfield(obj.layout, sprintf('xaxis%d',xsource), xaxis);
-    obj.layout = setfield(obj.layout, sprintf('yaxis%d',ysource), yaxis);
-
-    %---------------------------------------------------------------------%
+    obj.layout.(sprintf('xaxis%d',xsource)) = xaxis;
+    obj.layout.(sprintf('yaxis%d',ysource)) = yaxis;
 
     obj.layout.annotations{1}.xref = 'paper';
     obj.layout.annotations{1}.yref = 'paper';
@@ -160,4 +126,3 @@ function updateWordcloud(obj,scatterIndex)
     obj.layout.annotations{1}.font.color = 'rgb(0,0,0)';
     obj.layout.annotations{1}.font.size = 15;
 end
-
diff --git a/plotly/plotlyfig_aux/helpers/cleanFeedTitle.m b/plotly/plotlyfig_aux/helpers/cleanFeedTitle.m
index 657796ed..68d02f96 100644
--- a/plotly/plotlyfig_aux/helpers/cleanFeedTitle.m
+++ b/plotly/plotlyfig_aux/helpers/cleanFeedTitle.m
@@ -1,62 +1,58 @@
 function cleanFeedTitle(obj)
-% cleanFeedTitle checks all annotations for a title. The first title found 
-% is used as the layout.title (Plotly title). This should correspond to the 
+% cleanFeedTitle checks all annotations for a title. The first title found
+% is used as the layout.title (Plotly title). This should correspond to the
 % title of the first plot added to the MATLAB figure. cleanFeedTitle should
-% be called after the style keys have been stripped --> it must override 
+% be called after the style keys have been stripped --> it must override
 % certain style keys as a workaround.
 
-% -- Single plot figure -- % 
+% -- Single plot figure -- %
 
-% If only a single plot is present, the title will be set as the Plotly 
+% If only a single plot is present, the title will be set as the Plotly
 % title.
 
-% -- Multiple plot figure -- % 
+% -- Multiple plot figure -- %
 
-% If multiple plots are present, only the text of the title is used so 
-% that the title appears in the feed. The text color is set so that the 
-% Plotly title is hidden from the graph, favouring the 
-% annotation title (with its flexibilty over positioning). 
+% If multiple plots are present, only the text of the title is used so
+% that the title appears in the feed. The text color is set so that the
+% Plotly title is hidden from the graph, favouring the
+% annotation title (with its flexibility over positioning).
 
     if ~isempty(obj.State.Figure.NumTexts)
-        
-        % grab the title of the first plot added to the figure. 
+        % grab the title of the first plot added to the figure.
         first_title_index = find(arrayfun(@(x)(isequal(x.Title, 1)), ...
             obj.State.Text), 1, 'first');
-        
+
         if ~isempty(first_title_index)
-           
-            first_title_handle = obj.State.Text(first_title_index).Handle; 
-            
+            first_title_handle = obj.State.Text(first_title_index).Handle;
+
             % grab the string of the first title
-            annotation_index = obj.getAnnotationIndex(first_title_handle); 
+            annotation_index = obj.getAnnotationIndex(first_title_handle);
             first_title = obj.layout.annotations{annotation_index}.text;
-            
+
             % use that as the filename
             obj.layout.title = first_title;
 
             % check for a single plot
             if (obj.State.Figure.NumPlots == 1)
-                
                 % grab the font style if not stripped
                 if ~obj.PlotOptions.Strip
                     obj.layout.titlefont = ...
                         obj.layout.annotations{annotation_index}.font;
                 end
-                
-                % remove the annotation 
+
+                % remove the annotation
                 obj.layout.annotations(annotation_index) = [];
                 obj.State.Figure.NumTexts = obj.State.Figure.NumTexts - 1;
-                obj.State.Text(first_title_index) = []; 
-                
+                obj.State.Text(first_title_index) = [];
+
                 % adjust the top margin for the title
                 obj.layout.margin.t = max(...
                     obj.PlotlyDefaults.MinTitleMargin,...
-                    obj.layout.margin.t);   
+                    obj.layout.margin.t);
             else
-                
                 % multiple plots ---> make the title invisible
-                obj.layout.titlefont.color = 'rgba(0,0,0,0)';   
+                obj.layout.titlefont.color = 'rgba(0,0,0,0)';
             end
         end
     end
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/helpers/convertDuration.m b/plotly/plotlyfig_aux/helpers/convertDuration.m
index 853b2671..b47538fd 100644
--- a/plotly/plotlyfig_aux/helpers/convertDuration.m
+++ b/plotly/plotlyfig_aux/helpers/convertDuration.m
@@ -2,22 +2,22 @@
     switch (duration.Format)
         case 's'
             converted = seconds(duration);
-            type = 'sec';     
+            type = 'sec';
         case 'm'
             converted = minutes(duration);
             type = 'min';
         case 'h'
-            converted = hours(duration); 
+            converted = hours(duration);
             type = 'hr';
         case 'd'
-            converted = days(duration); 
-            type = 'days';    
+            converted = days(duration);
+            type = 'days';
         case 'y'
-            converted = years(duration); 
-            type = 'yrs';   
+            converted = years(duration);
+            type = 'yrs';
         otherwise
-            % no convertion is applied
+            % no conversion is applied
             converted = duration;
             type = '';
     end
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/helpers/extractAreaFace.m b/plotly/plotlyfig_aux/helpers/extractAreaFace.m
index b50ede67..049a624f 100644
--- a/plotly/plotlyfig_aux/helpers/extractAreaFace.m
+++ b/plotly/plotlyfig_aux/helpers/extractAreaFace.m
@@ -3,46 +3,29 @@
     % OF TYPE "PATCH". THESE OBJECTS ARE USED IN AREASERIES
     % BARSERIES, CONTOURGROUP, SCATTERGROUP.
 
-    %---------------------------------------------------------------------%
-
     %-AXIS STRUCTURE-%
-    axis_data = ancestor(area_data,"axes");
-
-    %-FIGURE STRUCTURE-%
-    figure_data = ancestor(area_data,"figure");
-
-    %---------------------------------------------------------------------%
-
-    %-INITIALIZE OUTPUT-%
-    face = struct();
-
-    %---------------------------------------------------------------------%
-
-    %--FACE FILL COLOR--%
-
-    %-figure colormap-%
-    colormap = figure_data.Colormap;
+    cLim = ancestor(area_data,"axes").CLim;
+    colormap = ancestor(area_data, "figure").Colormap;
 
-    % face face color
     MarkerColor = area_data.FaceColor;
     if isnumeric(MarkerColor)
-        col = [round(255*MarkerColor) area_data.FaceAlpha];
-        facecolor = sprintf("rgba(%d,%d,%d,%f)", col);
+        col = MarkerColor;
+        alpha = area_data.FaceAlpha;
     else
         switch MarkerColor
             case "none"
-                facecolor = "rgba(0,0,0,0)";
+                col = [0 0 0];
+                alpha = 0;
             case "flat"
                 areaACData = area_data.getColorAlphaDataExtents;
-                capCD = max(min(areaACData(1,1),axis_data.CLim(2)), ...
-                        axis_data.CLim(1));
-                scalefactor = (capCD - axis_data.CLim(1)) ...
-                        / diff(axis_data.CLim);
-                col = 255*(colormap(1 + floor(scalefactor ...
-                        * (length(colormap)-1)),:));
-                col = [round(col) area_data.FaceAlpha];
-                facecolor = sprintf("rgba(%d,%d,%d,%f)", col);
+                capCD = max(min(areaACData(1,1),cLim(2)), cLim(1));
+                scalefactor = (capCD - cLim(1)) / diff(cLim);
+                col = colormap(1 + floor(scalefactor ...
+                        * (length(colormap)-1)),:);
+                alpha = area_data.FaceAlpha;
         end
     end
-    face.color = facecolor;
+    face = struct(...
+        "color", getStringColor(round(255*col), alpha) ...
+    );
 end
diff --git a/plotly/plotlyfig_aux/helpers/extractAreaLine.m b/plotly/plotlyfig_aux/helpers/extractAreaLine.m
index 126be6be..6e10a2a2 100644
--- a/plotly/plotlyfig_aux/helpers/extractAreaLine.m
+++ b/plotly/plotlyfig_aux/helpers/extractAreaLine.m
@@ -3,46 +3,19 @@
     % OF TYPE "LINE". THESE OBJECTS ARE USED IN LINESERIES,
     % STAIRSERIES, STEMSERIES, BASELINESERIES, AND BOXPLOTS
 
-    %---------------------------------------------------------------------%
-
-    %-INITIALIZE OUTPUT-%
     line = struct();
+    if area_data.LineStyle == "none"
+        return
+    end
 
-    %---------------------------------------------------------------------%
-
-    %-AREA LINE COLOR-%
-
-    if area_data.LineStyle~="none"
-        % marker edge color
-        LineColor = area_data.EdgeColor;
-
-        if isnumeric(LineColor)
-            col = [round(255*LineColor) area_data.EdgeAlpha];
-            linecolor = sprintf("rgba(%d,%d,%d,%f)", col);
-        else
-            linecolor = "rgba(0,0,0,0)";
-        end
-
-        line.color = linecolor;
-
-        %-----------------------------------------------------------------%
-
-        %-PATCH LINE WIDTH (STYLE)-%
-        line.width = area_data.LineWidth;
-
-        %-----------------------------------------------------------------%
-
-        %-PATCH LINE DASH (STYLE)-%
-        switch area_data.LineStyle
-            case "-"
-                LineStyle = "solid";
-            case "--"
-                LineStyle = "dash";
-            case ":"
-                LineStyle = "dot";
-            case "-."
-                LineStyle = "dashdot";
-        end
-        line.dash = LineStyle;
+    LineColor = area_data.EdgeColor;
+    if isnumeric(LineColor)
+        linecolor = getStringColor(round(255*LineColor), area_data.EdgeAlpha);
+    else
+        linecolor = "rgba(0,0,0,0)";
     end
+
+    line.color = linecolor;
+    line.width = area_data.LineWidth;
+    line.dash = getLineDash(area_data.LineStyle);
 end
diff --git a/plotly/plotlyfig_aux/helpers/extractAxisData.m b/plotly/plotlyfig_aux/helpers/extractAxisData.m
index 1d127cb4..27f49498 100644
--- a/plotly/plotlyfig_aux/helpers/extractAxisData.m
+++ b/plotly/plotlyfig_aux/helpers/extractAxisData.m
@@ -1,6 +1,6 @@
 function [axis, exponentFormat] = extractAxisData(obj,axisData,axisName)
     % extract information related to each axis
-    %   axisData is the data extrated from the figure, axisName take the
+    %   axisData is the data extracted from the figure, axisName take the
     %   values "x" "y" or "z"
 
     %=====================================================================%
@@ -11,13 +11,14 @@
 
     %-general axis settings-%
     axisColor = round(255 * axisData.(axisName + "Color"));
-    axisColor = sprintf("rgb(%d,%d,%d)", axisColor);
+    axisColor = getStringColor(axisColor);
     lineWidth = max(1, ...
             axisData.LineWidth*obj.PlotlyDefaults.AxisLineIncreaseFactor);
 
-    try
+    if isprop(axisData, axisName + "Axis") ...
+            && isprop(axisData.(axisName + "Axis"), "Exponent")
         exponentFormat = axisData.(axisName + "Axis").Exponent;
-    catch
+    else
         exponentFormat = 0;
     end
 
@@ -28,8 +29,6 @@
     axis.linewidth = lineWidth;
     axis.exponentformat = obj.PlotlyDefaults.ExponentFormat;
 
-    %---------------------------------------------------------------------%
-
     %-general tick settings-%
     tickRotation = axisData.(axisName + "TickLabelRotation");
     tickLength = min(obj.PlotlyDefaults.MaxTickLength,...
@@ -52,8 +51,6 @@
             axis.ticks = "outside";
     end
 
-    %---------------------------------------------------------------------%
-
     %-set axis grid-%
     isGrid = axisData.(axisName + "Grid");
     isMinorGrid = axisData.(axisName + "MinorGrid");
@@ -65,18 +62,14 @@
         axis.showgrid = false;
     end
 
-    %---------------------------------------------------------------------%
-
     %-axis grid color-%
-    try
-        axis.gridcolor = sprintf("rgba(%d,%d,%d,%f)", ...
-                [round(255*axisData.GridColor) axisData.GridAlpha]);
-    catch
+    if isprop(axisData, "GridColor") && isprop(axisData, "GridAlpha")
+        axis.gridcolor = getStringColor( ...
+                round(255*axisData.GridColor), axisData.GridAlpha);
+    else
         axis.gridcolor = axisColor;
     end
 
-    %---------------------------------------------------------------------%
-
     %-axis type-%
     axis.type = axisData.(axisName + "Scale");
 
@@ -87,7 +80,7 @@
     %=====================================================================%
 
     %-get tick label data-%
-    tickLabels = toC(axisData.(axisName + "TickLabel"));
+    tickLabels = axisData.(axisName + "TickLabel");
     tickValues = axisData.(axisName + "Tick");
 
     if ischar(tickLabels)
@@ -103,13 +96,11 @@
     end
     assert(isequal(numel(tickLabels),numel(tickValues)));
 
-    %---------------------------------------------------------------------%
-
     %-there is not tick label case-%
     if isempty(tickValues)
         axis.ticks = "";
         axis.showticklabels = false;
-        axis.autorange = true; 
+        axis.autorange = true;
 
         switch axisData.Box
             case "on"
@@ -186,8 +177,6 @@
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-axis direction-%
     axisDirection = axisData.(axisName + "Dir");
 
@@ -205,31 +194,22 @@
     label = axisData.(axisName + "Label");
     labelData = label;
 
-    %---------------------------------------------------------------------%
-
     %-STANDARDIZE UNITS-%
     fontunits = label.FontUnits;
     label.FontUnits = "points";
 
-    %---------------------------------------------------------------------%
-
     %-title label settings-%
     if ~isempty(labelData.String)
         axis.title = parseString(labelData.String,labelData.Interpreter);
     end
 
-    axis.titlefont.color = sprintf("rgb(%d,%d,%d)", ...
-            round(255*labelData.Color));
+    axis.titlefont.color = getStringColor(round(255*labelData.Color));
     axis.titlefont.size = labelData.FontSize;
     axis.titlefont.family = matlab2plotlyfont(labelData.FontName);
 
-    %---------------------------------------------------------------------%
-
     %-REVERT UNITS-%
     label.FontUnits = fontunits;
 
-    %---------------------------------------------------------------------%
-
     %-set visibility conditions-%
     if strcmp(axisData.Visible, "on")
         axis.showline = true;
diff --git a/plotly/plotlyfig_aux/helpers/extractAxisDataMultipleYAxes.m b/plotly/plotlyfig_aux/helpers/extractAxisDataMultipleYAxes.m
index a43b7c45..e527fba0 100644
--- a/plotly/plotlyfig_aux/helpers/extractAxisDataMultipleYAxes.m
+++ b/plotly/plotlyfig_aux/helpers/extractAxisDataMultipleYAxes.m
@@ -1,8 +1,6 @@
 function [axis, axisLim] = extractAxisDataMultipleYAxes(obj,parentAxisData,yaxIndex)
     childAxisData = parentAxisData.YAxis(yaxIndex);
 
-    %---------------------------------------------------------------------%
-
     %-axis-side-%
     if yaxIndex == 1
         axis.side = 'left';
@@ -10,8 +8,6 @@
         axis.side = 'right';
     end
 
-    %---------------------------------------------------------------------%
-
     %-y-axis initializations-%
     axis.zeroline = false;
     axis.autorange = false;
@@ -19,100 +15,68 @@
     axis.tickfont.size = childAxisData.FontSize;
     axis.tickfont.family = matlab2plotlyfont(childAxisData.FontName);
 
-    %---------------------------------------------------------------------%
-
-    ticklength = min(obj.PlotlyDefaults.MaxTickLength,...
+    %-y-axis ticklen-%
+    axis.ticklen = min(obj.PlotlyDefaults.MaxTickLength,...
         max(childAxisData.TickLength(1)*parentAxisData.Position(3)*obj.layout.width,...
         childAxisData.TickLength(1)*parentAxisData.Position(4)*obj.layout.height));
-    %-y-axis ticklen-%
-    axis.ticklen = ticklength;
-
-    %---------------------------------------------------------------------%
 
     %-y-axis coloring-%
-    axiscol = sprintf("rgb(%d,%d,%d)", round(255*childAxisData.Color));
+    axiscol = getStringColor(round(255*childAxisData.Color));
 
     axis.linecolor = axiscol;
     axis.tickcolor = axiscol;
     axis.tickfont.color = axiscol;
 
-    try
-        axis.gridcolor = sprintf("rgba(%d,%d,%d,%f)", ...
+    if isprop(parentAxisData, "GridColor") && isprop(parentAxisData, "GridAlpha")
+        axis.gridcolor = getStringColor( ...
                 round(255*parentAxisData.GridColor), ...
                 parentAxisData.GridAlpha);
-    catch
+    else
         axis.gridcolor = axiscol;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-axis show grid-%
     if strcmp(parentAxisData.YGrid, 'on')
         axis.showgrid = true;
     else
         axis.showgrid = false;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-line widths-%
     linewidth = max(1,childAxisData.LineWidth*obj.PlotlyDefaults.AxisLineIncreaseFactor);
 
     axis.linewidth = linewidth;
     axis.tickwidth = linewidth;
     axis.gridwidth = linewidth;
-
-    %---------------------------------------------------------------------%
-
-    %-axis type-%
     axis.type = childAxisData.Scale;
 
-    %---------------------------------------------------------------------%
-
     %-axis showtick labels / ticks-%
     tickValues = childAxisData.TickValues;
 
     if isempty(tickValues)
-        %-axis ticks-%
         axis.ticks = '';
         axis.showticklabels = false;
-        
-        %-axis autorange-%
-        axis.autorange = true; 
+        axis.autorange = true;
     else
-        %-get axis limits-%
-        axisLim = childAxisData.Limits; 
-        
-        %-axis tick direction-%
+        axisLim = childAxisData.Limits;
         switch childAxisData.TickDirection
             case 'in'
                 axis.ticks = 'inside';
             case 'out'
                 axis.ticks = 'outside';
         end
-        
-        %---------------------------------------------------------------------%
-        
         %-LOG TYPE-%
         if strcmp(axis.type, 'log')
-            %-axis range-%
             axis.range = log10(axisLim);
-            %-axis autotick-%
             axis.autotick = true;
-            %-axis nticks-%
             axis.nticks = length(tickValues) + 1;
         elseif strcmp(axis.type, 'linear')
-            %-get tick label mode-%
             tickLabelMode = childAxisData.TickLabelsMode;
-
             %-AUTO MODE-%
             if strcmp(tickLabelMode, 'auto')
                 if isnumeric(axisLim)
                     axis.range = axisLim;
                 elseif isduration(axisLim)
                    [temp,type] = convertDuration(axisLim);
-
-                   if (~isduration(temp))              
+                   if (~isduration(temp))
                        axis.range = temp;
                        axis.type = 'duration';
                        axis.title = type;
@@ -120,40 +84,31 @@
                        nticks = length(tickValues) + 1;
                        delta = 0.1;
                        axis.range = [-delta nticks+delta];
-                       axis.type = 'duration - specified format';     
+                       axis.type = 'duration - specified format';
                    end
                 elseif isdatetime(axisLim)
                     axis.range = convertDate(axisLim);
-                    axis.type = 'date'; 
-                else 
+                    axis.type = 'date';
+                else
                     % data is a category type other then duration and datetime
                 end
-                %-axis autotick-%
                 axis.autotick = true;
-                %-axis numticks-%       
                 axis.nticks = length(tickValues) + 1;
                 axis.showticklabels = true;
             else %-CUSTOM MODE-%
-                %-get tick labels-%
                 tickLabels = childAxisData.TickLabels;
-
                 %-hide tick labels as lichkLabels field is empty-%
                 if isempty(tickLabels)
                     %-hide tick labels-%
                     axis.showticklabels = false;
-
-                    %-axis autorange-%
                     axis.autorange = true;
                 else %-axis show tick labels as tickLabels matlab field-%
                     axis.showticklabels = true;
-                    % axis.type = 'linear';
-
                     if isnumeric(axisLim)
                         axis.range = axisLim;
                     else
                         axis.autorange = true;
                     end
-
                     axis.tickvals = tickValues;
                     axis.ticktext = tickLabels;
                 end
@@ -161,43 +116,32 @@
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-scale direction-%
     if strcmp(childAxisData.Direction, 'reverse')
         axis.range = [axis.range(2) axis.range(1)];
     end
 
-    %---------------------------------------------------------------------%
-
     %-y-axis label-%
     label = childAxisData.Label;
     labelData = label;
 
-    %STANDARDIZE UNITS
+    % STANDARDIZE UNITS
     fontunits = label.FontUnits;
-    set(label,'FontUnits','points');
-
-    %---------------------------------------------------------------------%
+    label.FontUnits = 'points';
 
     %-title settings-%
     if ~isempty(labelData.String)
         axis.title = parseString(labelData.String,labelData.Interpreter);
     end
 
-    axis.titlefont.color = sprintf("rgb(%d,%d,%d)", ...
-            round(255*labelData.Color));
+    axis.titlefont.color = getStringColor(round(255*labelData.Color));
     axis.titlefont.size = labelData.FontSize;
     axis.titlefont.family = matlab2plotlyfont(labelData.FontName);
 
-    %---------------------------------------------------------------------%
-
-    %REVERT UNITS
-    set(label,'FontUnits',fontunits);
-
-    %---------------------------------------------------------------------%
+    % REVERT UNITS
+    label.FontUnits = fontunits;
 
-    if strcmp(childAxisData.Visible,'on')
+    if strcmp(childAxisData.Visible, 'on')
         axis.showline = true;
     else
         axis.showline = false;
diff --git a/plotly/plotlyfig_aux/helpers/extractBarMarker.m b/plotly/plotlyfig_aux/helpers/extractBarMarker.m
index 42c469b7..31c4411e 100644
--- a/plotly/plotlyfig_aux/helpers/extractBarMarker.m
+++ b/plotly/plotlyfig_aux/helpers/extractBarMarker.m
@@ -2,78 +2,38 @@
     % EXTRACTS THE FACE STYLE USED FOR MATLAB OBJECTS
     % OF TYPE "bar". THESE OBJECTS ARE USED BARGRAPHS.
 
-    %---------------------------------------------------------------------%
-
-    %-AXIS STRUCTURE-%
-    axis_data = ancestor(bar_data.Parent,'axes');
-
-    %-FIGURE STRUCTURE-%
-    figure_data = ancestor(bar_data.Parent,'figure');
-
-    %-INITIALIZE OUTPUT-%
-    marker = struct(); 
-
-    %---------------------------------------------------------------------%
-
-    %-bar EDGE WIDTH-%
-    marker.line.width = bar_data.LineWidth;
-
-    %---------------------------------------------------------------------%
-
-    %-bar FACE COLOR-%
-
-    colormap = figure_data.Colormap;
-
-    if isnumeric(bar_data.FaceColor)
-        %-paper_bgcolor-%
-        col = round(255*bar_data.FaceColor);
-        marker.color = sprintf("rgb(%d,%d,%d)", col);
-    else
-        switch bar_data.FaceColor
-            case 'none'
-                marker.color = 'rgba(0,0,0,0)';
-            case 'flat'
-                switch bar_data.CDataMapping
-                    case 'scaled'
-                        capCD = max(min(bar_data.FaceVertexCData(1,1), ...
-                                axis_data.CLim(2)), axis_data.CLim(1));
-                        scalefactor = (capCD - axis_data.CLim(1)) ...
-                                / diff(axis_data.CLim);
-                        col = round(255*(colormap(1+ floor(scalefactor ...
-                                * (length(colormap)-1)),:)));
-                    case 'direct'
-                        col = round(255*(colormap( ...
-                                bar_data.FaceVertexCData(1,1),:)));
-                end
-                marker.color = sprintf("rgb(%d,%d,%d)", col);
-        end
-    end
-
-    %---------------------------------------------------------------------%
-
-    %-bar EDGE COLOR-%
+    cLim = ancestor(bar_data.Parent, "axes").CLim;
+    colormap = ancestor(bar_data.Parent, "figure").Colormap;
+    cDataMapping = bar_data.CDataMapping;
+    faceVertexCData = bar_data.FaceVertexCData(1,1);
+
+    marker = struct( ...
+        "line", struct( ...
+            "width", bar_data.LineWidth, ...
+            "color", extractColor(bar_data.EdgeColor, cDataMapping, colormap, cLim, faceVertexCData) ...
+        ), ...
+        "color", extractColor(bar_data.FaceColor, cDataMapping, colormap, cLim, faceVertexCData) ...
+    );
+end
 
-    if isnumeric(bar_data.EdgeColor)
-        col = round(255*bar_data.EdgeColor);
-        marker.line.color = sprintf("rgb(%d,%d,%d)", col);
+function out = extractColor(color, cDataMapping, colormap, cLim, faceVertexCData)
+    if isnumeric(color)
+        out = getStringColor(round(255*color));
     else
-        switch bar_data.EdgeColor
-            case 'none'
-                marker.line.color = 'rgba(0,0,0,0)';
-            case 'flat'
-                switch bar_data.CDataMapping
-                    case 'scaled'
-                        capCD = max(min(bar_data.FaceVertexCData(1,1), ...
-                                axis_data.CLim(2)), axis_data.CLim(1));
-                        scalefactor = (capCD - axis_data.CLim(1)) ...
-                                / diff(axis_data.CLim);
-                        col = round(255*(colormap(1+floor(scalefactor ...
-                                * (length(colormap)-1)),:)));
-                    case 'direct'
-                        col = round(255*(colormap( ...
-                                bar_data.FaceVertexCData(1,1),:)));
+        switch color
+            case "none"
+                out = "rgba(0,0,0,0)";
+            case "flat"
+                switch cDataMapping
+                    case "scaled"
+                        capCD = max(min(faceVertexCData, cLim(2)), cLim(1));
+                        scalefactor = (capCD - cLim(1)) / diff(cLim);
+                        col = colormap(1+floor(scalefactor ...
+                                * (length(colormap)-1)),:);
+                    case "direct"
+                        col = colormap(faceVertexCData,:);
                 end
-                marker.line.color = sprintf("rgb(%d,%d,%d)", col);
+                out = getStringColor(round(255*col));
         end
     end
 end
diff --git a/plotly/plotlyfig_aux/helpers/extractGeoLinePlusMarker.m b/plotly/plotlyfig_aux/helpers/extractGeoLinePlusMarker.m
index e0f12059..e47141cb 100644
--- a/plotly/plotlyfig_aux/helpers/extractGeoLinePlusMarker.m
+++ b/plotly/plotlyfig_aux/helpers/extractGeoLinePlusMarker.m
@@ -1,30 +1,19 @@
 function [marker, linee] = extractGeoLinePlusMarker(geoData, axisData)
+    figureData = ancestor(geoData.Parent, "figure");
 
-    %---------------------------------------------------------------------%
-
-    %-FIGURE STRUCTURE-%
-    figureData = ancestor(geoData.Parent,'figure');
-
-    %-INITIALIZE OUTPUTS-%
     marker = struct();
     linee = struct();
 
-    %---------------------------------------------------------------------%
-
-    %-LINE SETTINGS-%
-
-    % line color
     lineColor = geoData.Color;
-
     if isnumeric(lineColor)
-        lineColor = sprintf("rgb(%d,%d,%d)", round(255*lineColor));
+        lineColor = getStringColor(round(255*lineColor));
     else
         switch lineColor
-            case 'none'
+            case "none"
                 lineColor = "rgba(0,0,0,0)";
-            case {'auto', 'manual'}
-                lineColor = sprintf("rgb(%d,%d,%d)", round(255*lineColor));
-            case 'flat'
+            case {"auto", "manual"}
+                lineColor = getStringColor(round(255*lineColor));
+            case "flat"
                 cData = geoData.CData;
                 cMap = figureData.Colormap;
                 ncolors = size(cMap, 1);
@@ -35,80 +24,25 @@
                             / diff(axisData.CLim);
                     rgbColor =  ound(255 * cMap(1+floor(scaleFactor ...
                             * (ncolors-1)),:));
-                    lineColor{m} = sprintf("rgb(%d,%d,%d)", rgbColor);
+                    lineColor{m} = getStringColor(rgbColor);
                 end
         end
     end
 
     linee.color = lineColor;
     linee.width = 2*geoData.LineWidth;
-    lineStyle = geoData.LineStyle;
-
-    switch lineStyle
-        case '-'
-            lineStyle = 'solid';
-        case '--'
-            lineStyle = 'dash';
-        case ':'
-            lineStyle = 'dot';
-        case '.-'
-            lineStyle = 'dash-dot';
-    end
-
-    linee.dash = lineStyle;
-
-    %---------------------------------------------------------------------%
+    linee.dash = getLineDash(geoData.LineStyle);
 
     marker.sizeref = 1;
-    marker.sizemode = 'area';
+    marker.sizemode = "area";
     marker.size = geoData.MarkerSize;
 
-    %---------------------------------------------------------------------%
-
-    %-MARKER SYMBOL (STYLE)-%
-    if ~strcmp(geoData.Marker, 'none')
-        switch geoData.Marker
-            case '.'
-                marksymbol = 'circle';
-            case 'o'
-                marksymbol = 'circle';
-            case 'x'
-                marksymbol = 'x-thin-open';
-            case '+'
-                marksymbol = 'cross-thin-open';
-            case '*'
-                marksymbol = 'asterisk-open';
-            case {'s','square'}
-                marksymbol = 'square';
-            case {'d','diamond'}
-                marksymbol = 'diamond';
-            case 'v'
-                marksymbol = 'triangle-down';
-            case '^'
-                marksymbol = 'star-triangle-up';
-            case '<'
-                marksymbol = 'triangle-left';
-            case '>'
-                marksymbol = 'triangle-right';
-            case {'p','pentagram'}
-                marksymbol = 'star';
-            case {'h','hexagram'}
-                marksymbol = 'hexagram';
-        end
-        
-        marker.symbol = marksymbol;
+    if ~strcmp(geoData.Marker, "none")
+        marker.symbol = getMarkerSymbol(geoData.Marker);
     end
 
-    %---------------------------------------------------------------------%
-
-    %-MARKER LINE WIDTH (STYLE)-%
     marker.line.width = 2*geoData.LineWidth;
 
-    %---------------------------------------------------------------------%
-
-    %--MARKER FILL COLOR--%
-
-    % marker face color
     faceColor = geoData.MarkerFaceColor;
 
     filledMarkerSet = {'o','square','s','diamond','d','v','^', '<', ...
@@ -117,22 +51,23 @@
 
     if filledMarker
         if isnumeric(faceColor)
-            markerColor = sprintf("rgb(%d,%d,%d)", round(255*faceColor));
+            markerColor = getStringColor(round(255*faceColor));
         else
             switch faceColor
-                case 'none'
+                case "none"
                     markerColor = "rgba(0,0,0,0)";
-                case 'auto'
-                    if ~strcmp(axisData.Color,'none')
+                case "auto"
+                    if ~strcmp(axisData.Color,"none")
                         col = round(255*axisData.Color);
                     else
                         col = round(255*figureData.Color);
                     end
-                    markerColor = sprintf("rgb(%d,%d,%d)", col);
-                case 'flat'
+                    markerColor = getStringColor(col);
+                case "flat"
                     cData = geoData.CData;
                     cMap = figureData.Colormap;
                     ncolors = size(cMap, 1);
+                    markerColor = cell(1, length(cData));
                     for m = 1:length(cData)
                         colorValue = max(min(cData(m), ...
                                 axisData.CLim(2)), axisData.CLim(1));
@@ -140,33 +75,27 @@
                                 / diff(axisData.CLim);
                         rgbColor = round(255 * cMap(1+floor(scaleFactor ...
                                 * (ncolors-1)),:));
-                        markerColor{m} = sprintf("rgb(%d,%d,%d)", rgbColor);
+                        markerColor{m} = getStringColor(rgbColor);
                     end
             end
         end
         marker.color = markerColor;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-MARKER LINE COLOR-%
-
-    % marker edge color
     edgeColor = geoData.MarkerEdgeColor;
-
     if isnumeric(edgeColor)
-        lineColor = sprintf("rgb(%d,%d,%d)", round(255*edgeColor));
+        lineColor = getStringColor(round(255*edgeColor));
     else
         switch edgeColor
-            case 'none'
+            case "none"
                 lineColor = "rgba(0,0,0,0)";
-            case 'auto'
-                lineColor = sprintf("rgb(%d,%d,%d)", ...
-                        round(255*geoData.Color));
-            case 'flat'
+            case "auto"
+                lineColor = getStringColor(round(255*geoData.Color));
+            case "flat"
                 cData = geoData.CData;
                 cMap = figureData.Colormap;
                 ncolors = size(cMap, 1);
+                lineColor = cell(1,length(cData));
                 for m = 1:length(cData)
                     colorValue = max(min(cData(m), axisData.CLim(2)), ...
                             axisData.CLim(1));
@@ -174,7 +103,7 @@
                             / diff(axisData.CLim);
                     rgbColor =  round(255 * cMap(1+floor(scaleFactor ...
                             * (ncolors-1)),:));
-                    lineColor{m} = sprintf("rgb(%d,%d,%d)", rgbColor);
+                    lineColor{m} = getStringColor(rgbColor);
                 end
         end
     end
diff --git a/plotly/plotlyfig_aux/helpers/extractGeoMarker.m b/plotly/plotlyfig_aux/helpers/extractGeoMarker.m
index 604d38c9..3e02a1f0 100644
--- a/plotly/plotlyfig_aux/helpers/extractGeoMarker.m
+++ b/plotly/plotlyfig_aux/helpers/extractGeoMarker.m
@@ -5,55 +5,18 @@
     %-INITIALIZE OUTPUT-%
     marker = struct();
 
-    %---------------------------------------------------------------------%
-
     marker.sizeref = 1;
     marker.sizemode = 'area';
     marker.size = geoData.SizeData;
 
-    %---------------------------------------------------------------------%
-
     %-MARKER SYMBOL (STYLE)-%
-    if ~strcmp(geoData.Marker, 'none')
-        switch geoData.Marker
-            case '.'
-                marksymbol = 'circle';
-            case 'o'
-                marksymbol = 'circle';
-            case 'x'
-                marksymbol = 'x-thin-open';
-            case '+'
-                marksymbol = 'cross-thin-open';
-            case '*'
-                marksymbol = 'asterisk-open';
-            case {'s','square'}
-                marksymbol = 'square';
-            case {'d','diamond'}
-                marksymbol = 'diamond';
-            case 'v'
-                marksymbol = 'triangle-down';
-            case '^'
-                marksymbol = 'star-triangle-up';
-            case '<'
-                marksymbol = 'triangle-left';
-            case '>'
-                marksymbol = 'triangle-right';
-            case {'p','pentagram'}
-                marksymbol = 'star';
-            case {'h','hexagram'}
-                marksymbol = 'hexagram';
-        end
-        
-        marker.symbol = marksymbol;
+    if ~strcmp(geoData.Marker, "none")
+        marker.symbol = getMarkerSymbol(geoData.Marker);
     end
 
-    %---------------------------------------------------------------------%
-
     %-MARKER LINE WIDTH (STYLE)-%
     marker.line.width = 2*geoData.LineWidth;
 
-    %---------------------------------------------------------------------%
-
     %--MARKER FILL COLOR--%
 
     % marker face color
@@ -65,18 +28,18 @@
 
     if filledMarker
         if isnumeric(faceColor)
-            markerColor = sprintf("rgb(%d,%d,%d)", round(255*faceColor));
+            markerColor = getStringColor(round(255*faceColor));
         else
             switch faceColor
                 case 'none'
                     markerColor = "rgba(0,0,0,0)";
                 case 'auto'
                     if ~strcmp(axisData.Color, 'none')
-                        col = round(255*axisData.Color);
+                        col = axisData.Color;
                     else
-                        col = round(255*figureData.Color);
+                        col = figureData.Color;
                     end
-                    markerColor = sprintf("rgb(%d,%d,%d)", col);
+                    markerColor = getStringColor(round(255*col));
                 case 'flat'
                     cData = geoData.CData;
                     cMap = figureData.Colormap;
@@ -88,22 +51,20 @@
                                 / diff(axisData.CLim);
                         rgbColor = round(255 * cMap(1+floor(scaleFactor ...
                                 * (ncolors-1)),:));
-                        markerColor{m} = sprintf("rgb(%d,%d,%d)", rgbColor);
+                        markerColor{m} = getStringColor(rgbColor);
                     end
             end
         end
         marker.color = markerColor;
     end
 
-    %---------------------------------------------------------------------%
-
     %-MARKER LINE COLOR-%
 
     % marker edge color
     edgeColor = geoData.MarkerEdgeColor;
 
     if isnumeric(edgeColor)
-        lineColor = sprintf("rgb(%d,%d,%d)", round(255*edgeColor));
+        lineColor = getStringColor(round(255*edgeColor));
     else
         switch edgeColor
             case 'none'
@@ -121,7 +82,7 @@
                             / diff(axisData.CLim);
                     rgbColor = round(255 * cMap(1+floor(scaleFactor ...
                             * (ncolors-1)),:));
-                    lineColor{m} = sprintf("rgb(%d,%d,%d)", rgbColor);
+                    lineColor{m} = getStringColor(rgbColor);
                 end
         end
     end
diff --git a/plotly/plotlyfig_aux/helpers/extractHeatmapAxisData.m b/plotly/plotlyfig_aux/helpers/extractHeatmapAxisData.m
index 87382bce..0cfe75fb 100644
--- a/plotly/plotlyfig_aux/helpers/extractHeatmapAxisData.m
+++ b/plotly/plotlyfig_aux/helpers/extractHeatmapAxisData.m
@@ -1,85 +1,50 @@
 function [axis] = extractHeatmapAxisData(obj,axis_data,axisName)
     %extract information related to each axis
-    %   axis_data is the data extrated from the figure, axisName take the
+    %   axis_data is the data extracted from the figure, axisName take the
     %   values 'x' 'y' or 'z'
 
-    %---------------------------------------------------------------------%
-
-    axis.zeroline = false;
-    axis.autorange = false;
-    axis.exponentformat = obj.PlotlyDefaults.ExponentFormat;
-    axis.tickfont.size = axis_data.FontSize;
-    axis.tickfont.family = matlab2plotlyfont(axis_data.FontName);
-
-    %---------------------------------------------------------------------%
-
-    tl = axis_data.(axisName + "Data");
-    tl = length(tl);
-
-    w = axis_data.Position(4);
-    h = axis_data.Position(3);
-
-    ticklength = min(obj.PlotlyDefaults.MaxTickLength,...
-        max(tl*w*obj.layout.width,tl*h*obj.layout.height));
-
-    axis.ticklen = 0.1; %ticklength; 
-
-    %---------------------------------------------------------------------%
-
-    axiscol = 'rgb(150, 150, 150)';
-
-    axis.linecolor = axiscol;
-    axis.tickcolor = axiscol;
-    axis.tickfont.color = 'black';
-    axis.gridcolor = 'rgb(0, 0, 0)';
-
-    %---------------------------------------------------------------------%
-
-    axis.showgrid = true;
-
-    %---------------------------------------------------------------------%
-
+    axiscol = "rgb(150, 150, 150)";
     lw = 0.5;
     linewidth = max(1,lw*obj.PlotlyDefaults.AxisLineIncreaseFactor);
 
-    axis.linewidth = linewidth;
-    axis.tickwidth = linewidth;
-    axis.gridwidth = linewidth*1.2;
-
-    %---------------------------------------------------------------------%
-
-    %-setting ticks-%
-    axis.ticks = 'inside';
-    axis.mirror = true;
-
-    labels = axis_data.(axisName + "DisplayLabels");
-    vals = axis_data.(axisName + "DisplayData");
-
-    axis.showticklabels = true;
-    axis.type = 'category';
-    axis.autorange = true;
-    axis.ticktext = labels;
-    axis.tickvals = vals;
-    axis.autotick = false;
-    axis.tickson = 'boundaries';
-
-    %-------------------------------LABELS--------------------------------%
-
-    label = axis_data.(axisName + "Label");
-    axis.title = label;
-    axis.titlefont.color = 'black';
-    axis.titlefont.size = axis_data.FontSize*1.3;
-    axis.tickfont.size = axis_data.FontSize*1.15;
-    axis.titlefont.family = matlab2plotlyfont(axis_data.FontName);
-    axis.tickfont.family = matlab2plotlyfont(axis_data.FontName);
-
-    %---------------------------------------------------------------------%
-
-    if strcmp(axis_data.Visible,'on')
+    axis = struct( ...
+        "zeroline", false, ...
+        "exponentformat", obj.PlotlyDefaults.ExponentFormat, ...
+        "ticklen", 0.1, ...
+        "linecolor", axiscol, ...
+        "tickcolor", axiscol, ...
+        "gridcolor", "rgb(0, 0, 0)", ...
+        "showgrid", true, ...
+        "linewidth", linewidth, ...
+        "tickwidth", linewidth, ...
+        "gridwidth", linewidth*1.2, ...
+        "ticks", "inside", ...
+        "mirror", true, ...
+        "showticklabels", true, ...
+        "type", "category", ...
+        "autorange", true, ...
+        "ticktext", string(axis_data.(axisName + "DisplayLabels")), ...
+        "tickvals", string(axis_data.(axisName + "DisplayData")), ...
+        "autotick", false, ...
+        "tickson", "boundaries", ...
+        "title", axis_data.(axisName + "Label"), ...
+        "titlefont", struct( ...
+            "color", "black", ...
+            "size", axis_data.FontSize*1.3, ...
+            "family", matlab2plotlyfont(axis_data.FontName) ...
+        ), ...
+        "tickfont", struct( ...
+            "color", "black", ...
+            "size", axis_data.FontSize*1.15, ...
+            "family", matlab2plotlyfont(axis_data.FontName) ...
+        ) ...
+    );
+
+    if axis_data.Visible == "on"
         axis.showline = true;
     else
         axis.showline = false;
         axis.showticklabels = false;
-        axis.ticks = '';
+        axis.ticks = "";
     end
 end
diff --git a/plotly/plotlyfig_aux/helpers/extractLineLine.m b/plotly/plotlyfig_aux/helpers/extractLineLine.m
index a6f733dd..acd93db4 100644
--- a/plotly/plotlyfig_aux/helpers/extractLineLine.m
+++ b/plotly/plotlyfig_aux/helpers/extractLineLine.m
@@ -6,25 +6,9 @@
     %-INITIALIZE OUTPUT-%
     line = struct();
 
-    if (~strcmp(line_data.LineStyle, 'none'))
-        %-SCATTER LINE COLOR (STYLE)-%
-        col = round(255*line_data.Color);
-        line.color = sprintf("rgb(%d,%d,%d)", col);
-
-        %-SCATTER LINE WIDTH (STYLE)-%
+    if line_data.LineStyle ~= "none"
+        line.color = getStringColor(round(255*line_data.Color));
         line.width = line_data.LineWidth;
-
-        %-SCATTER LINE DASH (STYLE)-%
-        switch line_data.LineStyle
-            case '-'
-                LineStyle = 'solid';
-            case '--'
-                LineStyle = 'dash';
-            case ':'
-                LineStyle = 'dot';
-            case '-.'
-                LineStyle = 'dashdot';
-        end
-        line.dash = LineStyle;
+        line.dash = getLineDash(line_data.LineStyle);
     end
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/helpers/extractLineMarker.m b/plotly/plotlyfig_aux/helpers/extractLineMarker.m
index 85bb7c23..0794d1ca 100644
--- a/plotly/plotlyfig_aux/helpers/extractLineMarker.m
+++ b/plotly/plotlyfig_aux/helpers/extractLineMarker.m
@@ -3,13 +3,9 @@
     % OF TYPE "LINE". THESE OBJECTS ARE USED IN LINESERIES,
     % STAIRSERIES, STEMSERIES, BASELINESERIES, AND BOXPLOTS
 
-    %---------------------------------------------------------------------%
-
     %-INITIALIZE OUTPUT-%
     marker = struct();
 
-    %---------------------------------------------------------------------%
-
     %-MARKER SIZE-%
     marker.size = line_data.MarkerSize;
 
@@ -19,65 +15,29 @@
         marker.size = 0.6*marker.size;
     end
 
-    %---------------------------------------------------------------------%
-
     %-MARKER SYMBOL-%
     if ~strcmp(line_data.Marker, "none")
-        switch line_data.Marker
-            case "."
-                marksymbol = "circle";
-            case "o"
-                marksymbol = "circle";
-            case "x"
-                marksymbol = "x-thin-open";
-            case "+"
-                marksymbol = "cross-thin-open";
-            case "*"
-                marksymbol = "asterisk-open";
-            case {"s","square"}
-                marksymbol = "square";
-            case {"d","diamond"}
-                marksymbol = "diamond";
-            case "v"
-                marksymbol = "triangle-down";
-            case "^"
-                marksymbol = "triangle-up";
-            case "<"
-                marksymbol = "triangle-left";
-            case ">"
-                marksymbol = "triangle-right";
-            case {"p","pentagram"}
-                marksymbol = "star";
-            case {"h","hexagram"}
-                marksymbol = "hexagram";
-        end
-        marker.symbol = marksymbol;
+        marker.symbol = getMarkerSymbol(line_data.Marker);
         if isfield(line_data, "MarkerIndices")
             marker.maxdisplayed=length(line_data.MarkerIndices)+1;
         end
     end
 
-    %---------------------------------------------------------------------%
-
     %-MARKER LINE WIDTH-%
     marker.line.width = line_data.LineWidth;
 
-    %---------------------------------------------------------------------%
-
     filledMarkerSet = ["o","square","s","diamond","d",...
             "v","^", "<",">","hexagram","pentagram"];
 
     filledMarker = ismember(line_data.Marker,filledMarkerSet);
 
-    %---------------------------------------------------------------------%
-
     %--MARKER FILL COLOR--%
     MarkerColor = line_data.MarkerFaceColor;
 
     if filledMarker
         if isnumeric(MarkerColor)
             col = round(255*MarkerColor);
-            markercolor = sprintf("rgb(%d,%d,%d)", col);
+            markercolor = getStringColor(col);
         else
             switch MarkerColor
                 case "none"
@@ -89,21 +49,19 @@
         marker.color = markercolor;
     end
 
-    %---------------------------------------------------------------------%
-
     %-MARKER LINE COLOR-%
     MarkerLineColor = line_data.MarkerEdgeColor;
 
     if isnumeric(MarkerLineColor)
         col = round(255*MarkerLineColor);
-        markerlinecolor = sprintf("rgb(%d,%d,%d)", col);
+        markerlinecolor = getStringColor(col);
     else
         switch MarkerLineColor
             case "none"
                 markerlinecolor = "rgba(0,0,0,0)";
             case "auto"
                 col = round(255*line_data.Color);
-                markerlinecolor = sprintf("rgb(%d,%d,%d)", col);
+                markerlinecolor = getStringColor(col);
         end
     end
 
diff --git a/plotly/plotlyfig_aux/helpers/extractPatchFace.m b/plotly/plotlyfig_aux/helpers/extractPatchFace.m
index 5f040bce..60f0aafd 100644
--- a/plotly/plotlyfig_aux/helpers/extractPatchFace.m
+++ b/plotly/plotlyfig_aux/helpers/extractPatchFace.m
@@ -2,82 +2,62 @@
     % EXTRACTS THE FACE STYLE USED FOR MATLAB OBJECTS
     % OF TYPE "PATCH". THESE OBJECTS ARE USED BOXPLOTS.
 
-    %---------------------------------------------------------------------%
+    cLim = ancestor(patch_data.Parent, ["axes" "polaraxes"]).CLim;
+    colormap = ancestor(patch_data.Parent, "figure").Colormap;
 
-    %-AXIS STRUCTURE-%
-    axis_data = ancestor(patch_data.Parent,"axes");
-
-    %-FIGURE STRUCTURE-%
-    figure_data = ancestor(patch_data.Parent,"figure");
-
-    %-INITIALIZE OUTPUT-%
     marker = struct();
-
-    %---------------------------------------------------------------------%
-
-    %-PATCH EDGE WIDTH-%
     marker.line.width = patch_data.LineWidth;
 
-    %---------------------------------------------------------------------%
-
-    %-PATCH FACE COLOR-%
-
-    colormap = figure_data.Colormap;
-
     if isnumeric(patch_data.FaceColor)
-        %-paper_bgcolor-%
-        col = [round(255*patch_data.FaceColor) patch_data.FaceAlpha];
+        col = patch_data.FaceColor;
+        alpha = patch_data.FaceAlpha;
     else
         switch patch_data.FaceColor
             case "none"
-                col = [0 0 0 0];
+                col = [0 0 0];
+                alpha = 0;
             case {"flat","interp"}
+                faceVertexCData = patch_data.FaceVertexCData(1,1);
                 switch patch_data.CDataMapping
                     case "scaled"
-                        capCD = max(min(patch_data.FaceVertexCData(1,1), ...
-                                axis_data.CLim(2)), axis_data.CLim(1));
-                        scalefactor = (capCD - axis_data.CLim(1)) ...
-                                / diff(axis_data.CLim);
-                        col = round(255*(colormap(1 + floor(scalefactor ...
-                                * (length(colormap)-1)),:)));
+                        capCD = max(min(faceVertexCData, cLim(2)), cLim(1));
+                        scalefactor = (capCD - cLim(1)) / diff(cLim);
+                        col = colormap(1 + floor(scalefactor ...
+                                * (length(colormap)-1)),:);
                     case "direct"
-                        col = round(255*(colormap( ...
-                                patch_data.FaceVertexCData(1,1),:)));
+                        col = colormap(faceVertexCData,:);
                 end
-                col = [col patch_data.FaceAlpha];
-            case 'auto'
+                alpha = patch_data.FaceAlpha;
+            case "auto"
                 cIndex = find(flipud(arrayfun(@(x) isequaln(x,patch_data), ...
                         patch_data.Parent.Children))); % far from pretty
-                col = round(255*patch_data.Parent.ColorOrder(cIndex,:));
-                col = [col patch_data.FaceAlpha];
+                col = patch_data.Parent.ColorOrder(cIndex,:);
+                alpha = patch_data.FaceAlpha;
         end
     end
-    marker.color = sprintf("rgba(%d,%d,%d,%f)", col);
-
-    %---------------------------------------------------------------------%
+    marker.color = getStringColor(round(255*col), alpha);
 
-    %-PATCH EDGE COLOR-%
     if isnumeric(patch_data.EdgeColor)
-        col = [255*patch_data.EdgeColor patch_data.EdgeAlpha];
+        col = patch_data.EdgeColor;
+        alpha = patch_data.EdgeAlpha;
     else
         switch patch_data.EdgeColor
             case "none"
-                col = [0 0 0 0];
+                col = [0 0 0];
+                alpha = 0;
             case "flat"
+                faceVertexCData = patch_data.FaceVertexCData(1,1);
                 switch patch_data.CDataMapping
                     case "scaled"
-                        capCD = max(min(patch_data.FaceVertexCData(1,1), ...
-                                axis_data.CLim(2)),axis_data.CLim(1));
-                        scalefactor = (capCD - axis_data.CLim(1)) ...
-                                / diff(axis_data.CLim);
-                        col = round(255*(colormap(1+floor(scalefactor ...
-                                * (length(colormap)-1)),:)));
+                        capCD = max(min(faceVertexCData, cLim(2)), cLim(1));
+                        scalefactor = (capCD - cLim(1)) / diff(cLim);
+                        col = colormap(1 + floor(scalefactor ...
+                                * (length(colormap)-1)),:);
                     case "direct"
-                        col = round(255*(colormap( ...
-                                patch_data.FaceVertexCData(1,1),:)));
+                        col = colormap(faceVertexCData,:);
                 end
-                col = [col patch_data.EdgeAlpha];
+                alpha = patch_data.EdgeAlpha;
         end
     end
-    marker.line.color = sprintf("rgba(%d,%d,%d,%f)", col);
+    marker.line.color = getStringColor(round(255*col), alpha);
 end
diff --git a/plotly/plotlyfig_aux/helpers/extractPatchLine.m b/plotly/plotlyfig_aux/helpers/extractPatchLine.m
index 10155e27..0129c52d 100644
--- a/plotly/plotlyfig_aux/helpers/extractPatchLine.m
+++ b/plotly/plotlyfig_aux/helpers/extractPatchLine.m
@@ -3,63 +3,39 @@
     % OF TYPE "LINE". THESE OBJECTS ARE USED IN LINESERIES,
     % STAIRSERIES, STEMSERIES, BASELINESERIES, AND BOXPLOTS
 
-    %---------------------------------------------------------------------%
-
-    %-AXIS STRUCTURE-%
-    axis_data = ancestor(patch_data.Parent,'axes');
-
-    %-FIGURE STRUCTURE-%
-    figure_data = ancestor(patch_data.Parent,'figure');
-
-    %-INITIALIZE OUTPUT-%
-    line = struct(); 
-
-    %---------------------------------------------------------------------%
-
-    %-PATCH LINE COLOR-%
-
-    colormap = figure_data.Colormap;
+    line = struct();
+    if patch_data.LineStyle == "none"
+        return
+    end
 
-    if (~strcmp(patch_data.LineStyle,'none'))
-        if isnumeric(patch_data.EdgeColor)
-            col = round(255*patch_data.EdgeColor);
-            line.color = sprintf("rgb(%d,%d,%d)", col);
-        else
-            switch patch_data.EdgeColor
-                case 'none'
-                    line.color = 'rgba(0,0,0,0)';
-                case 'flat'
-                    switch patch_data.CDataMapping
-                        case 'scaled'
-                            capCD = max(min( ...
-                                    patch_data.FaceVertexCData(1,1), ...
-                                    axis_data.CLim(2)), axis_data.CLim(1));
-                            scalefactor = (capCD - axis_data.CLim(1)) ...
-                                    / diff(axis_data.CLim);
-                            col = round(255*(colormap(1+floor(scalefactor ...
-                                    * (length(colormap)-1)),:)));
-                        case 'direct'
-                            col = round(255*(colormap( ...
-                                    patch_data.FaceVertexCData(1,1),:)));
-                    end
-                    line.color = sprintf("rgb(%d,%d,%d)", col);
-            end
-        end
+    cLim = ancestor(patch_data.Parent, "axes").CLim;
+    colormap = ancestor(patch_data.Parent, "figure").Colormap;
+    faceVertexCData = patch_data.FaceVertexCData(1,1);
+    cDataMapping = patch_data.CDataMapping;
 
-        %-PATCH LINE WIDTH (STYLE)-%
-        line.width = patch_data.LineWidth;
+    line.color = extractColor(patch_data.EdgeColor, cDataMapping, colormap, cLim, faceVertexCData);
+    line.width = patch_data.LineWidth;
+    line.dash = getLineDash(patch_data.LineStyle);
+end
 
-        %-PATCH LINE DASH (STYLE)-%
-        switch patch_data.LineStyle
-            case '-'
-                LineStyle = 'solid';
-            case '--'
-                LineStyle = 'dash';
-            case ':'
-                LineStyle = 'dot';
-            case '-.'
-                LineStyle = 'dashdot';
+function out = extractColor(color, cDataMapping, colormap, cLim, faceVertexCData)
+    if isnumeric(color)
+        out = getStringColor(round(255*color));
+    else
+        switch color
+            case "none"
+                out = "rgba(0,0,0,0)";
+            case "flat"
+                switch cDataMapping
+                    case "scaled"
+                        capCD = max(min(faceVertexCData, cLim(2)), cLim(1));
+                        scalefactor = (capCD - cLim(1)) / diff(cLim);
+                        col = colormap(1+floor(scalefactor ...
+                                * (length(colormap)-1)),:);
+                    case "direct"
+                        col = colormap(faceVertexCData,:);
+                end
+                out = getStringColor(round(255*col));
         end
-        line.dash = LineStyle;
     end
 end
diff --git a/plotly/plotlyfig_aux/helpers/extractPatchMarker.m b/plotly/plotlyfig_aux/helpers/extractPatchMarker.m
index 2a826b0d..aa40b597 100644
--- a/plotly/plotlyfig_aux/helpers/extractPatchMarker.m
+++ b/plotly/plotlyfig_aux/helpers/extractPatchMarker.m
@@ -3,65 +3,27 @@
     % OF TYPE "PATCH". THESE OBJECTS ARE USED IN AREASERIES
     % BARSERIES, CONTOURGROUP, SCATTERGROUP.
 
-    %---------------------------------------------------------------------%
-
     %-AXIS STRUCTURE-%
-    axis_data = ancestor(patch_data.Parent, 'axes');
+    axis_data = ancestor(patch_data.Parent, "axes");
 
     %-FIGURE STRUCTURE-%
-    figure_data = ancestor(patch_data.Parent, 'figure');
+    figure_data = ancestor(patch_data.Parent, "figure");
 
     %-INITIALIZE OUTPUT-%
     marker = struct();
 
-    %---------------------------------------------------------------------%
-
     marker.sizeref = 1;
-    marker.sizemode = 'diameter';
+    marker.sizemode = "diameter";
     marker.size = patch_data.MarkerSize;
 
-    %---------------------------------------------------------------------%
-
     %-MARKER SYMBOL (STYLE)-%
-    if ~strcmp(patch_data.Marker, 'none')
-        switch patch_data.Marker
-            case '.'
-                marksymbol = 'circle';
-            case 'o'
-                marksymbol = 'circle';
-            case 'x'
-                marksymbol = 'x-thin-open';
-            case '+'
-                marksymbol = 'cross-thin-open';
-            case '*'
-                marksymbol = 'asterisk-open';
-            case {'s','square'}
-                marksymbol = 'square';
-            case {'d','diamond'}
-                marksymbol = 'diamond';
-            case 'v'
-                marksymbol = 'triangle-down';
-            case '^'
-                marksymbol = 'triangle-up';
-            case '<'
-                marksymbol = 'triangle-left';
-            case '>'
-                marksymbol = 'triangle-right';
-            case {'p','pentagram'}
-                marksymbol = 'star';
-            case {'h','hexagram'}
-                marksymbol = 'hexagram';
-        end
-        marker.symbol = marksymbol;
+    if ~strcmp(patch_data.Marker, "none")
+        marker.symbol = getMarkerSymbol(patch_data.Marker);
     end
 
-    %---------------------------------------------------------------------%
-
     %-MARKER LINE WIDTH (STYLE)-%
     marker.line.width = patch_data.LineWidth;
 
-    %---------------------------------------------------------------------%
-
     %--MARKER FILL COLOR--%
 
     %-figure colormap-%
@@ -81,22 +43,22 @@
     if filledMarker
         if isnumeric(MarkerColor)
             col = round(255*MarkerColor);
-            markercolor = sprintf("rgb(%d,%d,%d)", col);
+            markercolor = getStringColor(col);
         else
             switch MarkerColor
-                case 'none'
+                case "none"
                     markercolor = "rgba(0,0,0,0)";
-                case 'auto'
-                    if ~strcmp(axis_data.Color,'none')
+                case "auto"
+                    if ~strcmp(axis_data.Color,"none")
                         col = round(255*axis_data.Color);
                     else
                         col = round(255*figure_data.Color);
                     end
-                    markercolor  = sprintf("rgb(%d,%d,%d)", col);
-                case 'flat'
+                    markercolor = getStringColor(col);
+                case "flat"
                     for n = 1:length(patch_data.FaceVertexCData)
                         switch patch_data.CDataMapping
-                            case 'scaled'
+                            case "scaled"
                                 capCD = max(min( ...
                                         patch_data.FaceVertexCData(n,1), ...
                                         axis_data.CLim(2)), ...
@@ -106,49 +68,41 @@
                                 col = round(255*(colormap(1 + ...
                                         floor(scalefactor ...
                                         * (length(colormap)-1)),:)));
-                            case 'direct'
+                            case "direct"
                                 col = round(255*(colormap( ...
                                         patch_data.FaceVertexCData(n,1),:)));
                         end
-                        markercolor{n} = sprintf("rgb(%d,%d,%d)", col);
+                        markercolor{n} = getStringColor(col);
                     end
             end
         end
         marker.color = markercolor;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-MARKER LINE COLOR-%
 
-    % marker edge color
     MarkerLineColor = patch_data.MarkerEdgeColor;
-
     filledMarker = ismember(patch_data.Marker,filledMarkerSet);
-
-    % initialize marker line color
     markerlinecolor = cell(1,length(patch_data.FaceVertexCData));
-
     if isnumeric(MarkerLineColor)
         col = round(255*MarkerLineColor);
-        markerlinecolor = sprintf("rgb(%d,%d,%d)", col);
+        markerlinecolor = getStringColor(col);
     else
         switch MarkerLineColor
-            case 'none'
+            case "none"
                 markerlinecolor = "rgba(0,0,0,0)";
-            case 'auto'
+            case "auto"
                 EdgeColor = patch_data.EdgeColor;
                 if isnumeric(EdgeColor)
                     col = round(255*EdgeColor);
-                    markerlinecolor = sprintf("rgb(%d,%d,%d)", col);
+                    markerlinecolor = getStringColor(col);
                 else
                     switch EdgeColor
-                        case 'none'
+                        case "none"
                             markerlinecolor = "rgba(0,0,0,0)";
-                        case {'flat', 'interp'}
+                        case {"flat", "interp"}
                             for n = 1:length(patch_data.FaceVertexCData)
                                 switch patch_data.CDataMapping
-                                    case 'scaled'
+                                    case "scaled"
                                         capCD = max(min( ...
                                                 patch_data.FaceVertexCData(n,1), ...
                                                 axis_data.CLim(2)), ...
@@ -159,19 +113,18 @@
                                         col = round(255*(colormap(1 + ...
                                                 floor(scalefactor ...
                                                 * (length(colormap)-1)),:)));
-                                    case 'direct'
+                                    case "direct"
                                         col = round(255*(colormap( ...
                                                 patch_data.FaceVertexCData(n,1),:)));
                                 end
-                                markerlinecolor{n} = ...
-                                        sprintf("rgb(%d,%d,%d)", col);
+                                markerlinecolor{n} = getStringColor(col);
                             end
                     end
                 end
-            case 'flat'
+            case "flat"
                 for n = 1:length(patch_data.FaceVertexCData)
                     switch patch_data.CDataMapping
-                        case 'scaled'
+                        case "scaled"
                             capCD = max(min( ...
                                     patch_data.FaceVertexCData(n,1), ...
                                     axis_data.CLim(2)), ...
@@ -180,11 +133,11 @@
                                     / diff(axis_data.CLim);
                             col = round(255*(colormap(1+floor(scalefactor ...
                                     * (length(colormap)-1)),:)));
-                        case 'direct'
+                        case "direct"
                             col = round(255*(colormap( ...
                                     patch_data.FaceVertexCData(n,1),:)));
                     end
-                    markerlinecolor{n} = sprintf("rgb(%d,%d,%d)", col);
+                    markerlinecolor{n} = getStringColor(col);
                 end
         end
     end
diff --git a/plotly/plotlyfig_aux/helpers/extractScatterMarker.m b/plotly/plotlyfig_aux/helpers/extractScatterMarker.m
index 1553c74f..5e505aa0 100644
--- a/plotly/plotlyfig_aux/helpers/extractScatterMarker.m
+++ b/plotly/plotlyfig_aux/helpers/extractScatterMarker.m
@@ -8,14 +8,12 @@
     % SCATTERGROUP.                                                       %
     %                                                                     %
     %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
-
-    %-INITIALIZATIONS-%
-    axisData = ancestor(plotData.Parent, 'axes');
-    figureData = ancestor(plotData.Parent, 'figure');
+    axisData = ancestor(plotData.Parent, ["Axes" "PolarAxes"]);
+    figureData = ancestor(plotData.Parent, "figure");
 
     marker = struct();
     marker.sizeref = 1;
-    marker.sizemode = 'area';
+    marker.sizemode = "area";
     marker.size = getMarkerSize(plotData);
     marker.line.width = 1.5*plotData.LineWidth;
 
@@ -23,107 +21,68 @@
             '<', '>', 'hexagram', 'pentagram'};
     filledMarker = ismember(plotData.Marker, filledMarkerSet);
 
-    %---------------------------------------------------------------------%
-
-    %-get marker symbol-%
-    if ~strcmp(plotData.Marker,'none')
-        switch plotData.Marker
-            case '.'
-                markerSymbol = 'circle';
-                marker.size = 0.1*marker.size;
-            case 'o'
-                markerSymbol = 'circle';
-            case 'x'
-                markerSymbol = 'x-thin-open';
-            case '+'
-                markerSymbol = 'cross-thin-open';
-            case '*'
-                markerSymbol = 'asterisk-open';
-            case {'s','square'}
-                markerSymbol = 'square';
-            case {'d','diamond'}
-                markerSymbol = 'diamond';
-            case 'v'
-                markerSymbol = 'triangle-down';
-            case '^'
-                markerSymbol = 'triangle-up';
-            case '<'
-                markerSymbol = 'triangle-left';
-            case '>'
-                markerSymbol = 'triangle-right';
-            case {'p','pentagram'}
-                markerSymbol = 'star';
-            case {'h','hexagram'}
-                markerSymbol = 'hexagram';
+    if plotData.Marker ~= "none"
+        if plotData.Marker == "."
+            marker.size = 0.1*marker.size;
         end
-        marker.symbol = markerSymbol;
+        marker.symbol = getMarkerSymbol(plotData.Marker);
     end
 
-    %---------------------------------------------------------------------%
-
-    %-marker fill-%
     markerFaceColor = plotData.MarkerFaceColor;
     markerFaceAlpha = plotData.MarkerFaceAlpha;
 
     if filledMarker
-        %-get face color-%
         if isnumeric(markerFaceColor)
-            faceColor = sprintf("rgb(%d,%d,%d)", ...
-                    round(255*markerFaceColor));
+            faceColor = getStringColor(round(255*markerFaceColor));
         else
             switch markerFaceColor
-                case 'none'        
+                case "none"
                     faceColor = "rgba(0,0,0,0)";
-                case 'auto'
-                    if ~strcmp(axisData.Color,'none')
-                        faceColor = 255*axisData.Color;
+                case "auto"
+                    if axisData.Color ~= "none"
+                        faceColor = axisData.Color;
                     else
-                        faceColor = 255*figureData.Color;
+                        faceColor = figureData.Color;
                     end
-                    faceColor = getStringColor(faceColor);
-                case 'flat'
+                    faceColor = getStringColor(round(255*faceColor));
+                case "flat"
                     faceColor = getScatterFlatColor(plotData, axisData);
             end
         end
 
-        %-get face alpha-%
         if isnumeric(markerFaceAlpha)
             faceAlpha = markerFaceAlpha;
         else
             switch markerFaceColor
-                case 'none'        
+                case "none"
                     faceAlpha = 1;
-                case 'flat'
+                case "flat"
                     aLim = axisData.ALim;
                     faceAlpha = plotData.AlphaData;
                     faceAlpha = rescaleData(faceAlpha, aLim);
             end
         end
-        %-set marker fill-%
         marker.color = faceColor;
         marker.opacity = faceAlpha;
     end
 
-    %---------------------------------------------------------------------%
-
-    %-marker line-%
     markerEdgeColor = plotData.MarkerEdgeColor;
     markerEdgeAlpha = plotData.MarkerEdgeAlpha;
 
     if isnumeric(markerEdgeColor)
-        lineColor = sprintf("rgb(%d,%d,%d)", round(255*markerEdgeColor));
+        lineColor = getStringColor(round(255*markerEdgeColor));
     else
         switch markerEdgeColor
-            case 'none'
+            case "none"
                 lineColor = "rgba(0,0,0,0)";
-            case 'auto'
-                if ~strcmp(axisData.Color,'none')
-                    lineColor = 255*axisData.Color;
+            case "auto"
+                if axisData.Color ~= "none"
+                    lineColor = axisData.Color;
                 else
-                    lineColor = 255*figureData.Color;
+                    lineColor = figureData.Color;
                 end
-                lineColor = getStringColor(lineColor, markerEdgeAlpha);
-            case 'flat'
+                lineColor = getStringColor(round(255*lineColor), markerEdgeAlpha);
+            case "flat"
                 lineColor = getScatterFlatColor(plotData, axisData);
         end
     end
@@ -132,13 +91,13 @@
         marker.line.color = lineColor;
     else
         marker.color = lineColor;
-        if strcmp(plotData.Marker, '.')
+        if plotData.Marker == "."
             marker.line.color = lineColor;
         end
     end
 end
 
-function flatColor = getScatterFlatColor(plotData, axisData, opacity)
+function flatColor = getScatterFlatColor(plotData, axisData)
     cData = plotData.CData;
     colorMap = axisData.Colormap;
     cLim = axisData.CLim;
@@ -151,19 +110,17 @@
         cDataByIndex = lenCData == nMarkers || lenCData == 1;
     end
 
-    %---------------------------------------------------------------------%
-
     if cDataByIndex
         cMapInd = getcMapInd(cData, cLim, nColors);
-        numColor = 255 * colorMap(cMapInd, :);
+        numColor = round(255 * colorMap(cMapInd, :));
     else
-        numColor = 255*cData;
+        numColor = round(255*cData);
     end
 
     if size(numColor, 1) == 1
         flatColor = getStringColor(numColor);
-
     else
+        flatColor = cell(1, size(numColor, 1));
         for n = 1:size(numColor, 1)
             flatColor{n} = getStringColor(numColor(n, :));
         end
@@ -183,7 +140,15 @@
 function markerSize = getMarkerSize(plotData)
     markerSize = plotData.SizeData;
 
-    if length(markerSize) == 1
-        markerSize = markerSize * ones(size(plotData.XData));
+    if isscalar(markerSize)
+        if ~isempty(plotData.XData)
+            dataSize = size(plotData.XData);
+        else
+            dataSize = size(plotData.RData); % polar plot
+        end
+        markerSize = markerSize * ones(dataSize);
+        if isscalar(markerSize)
+            markerSize = {markerSize};
+        end
     end
 end
diff --git a/plotly/plotlyfig_aux/helpers/extractScatterhistogramMarker.m b/plotly/plotlyfig_aux/helpers/extractScatterhistogramMarker.m
index 6418cbff..4460705f 100644
--- a/plotly/plotlyfig_aux/helpers/extractScatterhistogramMarker.m
+++ b/plotly/plotlyfig_aux/helpers/extractScatterhistogramMarker.m
@@ -3,64 +3,26 @@
     % OF TYPE "PATCH". THESE OBJECTS ARE USED IN AREASERIES
     % BARSERIES, CONTOURGROUP, SCATTERGROUP.
 
-    %---------------------------------------------------------------------%
-
     %-AXIS STRUCTURE-%
-    axis_data = ancestor(patch_data.Parent, 'axes');
+    axis_data = ancestor(patch_data.Parent, "axes");
 
     %-FIGURE STRUCTURE-%
-    figure_data = ancestor(patch_data.Parent, 'figure');
+    figure_data = ancestor(patch_data.Parent, "figure");
 
     %-INITIALIZE OUTPUT-%
     marker = struct();
 
-    %---------------------------------------------------------------------%
-
     %-MARKER SIZE (STYLE)-%
     marker.size = patch_data.MarkerSize(t)*0.20;
 
-    %---------------------------------------------------------------------%
-
     %-MARKER SYMBOL (STYLE)-%
-    if ~strcmp(patch_data.MarkerStyle(t), 'none')
-        switch patch_data.MarkerStyle(t)
-            case '.'
-                marksymbol = 'circle';
-            case 'o'
-                marksymbol = 'circle';
-            case 'x'
-                marksymbol = 'x-thin-open';
-            case '+'
-                marksymbol = 'cross-thin-open';
-            case '*'
-                marksymbol = 'asterisk-open';
-            case {'s','square'}
-                marksymbol = 'square';
-            case {'d','diamond'}
-                marksymbol = 'diamond';
-            case 'v'
-                marksymbol = 'triangle-down';
-            case '^'
-                marksymbol = 'triangle-up';
-            case '<'
-                marksymbol = 'triangle-left';
-            case '>'
-                marksymbol = 'triangle-right';
-            case {'p','pentagram'}
-                marksymbol = 'star';
-            case {'h','hexagram'}
-                marksymbol = 'hexagram';
-        end
-        marker.symbol = marksymbol;
+    if ~strcmp(patch_data.MarkerStyle(t), "none")
+        marker.symbol = getMarkerSymbol(patch_data.MarkerStyle(t));
     end
 
-    %---------------------------------------------------------------------%
-
     %-MARKER LINE WIDTH (STYLE)-%
     marker.line.width = patch_data.LineWidth(t);
 
-    %---------------------------------------------------------------------%
-
     %--MARKER COLOR--%
 
     %-figure colormap-%
@@ -74,29 +36,30 @@
 
     filledMarker = ismember(patch_data.MarkerStyle(t), filledMarkerSet);
 
-    if filledMarker && strcmp(patch_data.MarkerFilled, 'on')
+    if filledMarker && strcmp(patch_data.MarkerFilled, "on")
         if isnumeric(MarkerColor)
-            markercolor = sprintf("rgb(%d,%d,%d)", round(255*MarkerColor));
+            markercolor = getStringColor(round(255*MarkerColor));
         else
             switch MarkerColor
-                case 'none'
+                case "none"
                     markercolor = "rgba(0,0,0,0)";
-                case 'auto'
-                    if ~strcmp(axis_data.Color,'none')
-                        col = round(255*axis_data.Color);
+                case "auto"
+                    if ~strcmp(axis_data.Color,"none")
+                        col = axis_data.Color;
                     else
-                        col = round(255*figure_data.Color);
+                        col = figure_data.Color;
                     end
-                    markercolor = sprintf("rgb(%d,%d,%d)", col);
-                case 'flat'
+                    markercolor = getStringColor(round(255*col));
+                case "flat"
+                    markercolor = cell(1, length(patch_data.CData));
                     for n = 1:length(patch_data.CData)
                         capCD = max(min(patch_data.CData(n), ...
                                 axis_data.CLim(2)), axis_data.CLim(1));
                         scalefactor = (capCD - axis_data.CLim(1)) ...
                                 /diff(axis_data.CLim);
-                        col = round(255*(colormap(1 + floor(scalefactor ...
-                                * (length(colormap)-1)),:)));
-                        markercolor{n} = sprintf("rgb(%d,%d,%d)", col);
+                        col = colormap(1 + floor(scalefactor ...
+                                * (length(colormap)-1)),:);
+                        markercolor{n} = getStringColor(round(255*col));
                     end
             end
         end
diff --git a/plotly/plotlyfig_aux/helpers/findColorbarAxis.m b/plotly/plotlyfig_aux/helpers/findColorbarAxis.m
index 2efd8c8c..310361ba 100644
--- a/plotly/plotlyfig_aux/helpers/findColorbarAxis.m
+++ b/plotly/plotlyfig_aux/helpers/findColorbarAxis.m
@@ -1,5 +1,5 @@
 function colorbarAxis = findColorbarAxis(obj,colorbarHandle)
-    if isHG2    
+    if isHG2
         colorbarAxisIndex = find(arrayfun(@(x) isequal( ...
                 getappdata(x.Handle,'ColorbarPeerHandle'), ...
                 colorbarHandle),obj.State.Axis));
diff --git a/plotly/plotlyfig_aux/helpers/findColorbarData.m b/plotly/plotlyfig_aux/helpers/findColorbarData.m
index a810eb7d..c1f55e59 100644
--- a/plotly/plotlyfig_aux/helpers/findColorbarData.m
+++ b/plotly/plotlyfig_aux/helpers/findColorbarData.m
@@ -28,4 +28,4 @@
         colorbarDataIndex = obj.State.Figure.NumAxes - colorbarAxisIndex + 1;
         colorbarDataIndex = colorbarDataIndex;
     end
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/helpers/findLegendAxis.m b/plotly/plotlyfig_aux/helpers/findLegendAxis.m
index 73f0ff40..760c70c0 100644
--- a/plotly/plotlyfig_aux/helpers/findLegendAxis.m
+++ b/plotly/plotlyfig_aux/helpers/findLegendAxis.m
@@ -4,8 +4,11 @@
                 handle(getappdata(x.Handle, 'LegendPeerHandle')), ...
                 legendHandle), obj.State.Axis), 1);
     else
-        legendAxisIndex = find(arrayfun(@(x) isequal( ...
-                handle(x.Handle.Legend), legendHandle), obj.State.Axis), 1);
+        legendAxisIndex = find(arrayfun( ...
+                @(x) isprop(x.Handle, "Legend") ...
+                     && isequal(handle(x.Handle.Legend), legendHandle), ...
+                obj.State.Axis ...
+        ),1);
     end
 
     legendAxis = obj.State.Axis(legendAxisIndex).Handle;
diff --git a/plotly/plotlyfig_aux/helpers/findSourceAxis.m b/plotly/plotlyfig_aux/helpers/findSourceAxis.m
index 1e394b95..2561a760 100644
--- a/plotly/plotlyfig_aux/helpers/findSourceAxis.m
+++ b/plotly/plotlyfig_aux/helpers/findSourceAxis.m
@@ -1,6 +1,6 @@
 function [xsource, ysource, xoverlay, yoverlay] = findSourceAxis(obj, axIndex, yaxIndex)
     % initialize output
-    xsource = axIndex; 
+    xsource = axIndex;
     ysource = axIndex;
     xoverlay = false;
     yoverlay = false;
@@ -21,7 +21,7 @@
             ysource = overlapaxes(1);
         else
             yoverlay = overlapaxes(1);
-        end  
+        end
     end
 
     % works for multiple y-Axis
diff --git a/plotly/plotlyfig_aux/helpers/formatRW.m b/plotly/plotlyfig_aux/helpers/formatRW.m
index 01ae49c3..2e6c53b6 100644
--- a/plotly/plotlyfig_aux/helpers/formatRW.m
+++ b/plotly/plotlyfig_aux/helpers/formatRW.m
@@ -1,10 +1,10 @@
 function outputStr = formatRW(inputStr)
-    %adds whitespace after \reservedwordplot(1,1); 
+    %adds whitespace after \reservedwordplot(1,1);
 
-    inputStrCell = cell(1,length(inputStr)); 
+    inputStrCell = cell(1,length(inputStr));
 
     for c = 1:length(inputStr)
-        inputStrCell{c} = inputStr(c); 
+        inputStrCell{c} = inputStr(c);
     end
 
     rW = {'\\alpha','\\upsilon','\\sim','\\angle','\\phi','\\leq',...
@@ -31,10 +31,10 @@
     for w = 1:length(rW)
         [startInd endInd] = regexp(inputStr,rW{w});
         for ind = 1:length(endInd)
-            %add space at end of reserved words 
+            %add space at end of reserved words
             inputStrCell{endInd(ind)}  = [inputStrCell{endInd(ind)} ' '];
         end
     end
 
-    outputStr = [inputStrCell{:}]; 
-end
\ No newline at end of file
+    outputStr = [inputStrCell{:}];
+end
diff --git a/plotly/plotlyfig_aux/helpers/generateBoxData.m b/plotly/plotlyfig_aux/helpers/generateBoxData.m
index 79d1eb40..a1d5f1b9 100644
--- a/plotly/plotlyfig_aux/helpers/generateBoxData.m
+++ b/plotly/plotlyfig_aux/helpers/generateBoxData.m
@@ -16,4 +16,4 @@
         linspace(med, Q3, Q3Index-Q2Index) ...
         linspace(Q3, boxmax, N-Q3Index-numel(outlierhigh)) ...
         outlierhigh];
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/helpers/getGraphClass.m b/plotly/plotlyfig_aux/helpers/getGraphClass.m
index 742471d7..e7fe74f2 100644
--- a/plotly/plotlyfig_aux/helpers/getGraphClass.m
+++ b/plotly/plotlyfig_aux/helpers/getGraphClass.m
@@ -4,4 +4,4 @@
     else
         gc = lower(handle(obj).classhandle.name);
     end
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/helpers/getLineDash.m b/plotly/plotlyfig_aux/helpers/getLineDash.m
new file mode 100644
index 00000000..8e52f01f
--- /dev/null
+++ b/plotly/plotlyfig_aux/helpers/getLineDash.m
@@ -0,0 +1,12 @@
+function lineDash = getLineDash(lineStyle)
+    switch lineStyle
+        case "-"
+            lineDash = "solid";
+        case "--"
+            lineDash = "dash";
+        case ":"
+            lineDash = "dot";
+        case "-."
+            lineDash = "dashdot";
+    end
+end
diff --git a/plotly/plotlyfig_aux/helpers/getMarkerSymbol.m b/plotly/plotlyfig_aux/helpers/getMarkerSymbol.m
new file mode 100644
index 00000000..f15e875c
--- /dev/null
+++ b/plotly/plotlyfig_aux/helpers/getMarkerSymbol.m
@@ -0,0 +1,30 @@
+function out = getMarkerSymbol(markerStyle)
+    switch markerStyle
+        case "."
+            out = "circle";
+        case "o"
+            out = "circle";
+        case "x"
+            out = "x-thin-open";
+        case "+"
+            out = "cross-thin-open";
+        case "*"
+            out = "asterisk-open";
+        case {"s","square"}
+            out = "square";
+        case {"d","diamond"}
+            out = "diamond";
+        case "v"
+            out = "triangle-down";
+        case "^"
+            out = "triangle-up";
+        case "<"
+            out = "triangle-left";
+        case ">"
+            out = "triangle-right";
+        case {"p","pentagram"}
+            out = "star";
+        case {"h","hexagram"}
+            out = "hexagram";
+    end
+end
diff --git a/plotly/plotlyfig_aux/helpers/getShowLegend.m b/plotly/plotlyfig_aux/helpers/getShowLegend.m
index ee3549cf..9cc8981a 100644
--- a/plotly/plotlyfig_aux/helpers/getShowLegend.m
+++ b/plotly/plotlyfig_aux/helpers/getShowLegend.m
@@ -1,12 +1,9 @@
 function showLegend = getShowLegend(plotData)
 	try
-		leg = plotData.Annotation;
-		legInfo = leg.LegendInformation;
-
-		switch legInfo.IconDisplayStyle
-			case 'on'
+		switch plotData.Annotation.LegendInformation.IconDisplayStyle
+			case "on"
 				showLegend = true;
-			case 'off'
+			case "off"
 				showLegend = false;
 		end
 		showLegend = showLegend & ~isempty(plotData.DisplayName);
diff --git a/plotly/plotlyfig_aux/helpers/getStringColor.m b/plotly/plotlyfig_aux/helpers/getStringColor.m
index d3feffad..d0ca79ca 100644
--- a/plotly/plotlyfig_aux/helpers/getStringColor.m
+++ b/plotly/plotlyfig_aux/helpers/getStringColor.m
@@ -1,9 +1,9 @@
 function stringColor = getStringColor(numColor, opacity)
     if nargin == 1
-        stringColor = sprintf('rgb(%f,%f,%f)', numColor);
+        stringColor = sprintf("rgb(%d,%d,%d)", numColor);
     elseif nargin == 2
-        stringColor = sprintf('rgba(%f,%f,%f,%f)', numColor, opacity);
+        stringColor = sprintf("rgba(%d,%d,%d,%f)", numColor, opacity);
     else
-        disp('Too many input arguments for getStringColor function.')
+        disp("Too many input arguments for getStringColor function.")
     end
 end
diff --git a/plotly/plotlyfig_aux/helpers/histogramOrientation.m b/plotly/plotlyfig_aux/helpers/histogramOrientation.m
index f366bdcb..8c9f1cd6 100644
--- a/plotly/plotlyfig_aux/helpers/histogramOrientation.m
+++ b/plotly/plotlyfig_aux/helpers/histogramOrientation.m
@@ -18,7 +18,7 @@
                 && all(hist_data.YData(3,:) == hist_data.YData(4,:)) ...
                 && all(hist_data.XData(1,:) == hist_data.XData(4,:)) ...
                 && all(hist_data.XData(2,:) == hist_data.XData(3,:))
-            orientation = 'h'; 
+            orientation = 'h';
         end
     end
 end
diff --git a/plotly/plotlyfig_aux/helpers/isBoxplot.m b/plotly/plotlyfig_aux/helpers/isBoxplot.m
index c26f2f2c..dfa54ef3 100644
--- a/plotly/plotlyfig_aux/helpers/isBoxplot.m
+++ b/plotly/plotlyfig_aux/helpers/isBoxplot.m
@@ -1,5 +1,5 @@
 function check = isBoxplot(obj, boxIndex)
    check = ~isempty([ ...
          findobj(obj.State.Plot(boxIndex).Handle,'Tag', 'Box')' ...
-         findobj(obj.State.Plot(boxIndex).Handle,'Tag', 'Outliers')']); 
+         findobj(obj.State.Plot(boxIndex).Handle,'Tag', 'Outliers')']);
 end
diff --git a/plotly/plotlyfig_aux/helpers/isExceptionStrip.m b/plotly/plotlyfig_aux/helpers/isExceptionStrip.m
index 130ac4bf..91cd58b3 100644
--- a/plotly/plotlyfig_aux/helpers/isExceptionStrip.m
+++ b/plotly/plotlyfig_aux/helpers/isExceptionStrip.m
@@ -7,10 +7,10 @@
             'size', @(x)(length(x)>1)};
 
     for e = 1:2:length(exceptions)
-        % comparison function 
+        % comparison function
         compfun = exceptions{e+1};
         % look for fieldnames of type exceptions{e} and compare the
-        % underyling data using exceptions{e+1}
+        % underlying data using exceptions{e+1}
         if strcmp(fieldname, exceptions{e}) ...
                 && compfun(grstruct.(fieldname))
             check = true;
diff --git a/plotly/plotlyfig_aux/helpers/isMultipleBaseline.m b/plotly/plotlyfig_aux/helpers/isMultipleBaseline.m
index b3a245f9..fe3cafaf 100644
--- a/plotly/plotlyfig_aux/helpers/isMultipleBaseline.m
+++ b/plotly/plotlyfig_aux/helpers/isMultipleBaseline.m
@@ -7,4 +7,4 @@
     % greater than 1 because obj.State.Plot(baselineIndex).AssociatedAxis
     % will always match
     check = length(baselines) > 1;
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/helpers/matlab2plotlyfont.m b/plotly/plotlyfig_aux/helpers/matlab2plotlyfont.m
index ca0fff02..7da2bd3d 100644
--- a/plotly/plotlyfig_aux/helpers/matlab2plotlyfont.m
+++ b/plotly/plotlyfig_aux/helpers/matlab2plotlyfont.m
@@ -1,574 +1,303 @@
 function plotlyFont = matlab2plotlyfont(matlabFont)
-    % Plotly supported fonts
+    % Common MATLAB fonts mapped to Plotly fonts
 
-    try
-        % availableFont = {'Arial, sans-serif',  'Balto, sans-serif' , ...
-        %     'Courier New, monospace' , 'Droid Sans, sans-serif' ,...
-        %     'Droid Serif, serif',  'Droid Sans Mono, sans-serif', ...
-        %     'Georgia, serif' ,  'Gravitas One, cursive' ,  ...
-        %     'Old Standard TT, serif' ,  'Open Sans, sans-serif', ...
-        %     'PT Sans Narrow, sans-serif' , 'Raleway, sans-serif',...
-        %     'Times New Roman, Times, serif'};
-        switch matlabFont
-            case 'Abadi MT Condensed Extra Bold'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Abadi MT Condensed Light'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Adobe Arabic'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Adobe Caslon Pro'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Adobe Fan Heiti Std'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Adobe Fangsong Std'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Adobe Garamond Pro'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Adobe Gothic Std'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Adobe Hebrew'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Adobe Heiti Std'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Adobe Kaiti Std'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Adobe Ming Std'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Adobe Myungjo Std'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Adobe Song Std'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Al Bayan'
-                plotlyFont = 'Balto, sans-serif';
-            case 'American Typewriter'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Andale Mono'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Apple Braille'
-                plotlyFont = 'Balto, sans-serif';
-            case'le Chancery'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Apple Color Emoji'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Apple LiGothic'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Apple LiSung'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Apple Symbols'
-                plotlyFont = 'Balto, sans-serif';
-            case 'AppleGothic'
-                plotlyFont = 'Balto, sans-serif';
-            case 'AppleMyungjo'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Arial'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Arial Black'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Arial Hebrew'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Arial Narrow'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Arial Rounded MT Bold'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Arial Unicode MS'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Ayuthaya'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Baghdad'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Bangla MN'
-                plotlyFont ='Raleway, sans-serif';
-            case 'Bangla Sangam MN'
-                plotlyFont ='Raleway, sans-serif';
-            case 'Baskerville'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Baskerville Old Face'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Batang'
-                plotlyFont = 'Courier New, monospace';
-            case 'Bauhaus 93'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Bell MT'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Bernard MT Condensed'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'BiauKai'
-                plotlyFont = 'Courier New, monospace';
-            case 'Big Caslon'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Birch Std'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Blackoak Std'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Book Antiqua'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Bookman Old Style'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Bookshelf Symbol 7'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Braggadocio'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Britannic Bold'
-                plotlyFont = 'Courier New, monospace';
-            case 'Brush Script MT'
-                plotlyFont = 'Courier New, monospace';
-            case 'Brush Script Std'
-                plotlyFont = 'Courier New, monospace';
-            case 'Calibri'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Calisto MT'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Cambria'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Cambria Math'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Candara'
-                plotlyFont = 'Raleway, sans-serif';
-            case 'Century'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Century Gothic'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Century Schoolbook'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Chalkboard'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Chalkduster'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Chaparral Pro'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Charcoal CY'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Charlemagne Std'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Cochin'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Colonna MT'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Comic Sans MS'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Consolas'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Constantia'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Cooper Black'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Cooper Std'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Copperplate'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Copperplate Gothic Bold'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Copperplate Gothic Light'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Corbel'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Corsiva Hebrew'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Courier'
-                plotlyFont = 'Courier New, monospace';
-            case 'Courier New'
-                plotlyFont = 'Courier New, monospace';
-            case 'Curlz MT'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Damascus'
-                plotlyFont = 'Arial, sans-serif';
-            case 'DecoType Naskh'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Desdemona'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Devanagari MT'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Devanagari Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Dialog'
-                plotlyFont = 'Raleway, sans-serif';
-            case 'DialogInput'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Didot'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Edwardian Script ITC'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Engravers MT'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Euphemia UCAS'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Eurostile'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Footlight MT Light'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Franklin Gothic Book'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Franklin Gothic Medium'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Futura'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Gabriola'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Garamond'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'GB18030 Bitmap'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Geeza Pro'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Geneva'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Geneva CY'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Georgia'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Giddyup Std'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Gill Sans'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Gill Sans MT'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Gill Sans Ultra Bold'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Gloucester MT Extra Condensed'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Goudy Old Style'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Gujarati MT'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Gujarati Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Gulim'
-                plotlyFont = 'Balto, sans-serif';
-            case 'GungSeo'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Gurmukhi MN'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Gurmukhi MT'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Haettenschweiler'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Harrington'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'HeadLineA'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Hei'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Heiti SC'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Heiti TC'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Helvetica'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Helvetica CY'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Helvetica Neue'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Herculanum'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Hiragino Kaku Gothic Pro'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Hiragino Kaku Gothic ProN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Hiragino Kaku Gothic Std'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Hiragino Kaku Gothic StdN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Hiragino Maru Gothic Pro'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Hiragino Maru Gothic ProN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Hiragino Mincho Pro'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Hiragino Mincho ProN'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Hiragino Sans GB'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Hobo Std'
-                plotlyFont = 'Droid Sans, sans-serif';
-            case 'Hoefler Text'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Impact'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Imprint MT Shadow'
-                plotlyFont = 'Arial, sans-serif';
-            case 'InaiMathi'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Kai'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Kailasa'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Kannada MN'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Kannada Sangam MN'
-                plotlyFont =  'Open Sans, sans-serif';
-            case 'Kefa'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Khmer MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Khmer Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Kino MT'
-                plotlyFont =  'Old Standard TT, serif';
-            case 'Kokonor'
-                plotlyFont =  'Gravitas One, cursive';
-            case 'Kozuka Gothic Pr6N'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Kozuka Gothic Pro'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Kozuka Mincho Pr6N'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Kozuka Mincho Pro'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Krungthep'
-                plotlyFont = 'Arial, sans-serif';
-            case 'KufiStandardGK'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Lao MN'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Lao Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Letter Gothic Std'
-                plotlyFont = 'Courier New, monospace';
-            case 'LiHei Pro'
-                plotlyFont = 'Arial, sans-serif';
-            case 'LiSong Pro'
-                plotlyFont = 'Courier New, monospace';
-            case 'Lithos Pro'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Lucida Blackletter'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Lucida Bright'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Lucida Calligraphy'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Lucida Console'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Lucida Fax'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Lucida Grande'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Lucida Handwriting'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Lucida Sans'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Lucida Sans Typewriter'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Lucida Sans Unicode'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Malayalam MN'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Malayalam Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Marker Felt'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Marlett'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Matura MT Script Capitals'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Meiryo'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Menlo'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Mesquite Std'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Microsoft Sans Serif'
-                plotlyFont = 'Open Sans, sans-serif';
-            case 'Minion Pro'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Mistral'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Modern No. 20'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Monaco'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Monospaced'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Monotype Corsiva'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Monotype Sorts'
-                plotlyFont = 'Balto, sans-serif';
-            case 'MS Gothic'
-                plotlyFont = 'Balto, sans-serif';
-            case 'MS Mincho'
-                plotlyFont = 'Courier New, monospace';
-            case 'MS PGothic'
-                plotlyFont = 'Arial, sans-serif';
-            case 'MS PMincho'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'MS Reference Sans Serif'
-                plotlyFont = 'Arial, sans-serif';
-            case 'MS Reference Specialty'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Mshtakan'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'MT Extra'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Myanmar MN'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Myanmar Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Myriad Pro'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Nadeem'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Nanum Brush Script'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Nanum Gothic'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Nanum Myeongjo'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Nanum Pen Script'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'New Peninim MT'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'News Gothic MT'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Noteworthy'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Nueva Std'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'OCR A Std'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Onyx'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Optima'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Orator Std'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Oriya MN'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Oriya Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Osaka'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Palatino'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Palatino Linotype'
-                plotlyFont = 'Old Standard TT, serif';
-            case 'Papyrus'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'PCMyungjo'
-                plotlyFont = 'Courier New, monospace';
-            case 'Perpetua'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Perpetua Titling MT'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'PilGi'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Plantagenet Cherokee'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Playbill'
-                plotlyFont = 'Arial, sans-serif';
-            case 'PMingLiU'
-                plotlyFont = 'Courier New, monospace';
-            case 'Poplar Std'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Prestige Elite Std'
-                plotlyFont = 'Courier New, monospace';
-            case 'PT Sans'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'PT Sans Caption'
-                plotlyFont = 'Arial, sans-serif';
-            case 'PT Sans Narrow'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Raanana'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Rockwell'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Rockwell Extra Bold'
-                plotlyFont = 'Droid Serif, serif';
-            case 'Rosewood Std'
-                plotlyFont = 'Droid Serif, serif';
-            case 'SansSerif'
-                plotlyFont =  'Open Sans, sans-serif';
-            case 'Sathu'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Serif'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Silom'
-                plotlyFont = 'Arial, sans-serif';
-            case 'SimSun'
-                plotlyFont = 'Courier New, monospace';
-            case 'Sinhala MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Sinhala Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Skia'
-                plotlyFont = 'Raleway, sans-serif';
-            case 'Stencil'
-                plotlyFont =  'Old Standard TT, serif';
-            case 'Stencil Std'
-                plotlyFont =  'Old Standard TT, serif';
-            case 'STFangsong'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'STHeiti'
-                plotlyFont = 'Balto, sans-serif';
-            case 'STIXGeneral'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'STIXIntegralsD'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXIntegralsSm'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXIntegralsUp'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXIntegralsUpD'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXIntegralsUpSm'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXNonUnicode'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXSizeFiveSym'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXSizeFourSym'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXSizeOneSym'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXSizeThreeSym'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXSizeTwoSym'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STIXVariants'
-                plotlyFont = 'Arial, sans-serif';
-            case 'STKaiti'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'STSong'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Symbol'
-                plotlyFont =  'Open Sans, sans-serif';
-            case 'Tahoma'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Tamil MN'
-                plotlyFont = 'PT Sans Narrow, sans-serif';
-            case 'Tamil Sangam MN'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Tekton Pro'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Telugu MN'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Telugu Sangam MN'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Thonburi'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Times'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Times New Roman'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Trajan Pro'
-                plotlyFont = 'Times New Roman, Times, serif';
-            case 'Trebuchet MS'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Tw Cen MT'
-                plotlyFont = 'Balto, sans-serif';
-            case 'Verdana'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Webdings'
-                plotlyFont = 'Arial, sans-serif';
-            case 'Wide Latin'
-                plotlyFont = 'Gravitas One, cursive';
-            case 'Zapf Dingbats'
-                plotlyFont =  'Open Sans, sans-serif';
-            case 'Zapfino'
-                plotlyFont = 'Gravitas One, cursive';
-            otherwise
-                plotlyFont =  'Open Sans, sans-serif';
-        end
-    catch
-        display(['We had trouble identifying the font of your text. ', ...
-            'Please see https://plot.ly/matlab for more information.']);
+    persistent fontMap
+    % Initialize the font map once
+    if isempty(fontMap)
+        fontMap = getFontMap();
     end
+
+    if fontMap.isKey(matlabFont)
+        plotlyFont = fontMap(matlabFont);
+    else
+        plotlyFont = "Open Sans, sans-serif";
+    end
+end
+
+function fontMap = getFontMap()
+    fontMap = containers.Map();
+    % availableFont = {"Arial, sans-serif",  "Balto, sans-serif" , ...
+    %     "Courier New, monospace" , "Droid Sans, sans-serif" ,...
+    %     "Droid Serif, serif",  "Droid Sans Mono, sans-serif", ...
+    %     "Georgia, serif" ,  "Gravitas One, cursive" ,  ...
+    %     "Old Standard TT, serif" ,  "Open Sans, sans-serif", ...
+    %     "PT Sans Narrow, sans-serif" , "Raleway, sans-serif",...
+    %     "Times New Roman, Times, serif"};
+    fontMap("Abadi MT Condensed Extra Bold") = "Arial, sans-serif";
+    fontMap("Abadi MT Condensed Light") = "Balto, sans-serif";
+    fontMap("Adobe Arabic") = "Times New Roman, Times, serif";
+    fontMap("Adobe Caslon Pro") = "Times New Roman, Times, serif";
+    fontMap("Adobe Fan Heiti Std") = "Arial, sans-serif";
+    fontMap("Adobe Fangsong Std") = "Times New Roman, Times, serif";
+    fontMap("Adobe Garamond Pro") = "Times New Roman, Times, serif";
+    fontMap("Adobe Gothic Std") = "Arial, sans-serif";
+    fontMap("Adobe Hebrew") = "Times New Roman, Times, serif";
+    fontMap("Adobe Heiti Std") = "Droid Sans, sans-serif";
+    fontMap("Adobe Kaiti Std") = "Times New Roman, Times, serif";
+    fontMap("Adobe Ming Std") = "Times New Roman, Times, serif";
+    fontMap("Adobe Myungjo Std") = "Old Standard TT, serif";
+    fontMap("Adobe Song Std") = "Times New Roman, Times, serif";
+    fontMap("Al Bayan") = "Balto, sans-serif";
+    fontMap("American Typewriter") = "Old Standard TT, serif";
+    fontMap("Andale Mono") = "Droid Sans, sans-serif";
+    fontMap("Apple Braille") = "Balto, sans-serif";
+    fontMap("Apple Chancery") = "Old Standard TT, serif";
+    fontMap("Apple Color Emoji") = "Balto, sans-serif";
+    fontMap("Apple LiGothic") = "Arial, sans-serif";
+    fontMap("Apple LiSung") = "Times New Roman, Times, serif";
+    fontMap("Apple Symbols") = "Balto, sans-serif";
+    fontMap("Apple Gothic") = "Balto, sans-serif";
+    fontMap("Apple Myungjo") = "Old Standard TT, serif";
+    fontMap("Arial") = "Arial, sans-serif";
+    fontMap("Arial Black") = "Arial, sans-serif";
+    fontMap("Arial Hebrew") = "Arial, sans-serif";
+    fontMap("Arial Narrow") = "Arial, sans-serif";
+    fontMap("Arial Rounded MT Bold") = "Arial, sans-serif";
+    fontMap("Arial Unicode MS") = "Arial, sans-serif";
+    fontMap("Ayuthaya") = "Balto, sans-serif";
+    fontMap("Baghdad") = "Balto, sans-serif";
+    fontMap("Bangla MN") ="Raleway, sans-serif";
+    fontMap("Bangla Sangam MN") ="Raleway, sans-serif";
+    fontMap("Baskerville") = "Times New Roman, Times, serif";
+    fontMap("Baskerville Old Face") = "Times New Roman, Times, serif";
+    fontMap("Batang") = "Courier New, monospace";
+    fontMap("Bauhaus 93") = "Gravitas One, cursive";
+    fontMap("Bell MT") = "Times New Roman, Times, serif";
+    fontMap("Bernard MT Condensed") = "Gravitas One, cursive";
+    fontMap("BiauKai") = "Courier New, monospace";
+    fontMap("Big Caslon") = "Times New Roman, Times, serif";
+    fontMap("Birch Std") = "Droid Serif, serif";
+    fontMap("Blackoak Std") = "Gravitas One, cursive";
+    fontMap("Book Antiqua") = "Droid Serif, serif";
+    fontMap("Bookman Old Style") = "Balto, sans-serif";
+    fontMap("Bookshelf Symbol 7") = "Gravitas One, cursive";
+    fontMap("Braggadocio") = "Gravitas One, cursive";
+    fontMap("Britannic Bold") = "Courier New, monospace";
+    fontMap("Brush Script MT") = "Courier New, monospace";
+    fontMap("Brush Script Std") = "Courier New, monospace";
+    fontMap("Calibri") = "Balto, sans-serif";
+    fontMap("Calisto MT") = "Times New Roman, Times, serif";
+    fontMap("Cambria") = "Times New Roman, Times, serif";
+    fontMap("Cambria Math") = "Times New Roman, Times, serif";
+    fontMap("Candara") = "Raleway, sans-serif";
+    fontMap("Century") = "Times New Roman, Times, serif";
+    fontMap("Century Gothic") = "Balto, sans-serif";
+    fontMap("Century Schoolbook") = "Times New Roman, Times, serif";
+    fontMap("Chalkboard") = "Droid Sans, sans-serif";
+    fontMap("Chalkduster") = "Droid Sans, sans-serif";
+    fontMap("Chaparral Pro") = "Droid Serif, serif";
+    fontMap("Charcoal CY") = "Arial, sans-serif";
+    fontMap("Charlemagne Std") = "Old Standard TT, serif";
+    fontMap("Cochin") = "Old Standard TT, serif";
+    fontMap("Colonna MT") = "Times New Roman, Times, serif";
+    fontMap("Comic Sans MS") = "Droid Sans, sans-serif";
+    fontMap("Consolas") = "Balto, sans-serif";
+    fontMap("Constantia") = "Times New Roman, Times, serif";
+    fontMap("Cooper Black") = "Droid Sans, sans-serif";
+    fontMap("Cooper Std") = "Droid Sans, sans-serif";
+    fontMap("Copperplate") = "Old Standard TT, serif";
+    fontMap("Copperplate Gothic Bold") = "Old Standard TT, serif";
+    fontMap("Copperplate Gothic Light") = "Droid Serif, serif";
+    fontMap("Corbel") = "PT Sans Narrow, sans-serif";
+    fontMap("Corsiva Hebrew") = "Gravitas One, cursive";
+    fontMap("Courier") = "Courier New, monospace";
+    fontMap("Courier New") = "Courier New, monospace";
+    fontMap("Curlz MT") = "Gravitas One, cursive";
+    fontMap("Damascus") = "Arial, sans-serif";
+    fontMap("DecoType Naskh") = "Balto, sans-serif";
+    fontMap("Desdemona") = "Gravitas One, cursive";
+    fontMap("Devanagari MT") = "Old Standard TT, serif";
+    fontMap("Devanagari Sangam MN") = "Balto, sans-serif";
+    fontMap("Dialog") = "Raleway, sans-serif";
+    fontMap("DialogInput") = "Balto, sans-serif";
+    fontMap("Didot") = "Times New Roman, Times, serif";
+    fontMap("Edwardian Script ITC") = "Gravitas One, cursive";
+    fontMap("Engravers MT") = "Droid Serif, serif";
+    fontMap("Euphemia UCAS") = "Arial, sans-serif";
+    fontMap("Eurostile") = "Droid Sans, sans-serif";
+    fontMap("Footlight MT Light") = "Old Standard TT, serif";
+    fontMap("Franklin Gothic Book") = "Balto, sans-serif";
+    fontMap("Franklin Gothic Medium") = "Arial, sans-serif";
+    fontMap("Futura") = "Droid Sans, sans-serif";
+    fontMap("Gabriola") = "Gravitas One, cursive";
+    fontMap("Garamond") = "Times New Roman, Times, serif";
+    fontMap("GB18030 Bitmap") = "Arial, sans-serif";
+    fontMap("Geeza Pro") = "Balto, sans-serif";
+    fontMap("Geneva") = "Balto, sans-serif";
+    fontMap("Geneva CY") = "Arial, sans-serif";
+    fontMap("Georgia") = "Old Standard TT, serif";
+    fontMap("Giddyup Std") = "Gravitas One, cursive";
+    fontMap("Gill Sans") = "Arial, sans-serif";
+    fontMap("Gill Sans MT") = "Arial, sans-serif";
+    fontMap("Gill Sans Ultra Bold") = "Arial, sans-serif";
+    fontMap("Gloucester MT Extra Condensed") = "Droid Sans, sans-serif";
+    fontMap("Goudy Old Style") = "Times New Roman, Times, serif";
+    fontMap("Gujarati MT") = "Times New Roman, Times, serif";
+    fontMap("Gujarati Sangam MN") = "Balto, sans-serif";
+    fontMap("Gulim") = "Balto, sans-serif";
+    fontMap("GungSeo") = "Old Standard TT, serif";
+    fontMap("Gurmukhi MN") = "PT Sans Narrow, sans-serif";
+    fontMap("Gurmukhi MT") = "PT Sans Narrow, sans-serif";
+    fontMap("Haettenschweiler") = "Arial, sans-serif";
+    fontMap("Harrington") = "Gravitas One, cursive";
+    fontMap("HeadLineA") = "Arial, sans-serif";
+    fontMap("Hei") = "Balto, sans-serif";
+    fontMap("Heiti SC") = "Balto, sans-serif";
+    fontMap("Heiti TC") = "Balto, sans-serif";
+    fontMap("Helvetica") = "Arial, sans-serif";
+    fontMap("Helvetica CY") = "Arial, sans-serif";
+    fontMap("Helvetica Neue") = "Arial, sans-serif";
+    fontMap("Herculanum") = "Gravitas One, cursive";
+    fontMap("Hiragino Kaku Gothic Pro") = "Balto, sans-serif";
+    fontMap("Hiragino Kaku Gothic ProN") = "Balto, sans-serif";
+    fontMap("Hiragino Kaku Gothic Std") = "Balto, sans-serif";
+    fontMap("Hiragino Kaku Gothic StdN") = "Balto, sans-serif";
+    fontMap("Hiragino Maru Gothic Pro") = "Balto, sans-serif";
+    fontMap("Hiragino Maru Gothic ProN") = "Balto, sans-serif";
+    fontMap("Hiragino Mincho Pro") = "Times New Roman, Times, serif";
+    fontMap("Hiragino Mincho ProN") = "Times New Roman, Times, serif";
+    fontMap("Hiragino Sans GB") = "Balto, sans-serif";
+    fontMap("Hobo Std") = "Droid Sans, sans-serif";
+    fontMap("Hoefler Text") = "Times New Roman, Times, serif";
+    fontMap("Impact") = "Arial, sans-serif";
+    fontMap("Imprint MT Shadow") = "Arial, sans-serif";
+    fontMap("InaiMathi") = "Balto, sans-serif";
+    fontMap("Kai") = "Times New Roman, Times, serif";
+    fontMap("Kailasa") = "Arial, sans-serif";
+    fontMap("Kannada MN") = "PT Sans Narrow, sans-serif";
+    fontMap("Kannada Sangam MN") = "Open Sans, sans-serif";
+    fontMap("Kefa") = "Arial, sans-serif";
+    fontMap("Khmer MN") = "Balto, sans-serif";
+    fontMap("Khmer Sangam MN") = "Balto, sans-serif";
+    fontMap("Kino MT") = "Old Standard TT, serif";
+    fontMap("Kokonor") = "Gravitas One, cursive";
+    fontMap("Kozuka Gothic Pr6N") = "Arial, sans-serif";
+    fontMap("Kozuka Gothic Pro") = "Arial, sans-serif";
+    fontMap("Kozuka Mincho Pr6N") = "Times New Roman, Times, serif";
+    fontMap("Kozuka Mincho Pro") = "Times New Roman, Times, serif";
+    fontMap("Krungthep") = "Arial, sans-serif";
+    fontMap("KufiStandardGK") = "Arial, sans-serif";
+    fontMap("Lao MN") = "PT Sans Narrow, sans-serif";
+    fontMap("Lao Sangam MN") = "Balto, sans-serif";
+    fontMap("Letter Gothic Std") = "Courier New, monospace";
+    fontMap("LiHei Pro") = "Arial, sans-serif";
+    fontMap("LiSong Pro") = "Courier New, monospace";
+    fontMap("Lithos Pro") = "Gravitas One, cursive";
+    fontMap("Lucida Blackletter") = "Gravitas One, cursive";
+    fontMap("Lucida Bright") = "Gravitas One, cursive";
+    fontMap("Lucida Calligraphy") = "Gravitas One, cursive";
+    fontMap("Lucida Console") = "Balto, sans-serif";
+    fontMap("Lucida Fax") = "Old Standard TT, serif";
+    fontMap("Lucida Grande") = "Balto, sans-serif";
+    fontMap("Lucida Handwriting") = "Gravitas One, cursive";
+    fontMap("Lucida Sans") = "Arial, sans-serif";
+    fontMap("Lucida Sans Typewriter") = "Arial, sans-serif";
+    fontMap("Lucida Sans Unicode") = "Balto, sans-serif";
+    fontMap("Malayalam MN") = "PT Sans Narrow, sans-serif";
+    fontMap("Malayalam Sangam MN") = "Balto, sans-serif";
+    fontMap("Marker Felt") = "Gravitas One, cursive";
+    fontMap("Marlett") = "Arial, sans-serif";
+    fontMap("Matura MT Script Capitals") = "Gravitas One, cursive";
+    fontMap("Meiryo") = "Balto, sans-serif";
+    fontMap("Menlo") = "Balto, sans-serif";
+    fontMap("Mesquite Std") = "Gravitas One, cursive";
+    fontMap("Microsoft Sans Serif") = "Open Sans, sans-serif";
+    fontMap("Minion Pro") = "Times New Roman, Times, serif";
+    fontMap("Mistral") = "Gravitas One, cursive";
+    fontMap("Modern No. 20") = "Times New Roman, Times, serif";
+    fontMap("Monaco") = "Arial, sans-serif";
+    fontMap("Monospaced") = "Times New Roman, Times, serif";
+    fontMap("Monotype Corsiva") = "Gravitas One, cursive";
+    fontMap("Monotype Sorts") = "Balto, sans-serif";
+    fontMap("MS Gothic") = "Balto, sans-serif";
+    fontMap("MS Mincho") = "Courier New, monospace";
+    fontMap("MS PGothic") = "Arial, sans-serif";
+    fontMap("MS PMincho") = "Times New Roman, Times, serif";
+    fontMap("MS Reference Sans Serif") = "Arial, sans-serif";
+    fontMap("MS Reference Specialty") = "Balto, sans-serif";
+    fontMap("Mshtakan") = "Times New Roman, Times, serif";
+    fontMap("MT Extra") = "Arial, sans-serif";
+    fontMap("Myanmar MN") = "PT Sans Narrow, sans-serif";
+    fontMap("Myanmar Sangam MN") = "Balto, sans-serif";
+    fontMap("Myriad Pro") = "Arial, sans-serif";
+    fontMap("Nadeem") = "Arial, sans-serif";
+    fontMap("Nanum Brush Script") = "Gravitas One, cursive";
+    fontMap("Nanum Gothic") = "Arial, sans-serif";
+    fontMap("Nanum Myeongjo") = "Times New Roman, Times, serif";
+    fontMap("Nanum Pen Script") = "Gravitas One, cursive";
+    fontMap("New Peninim MT") = "Gravitas One, cursive";
+    fontMap("News Gothic MT") = "Arial, sans-serif";
+    fontMap("Noteworthy") = "Gravitas One, cursive";
+    fontMap("Nueva Std") = "Gravitas One, cursive";
+    fontMap("OCR A Std") = "Old Standard TT, serif";
+    fontMap("Onyx") = "PT Sans Narrow, sans-serif";
+    fontMap("Optima") = "Droid Serif, serif";
+    fontMap("Orator Std") = "PT Sans Narrow, sans-serif";
+    fontMap("Oriya MN") = "PT Sans Narrow, sans-serif";
+    fontMap("Oriya Sangam MN") = "Balto, sans-serif";
+    fontMap("Osaka") = "Arial, sans-serif";
+    fontMap("Palatino") = "Old Standard TT, serif";
+    fontMap("Palatino Linotype") = "Old Standard TT, serif";
+    fontMap("Papyrus") = "Gravitas One, cursive";
+    fontMap("PCMyungjo") = "Courier New, monospace";
+    fontMap("Perpetua") = "Droid Serif, serif";
+    fontMap("Perpetua Titling MT") = "Times New Roman, Times, serif";
+    fontMap("PilGi") = "Gravitas One, cursive";
+    fontMap("Plantagenet Cherokee") = "Times New Roman, Times, serif";
+    fontMap("Playbill") = "Arial, sans-serif";
+    fontMap("PMingLiU") = "Courier New, monospace";
+    fontMap("Poplar Std") = "Arial, sans-serif";
+    fontMap("Prestige Elite Std") = "Courier New, monospace";
+    fontMap("PT Sans") = "PT Sans Narrow, sans-serif";
+    fontMap("PT Sans Caption") = "Arial, sans-serif";
+    fontMap("PT Sans Narrow") = "PT Sans Narrow, sans-serif";
+    fontMap("Raanana") = "Times New Roman, Times, serif";
+    fontMap("Rockwell") = "Droid Serif, serif";
+    fontMap("Rockwell Extra Bold") = "Droid Serif, serif";
+    fontMap("Rosewood Std") = "Droid Serif, serif";
+    fontMap("SansSerif") = "Open Sans, sans-serif";
+    fontMap("Sathu") = "Arial, sans-serif";
+    fontMap("Serif") = "Times New Roman, Times, serif";
+    fontMap("Silom") = "Arial, sans-serif";
+    fontMap("SimSun") = "Courier New, monospace";
+    fontMap("Sinhala MN") = "Balto, sans-serif";
+    fontMap("Sinhala Sangam MN") = "Balto, sans-serif";
+    fontMap("Skia") = "Raleway, sans-serif";
+    fontMap("Stencil") = "Old Standard TT, serif";
+    fontMap("Stencil Std") = "Old Standard TT, serif";
+    fontMap("STFangsong") = "Times New Roman, Times, serif";
+    fontMap("STHeiti") = "Balto, sans-serif";
+    fontMap("STIXGeneral") = "Times New Roman, Times, serif";
+    fontMap("STIXIntegralsD") = "Arial, sans-serif";
+    fontMap("STIXIntegralsSm") = "Arial, sans-serif";
+    fontMap("STIXIntegralsUp") = "Arial, sans-serif";
+    fontMap("STIXIntegralsUpD") = "Arial, sans-serif";
+    fontMap("STIXIntegralsUpSm") = "Arial, sans-serif";
+    fontMap("STIXNonUnicode") = "Arial, sans-serif";
+    fontMap("STIXSizeFiveSym") = "Arial, sans-serif";
+    fontMap("STIXSizeFourSym") = "Arial, sans-serif";
+    fontMap("STIXSizeOneSym") = "Arial, sans-serif";
+    fontMap("STIXSizeThreeSym") = "Arial, sans-serif";
+    fontMap("STIXSizeTwoSym") = "Arial, sans-serif";
+    fontMap("STIXVariants") = "Arial, sans-serif";
+    fontMap("STKaiti") = "Times New Roman, Times, serif";
+    fontMap("STSong") = "Times New Roman, Times, serif";
+    fontMap("Symbol") = "Open Sans, sans-serif";
+    fontMap("Tahoma") = "Arial, sans-serif";
+    fontMap("Tamil MN") = "PT Sans Narrow, sans-serif";
+    fontMap("Tamil Sangam MN") = "Balto, sans-serif";
+    fontMap("Tekton Pro") = "Gravitas One, cursive";
+    fontMap("Telugu MN") = "Arial, sans-serif";
+    fontMap("Telugu Sangam MN") = "Arial, sans-serif";
+    fontMap("Thonburi") = "Arial, sans-serif";
+    fontMap("Times") = "Times New Roman, Times, serif";
+    fontMap("Times New Roman") = "Times New Roman, Times, serif";
+    fontMap("Trajan Pro") = "Times New Roman, Times, serif";
+    fontMap("Trebuchet MS") = "Arial, sans-serif";
+    fontMap("Tw Cen MT") = "Balto, sans-serif";
+    fontMap("Verdana") = "Arial, sans-serif";
+    fontMap("Webdings") = "Arial, sans-serif";
+    fontMap("Wide Latin") = "Gravitas One, cursive";
+    fontMap("Zapf Dingbats") = "Open Sans, sans-serif";
+    fontMap("Zapfino") = "Gravitas One, cursive";
 end
diff --git a/plotly/plotlyfig_aux/helpers/openurl.m b/plotly/plotlyfig_aux/helpers/openurl.m
index 317fbdb6..2bebb649 100644
--- a/plotly/plotlyfig_aux/helpers/openurl.m
+++ b/plotly/plotlyfig_aux/helpers/openurl.m
@@ -8,4 +8,4 @@ function openurl(url)
                     '</a>\n\n'], url)
         end
     end
-end
\ No newline at end of file
+end
diff --git a/plotly/plotlyfig_aux/helpers/parseString.m b/plotly/plotlyfig_aux/helpers/parseString.m
index 0023b19b..0d7681b4 100644
--- a/plotly/plotlyfig_aux/helpers/parseString.m
+++ b/plotly/plotlyfig_aux/helpers/parseString.m
@@ -5,15 +5,15 @@
     %
     % TeX: parses through inputStr for instances of
     % the specials characters: \, _, and ^. Uses whitespace
-    % as a delimter for the end of \reservedwords (enforced
+    % as a delimiter for the end of \reservedwords (enforced
     % if not already present), uses either the enclosing { }
-    % brackets  as delimeters for _ and ^ or simply the
+    % brackets  as delimiters for _ and ^ or simply the
     % immediately proceeding character if no curly brackets
     % are present. If the immediately proceeding character
     % of ^ or _ is a \reservedword, the entire word up to the
     % next whitespace is taken. All other characters are
     % contained within \text{ } blocks. Resulting string is
-    % placed within inline: formatStr = $ ...parsedStr... $ delimeters.
+    % placed within inline: formatStr = $ ...parsedStr... $ delimiters.
     %
     % LaTeX: parses through inputStr for instances of $
     % or $$. Assumes that $/$$ are only ever used as
@@ -21,9 +21,9 @@
     % $/$ or $$/$$ blocks are placed within a \text{ } block.
     % Finally, all instances of $/$$ are removed and the
     % resulting string is placed (if no $$ instance is present)
-    % within inline: formatStr = $ ...parsedStr...$ delimeters
-    % or (if an instance of $$ is present) wihtin block:
-    % formatStr $$... parsedStr ... $$ delimeters.
+    % within inline: formatStr = $ ...parsedStr...$ delimiters
+    % or (if an instance of $$ is present) within block:
+    % formatStr $$... parsedStr ... $$ delimiters.
 
     %initialize output
     formatStr = inputStr;
@@ -36,7 +36,7 @@
     try
         istex = false;
         islatex = false;
-        
+
         %------- CONVERT CELL ARRAY TO STRING WITH LINE BREAKS -------%
         if (iscell(inputStr))
             if (size(inputStr,1)==1)
@@ -45,9 +45,9 @@
                 inputStr = strjoin(inputStr', '<br>');
             end
         end
-        
+
         %------- PARSE TEX --------%
-        
+
         if (strcmp(interpreter,'tex'))
             %add white space after reserved TeX words
             formatStr = formatRW(inputStr);
@@ -163,7 +163,7 @@
             end
             %created parsedStr from formatStrCell
             parsedStr = [ formatStrCell{:} ];
-            
+
             % place in inline: $...parsedStr...$ delimiters
             if (istex)
                 formatStr = ['$' parsedStr '$'];
@@ -178,7 +178,7 @@
             ccount = 1;
             %look for existence of $$
             dsPairs = regexp(formatStr,'\$\$');
-            
+
             %iterate through formatStr
             while scount <= (length(formatStr))
                 if (strcmp(formatStr(scount),'$'))
diff --git a/plotly/plotlyfig_aux/helpers/plotlymsg.m b/plotly/plotlyfig_aux/helpers/plotlymsg.m
index ae7489b7..3edc7248 100644
--- a/plotly/plotlyfig_aux/helpers/plotlymsg.m
+++ b/plotly/plotlyfig_aux/helpers/plotlymsg.m
@@ -3,7 +3,7 @@
         %--plotlyfig constructor--%
         case 'plotlyfigConstructor:notSignedIn'
             errormsg = ['\nOops! You must be signed in to initialize ' ...
-                    'a plotlyfig object.\n']; 
+                    'a plotlyfig object.\n'];
         case 'plotlyfigConstructor:invalidInputs'
             errormsg = ['\nOops! It appears that you did not ' ...
                     'initialize the plotlyfig object using the\n', ...
diff --git a/plotly/plotlyfig_aux/helpers/specialAxisPlots.m b/plotly/plotlyfig_aux/helpers/specialAxisPlots.m
index 412c7333..bba31046 100644
--- a/plotly/plotlyfig_aux/helpers/specialAxisPlots.m
+++ b/plotly/plotlyfig_aux/helpers/specialAxisPlots.m
@@ -1,3 +1,3 @@
 function out = specialAxisPlots()
-    out = ["polaraxes" "stackedplot"];
+    out = ["polaraxes" "stackedplot" "uicontextmenu" "legend"];
 end
diff --git a/plotly/plotlyhelp.m b/plotly/plotlyhelp.m
index 076b8828..312899a2 100644
--- a/plotly/plotlyhelp.m
+++ b/plotly/plotlyhelp.m
@@ -3,7 +3,7 @@
 
     %converts graph_obj_meta.json to struct/cell array and outputs key
     plotlyref = load('plotly_reference.mat');
-    pr = plotlyref.pr; 
+    pr = plotlyref.pr;
     pr.online = 'Access the online docs!';
 
     try
@@ -18,12 +18,12 @@
                 end
             case 2
                 plotlyref = pr.(lower(varargin{1})).(lower(varargin{2}));
-            case 3 
+            case 3
                 plotlyref = pr.(lower(varargin{1})).(lower(varargin{2})).(lower(varargin{3}));
             case 4 %does the struct nesting ever go beyond 4?
                 plotlyref = pr.(lower(varargin{1})).(lower(varargin{2})).(lower(varargin{3})).(lower(varargin{4}));
         end
-        
+
     catch exception
         fprintf(['\n\nSorry! We could not find what you were looking ' ...
                 'for. Please specify a valid Plotly reference.\n\n']);
diff --git a/plotly/plotlystream.m b/plotly/plotlystream.m
index 29994cca..702f0b83 100644
--- a/plotly/plotlystream.m
+++ b/plotly/plotlystream.m
@@ -7,13 +7,13 @@
     % class plots data to these traces, as identified with the unique
     % stream_id, in real-time. Every viewer of the graph sees
     % the same data at the same time.
-    
+
     %----CLASS PROPERTIES----%
     properties
         Response
         Specs
     end
-    
+
     properties (Access=private)
         URL
         ErrorURL
@@ -22,16 +22,16 @@
         Stream
         ErrorStream
     end
-    
+
     %----CLASS METHODS----%
     methods
-        
+
         %----CONSTRUCTOR---%
         function obj = plotlystream(request)
-            
+
             %default stream settings
             obj.Specs.Token = '';
-            
+
             %look for specified streaming domain
             try
                 config = loadplotlyconfig;
@@ -39,28 +39,28 @@
             catch
                 obj.Specs.Host = 'http://stream.plot.ly';
             end
-            
+
             %check if ssl is enabled
             if any(strfind(obj.Specs.Host,'https://') == 1)
                 obj.Specs.SSLEnabled = true;
             else
-                obj.Specs.SSLEnabled = false;                
+                obj.Specs.SSLEnabled = false;
             end
-            
+
             %add http if not present on host
             if ~obj.Specs.SSLEnabled
                 if ~any(strfind(obj.Specs.Host,'http://') == 1)
                     obj.Specs.Host = ['http://' obj.Specs.Host];
-                end 
+                end
             end
-            
+
             %specify handler
             if obj.Specs.SSLEnabled
                 obj.Specs.Handler = sun.net.www.protocol.https.Handler;
             else
                 obj.Specs.Handler = sun.net.www.protocol.http.Handler;
             end
-            
+
             %initialize connection settings
             obj.Specs.ReconnectOn = {'','200','408'};
             obj.Specs.Timeout = 500;
@@ -69,10 +69,10 @@
             obj.Specs.ConnectAttempts = 0;
             obj.Specs.ConnectDelay = 1;
             obj.Specs.MaxConnectAttempts = 5;
-            
+
             %initialize output response
             obj.Response = '';
-            
+
             %check for correct input structure
             if nargin > 0
                 if ischar(request)
@@ -110,29 +110,28 @@
                     'chuck@plot.ly']);
             end
         end
-         
+
         %-----------OPEN STREAM-----------%
         function obj = open(obj)
             try obj.connect;
                 %Connection successful!
                 fprintf('\n[Connection Successful]\n\n');
-                
+
                 %update state
                 obj.resetretries;
                 obj.Specs.Closed = false;
-                
+
             catch ME
-                error(['Oops! The following error occured when trying to write to the stream: ',...
+                error(['Oops! The following error occurred when trying to write to the stream: ',...
                     ME.message '. Please check the online documentation ', ...
                     'found @ plot.ly/matlab for more information or contact chuck@plot.ly']);
             end
-            
         end
-        
+
         %-----------CONNECT TO STREAM-----------%
         function obj = connect(obj)
             obj.URL = java.net.URL([],obj.Specs.Host,obj.Specs.Handler);
-            
+
             % Get the proxy information using MathWorks facilities for unified proxy
             % preference settings.
             mwtcp = com.mathworks.net.transport.MWTransportClientPropertiesFactory.create();
@@ -152,7 +151,7 @@
             obj.Connection.setRequestProperty('plotly-streamtoken', obj.Specs.Token);
             obj.Stream = obj.Connection.getOutputStream; %throws an I/O exception
         end
-        
+
         %-----------WRITE STREAM-----------%
         function obj = write(obj,request)
             if nargin ~= 2
@@ -167,9 +166,9 @@
                         'Please check out the online documentation found @ plot.ly/matlab ',...
                         'for more information or contact chuck@plot.ly']);
                 end
-                
+
                 body = request;
-                
+
                 %make sure we did not close the stream
                 if (~obj.Specs.Closed)
                     try
@@ -191,12 +190,12 @@
                                     fprintf('\n[Connection Failed] Reconnecting...\n\n');
                                 end
                                 obj.reconnect;
-                                
+
                                 %add recursion call to not drop data
                                 obj.write(body);
                             else
-                                error(['Oops! The following error occured when trying to write to the stream: ',...
-                                    ME.message '. No attempt to reconnect was made beacause the response code ',...
+                                error(['Oops! The following error occurred when trying to write to the stream: ',...
+                                    ME.message '. No attempt to reconnect was made because the response code ',...
                                     'of: ' obj.Response ' did not match any of the response codes specified in ',...
                                     'the obj.Specs.ReconnectOn parameter. Please check out the online documentation ', ...
                                     'found @ plot.ly/matlab for more information or contact chuck@plot.ly']);
@@ -210,7 +209,7 @@
                 end
             end
         end
-        
+
         %-----------CLOSE STREAM-----------%
         function obj = close(obj)
             try
@@ -226,18 +225,18 @@
             obj.resetretries;
             obj.Specs.Closed = true;
         end
-        
+
         %-----------RECONNECT-----------%
         function obj = reconnect(obj)
             try
                 obj.Specs.ConnectAttempts = obj.Specs.ConnectAttempts + 1;
-                
+
                 %try to connect
                 obj.connect;
-                
+
                 %Connection successful!
                 fprintf('\n[Connection Successful]\n\n');
-                
+
                 %update state
                 obj.resetretries;
                 obj.Specs.Closed = false;
@@ -255,7 +254,7 @@
                 end
             end
         end
-        
+
         %-----------GET RESPONSE-----------%
         function obj = getresponse(obj)
             try
@@ -268,7 +267,7 @@
                 end
             end
         end
-        
+
         %-----------RESET RETRIES-----------%
         function obj = resetretries(obj)
             %reset the connect counter and delay
@@ -277,5 +276,3 @@
         end
     end
 end
-
-
diff --git a/plotly/plotlystream_aux/plotlystream_demo.m b/plotly/plotlystream_aux/plotlystream_demo.m
index faacbad0..f2db57e9 100644
--- a/plotly/plotlystream_aux/plotlystream_demo.m
+++ b/plotly/plotlystream_aux/plotlystream_demo.m
@@ -12,19 +12,19 @@
 
 %----SETUP-----%
 
-p = plotlyfig('visible','off'); 
-p.data{1}.x = []; 
+p = plotlyfig('visible','off');
+p.data{1}.x = [];
 p.data{1}.y = [];
 p.data{1}.type = 'scatter';
-p.data{1}.stream.token = my_stream_token; 
-p.data{1}.stream.maxpoints = 30;  
-p.PlotOptions.Strip = false; 
-p.PlotOptions.FileName = 'stream_test'; 
-p.PlotOptions.FileOpt = 'overwrite'; 
+p.data{1}.stream.token = my_stream_token;
+p.data{1}.stream.maxpoints = 30;
+p.PlotOptions.Strip = false;
+p.PlotOptions.FileName = 'stream_test';
+p.PlotOptions.FileOpt = 'overwrite';
 
 %----PLOTLY-----%
 
-p.plotly; 
+p.plotly;
 
 %----CREATE A PLOTLY STREAM OBJECT----%
 
@@ -32,17 +32,17 @@
 
 %----OPEN THE STREAM----%
 
-ps.open(); 
+ps.open();
 
 %----WRITE TO THE STREAM----%
 
 for i = 1:2000
-    mydata.x = i; 
-    mydata.y = rand; 
+    mydata.x = i;
+    mydata.y = rand;
     ps.write(mydata);
-    %take a breath 
-    pause(0.05); 
+    %take a breath
+    pause(0.05);
 end
 
-%----CLOSE THE STREAM----% 
-ps.close; 
+%----CLOSE THE STREAM----%
+ps.close;
diff --git a/plotly/saveplotlyfig.m b/plotly/saveplotlyfig.m
index 785e7ba2..2642b8b7 100644
--- a/plotly/saveplotlyfig.m
+++ b/plotly/saveplotlyfig.m
@@ -37,26 +37,22 @@
     % For full documentation and examples, see
     % https://plot.ly/matlab/static-image-export/
 
-    %---------------------------------------------------------------------%
-
     %--PARSE FIGURE_OR_DATA--%
     if iscell(figure_or_data)
         p = plotlyfig('Visible','off');
         p.data = figure_or_data;
-        p.layout = struct(); 
-        p.PlotOptions.Strip = false; 
+        p.layout = struct();
+        p.PlotOptions.Strip = false;
     elseif isstruct(figure_or_data);
         p = plotlyfig('Visible','off');
         p.data = figure_or_data.data;
         p.layout = figure_or_data.layout;
-        p.PlotOptions.Strip = false; 
+        p.PlotOptions.Strip = false;
     elseif isa(figure_or_data, 'plotlyfig')
         p = figure_or_data;
         p.PlotOptions.Strip = false;
-    elseif ishandle(figure_or_data)
-        if strcmp(handle(figure_or_data).classhandle.name,'figure')
-            p = plotlyfig(figure_or_data, 'strip', false);
-        end
+    elseif ishandle(figure_or_data) && isa(figure_or_data,"matlab.ui.Figure")
+        p = plotlyfig(figure_or_data, 'strip', false);
     else
         errkey = 'plotlySaveImage:invalidInputs';
         error(errkey,plotlymsg(errkey));
diff --git a/plotly/themes/ggplot2.json b/plotly/themes/ggplot2.json
index e3aefe79..39c27471 100644
--- a/plotly/themes/ggplot2.json
+++ b/plotly/themes/ggplot2.json
@@ -1 +1 @@
-{"data":{"bar":[{"error_x":{"color":"rgb(51,51,51)"},"error_y":{"color":"rgb(51,51,51)"},"marker":{"line":{"color":"rgb(237,237,237)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"rgb(237,237,237)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"rgb(51,51,51)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(51,51,51)"},"baxis":{"endlinecolor":"rgb(51,51,51)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(51,51,51)"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"rgb(237,237,237)"},"line":{"color":"white"}},"header":{"fill":{"color":"rgb(217,217,217)"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"colorscale":{"sequential":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"sequentialminus":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]]},"colorway":["#F8766D","#A3A500","#00BF7D","#00B0F6","#E76BF3"],"font":{"color":"rgb(51,51,51)"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"rgb(237,237,237)","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","paper_bgcolor":"white","plot_bgcolor":"rgb(237,237,237)","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"},"bgcolor":"rgb(237,237,237)","radialaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"}},"scene":{"xaxis":{"backgroundcolor":"rgb(237,237,237)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"rgb(237,237,237)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"rgb(237,237,237)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","zerolinecolor":"white"}},"shapedefaults":{"fillcolor":"black","line":{"width":0},"opacity":0.3},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"},"baxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"},"bgcolor":"rgb(237,237,237)","caxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"}},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","title":{"standoff":15},"zerolinecolor":"white"},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","title":{"standoff":15},"zerolinecolor":"white"}}}
\ No newline at end of file
+{"data":{"bar":[{"error_x":{"color":"rgb(51,51,51)"},"error_y":{"color":"rgb(51,51,51)"},"marker":{"line":{"color":"rgb(237,237,237)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"rgb(237,237,237)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"rgb(51,51,51)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(51,51,51)"},"baxis":{"endlinecolor":"rgb(51,51,51)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(51,51,51)"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"},"colorscale":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"rgb(237,237,237)"},"line":{"color":"white"}},"header":{"fill":{"color":"rgb(217,217,217)"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(237,237,237)","ticklen":6,"ticks":"inside"}},"colorscale":{"sequential":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]],"sequentialminus":[[0,"rgb(20,44,66)"],[1,"rgb(90,179,244)"]]},"colorway":["#F8766D","#A3A500","#00BF7D","#00B0F6","#E76BF3"],"font":{"color":"rgb(51,51,51)"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"rgb(237,237,237)","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","paper_bgcolor":"white","plot_bgcolor":"rgb(237,237,237)","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"},"bgcolor":"rgb(237,237,237)","radialaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"}},"scene":{"xaxis":{"backgroundcolor":"rgb(237,237,237)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"rgb(237,237,237)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"rgb(237,237,237)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","zerolinecolor":"white"}},"shapedefaults":{"fillcolor":"black","line":{"width":0},"opacity":0.3},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"},"baxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"},"bgcolor":"rgb(237,237,237)","caxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside"}},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","title":{"standoff":15},"zerolinecolor":"white"},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","showgrid":true,"tickcolor":"rgb(51,51,51)","ticks":"outside","title":{"standoff":15},"zerolinecolor":"white"}}}
diff --git a/plotly/themes/gridon.json b/plotly/themes/gridon.json
index 9534f897..6bb6d782 100644
--- a/plotly/themes/gridon.json
+++ b/plotly/themes/gridon.json
@@ -1 +1 @@
-{"data":{"pie":[{"automargin":true,"type":"pie"}]},"layout":{"xaxis":{"showgrid":true,"title":{"standoff":15}},"yaxis":{"showgrid":true,"title":{"standoff":15}}}}
\ No newline at end of file
+{"data":{"pie":[{"automargin":true,"type":"pie"}]},"layout":{"xaxis":{"showgrid":true,"title":{"standoff":15}},"yaxis":{"showgrid":true,"title":{"standoff":15}}}}
diff --git a/plotly/themes/plotly.json b/plotly/themes/plotly.json
index f1481d46..cf0c7f69 100644
--- a/plotly/themes/plotly.json
+++ b/plotly/themes/plotly.json
@@ -1 +1 @@
-{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"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"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"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"]],"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"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"#E5ECF6","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2}}}
\ No newline at end of file
+{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"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"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"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"]],"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"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"#E5ECF6","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"bgcolor":"#E5ECF6","caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","zerolinewidth":2}}}
diff --git a/plotly/themes/plotly_dark.json b/plotly/themes/plotly_dark.json
index 3a1101c6..c79bbc89 100644
--- a/plotly/themes/plotly_dark.json
+++ b/plotly/themes/plotly_dark.json
@@ -1 +1 @@
-{"data":{"bar":[{"error_x":{"color":"#f2f5fa"},"error_y":{"color":"#f2f5fa"},"marker":{"line":{"color":"rgb(17,17,17)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"rgb(17,17,17)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#A2B1C6","gridcolor":"#506784","linecolor":"#506784","minorgridcolor":"#506784","startlinecolor":"#A2B1C6"},"baxis":{"endlinecolor":"#A2B1C6","gridcolor":"#506784","linecolor":"#506784","minorgridcolor":"#506784","startlinecolor":"#A2B1C6"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"line":{"color":"#283442"}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"line":{"color":"#283442"}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#506784"},"line":{"color":"rgb(17,17,17)"}},"header":{"fill":{"color":"#2a3f5f"},"line":{"color":"rgb(17,17,17)"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#f2f5fa","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"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"]],"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"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#f2f5fa"},"geo":{"bgcolor":"rgb(17,17,17)","lakecolor":"rgb(17,17,17)","landcolor":"rgb(17,17,17)","showlakes":true,"showland":true,"subunitcolor":"#506784"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"dark"},"paper_bgcolor":"rgb(17,17,17)","plot_bgcolor":"rgb(17,17,17)","polar":{"angularaxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""},"bgcolor":"rgb(17,17,17)","radialaxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"rgb(17,17,17)","gridcolor":"#506784","gridwidth":2,"linecolor":"#506784","showbackground":true,"ticks":"","zerolinecolor":"#C8D4E3"},"yaxis":{"backgroundcolor":"rgb(17,17,17)","gridcolor":"#506784","gridwidth":2,"linecolor":"#506784","showbackground":true,"ticks":"","zerolinecolor":"#C8D4E3"},"zaxis":{"backgroundcolor":"rgb(17,17,17)","gridcolor":"#506784","gridwidth":2,"linecolor":"#506784","showbackground":true,"ticks":"","zerolinecolor":"#C8D4E3"}},"shapedefaults":{"line":{"color":"#f2f5fa"}},"sliderdefaults":{"bgcolor":"#C8D4E3","bordercolor":"rgb(17,17,17)","borderwidth":1,"tickwidth":0},"ternary":{"aaxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""},"baxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""},"bgcolor":"rgb(17,17,17)","caxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""}},"title":{"x":0.05},"updatemenudefaults":{"bgcolor":"#506784","borderwidth":0},"xaxis":{"automargin":true,"gridcolor":"#283442","linecolor":"#506784","ticks":"","title":{"standoff":15},"zerolinecolor":"#283442","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#283442","linecolor":"#506784","ticks":"","title":{"standoff":15},"zerolinecolor":"#283442","zerolinewidth":2}}}
\ No newline at end of file
+{"data":{"bar":[{"error_x":{"color":"#f2f5fa"},"error_y":{"color":"#f2f5fa"},"marker":{"line":{"color":"rgb(17,17,17)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"rgb(17,17,17)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#A2B1C6","gridcolor":"#506784","linecolor":"#506784","minorgridcolor":"#506784","startlinecolor":"#A2B1C6"},"baxis":{"endlinecolor":"#A2B1C6","gridcolor":"#506784","linecolor":"#506784","minorgridcolor":"#506784","startlinecolor":"#A2B1C6"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"line":{"color":"#283442"}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"line":{"color":"#283442"}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#506784"},"line":{"color":"rgb(17,17,17)"}},"header":{"fill":{"color":"#2a3f5f"},"line":{"color":"rgb(17,17,17)"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#f2f5fa","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"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"]],"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"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#f2f5fa"},"geo":{"bgcolor":"rgb(17,17,17)","lakecolor":"rgb(17,17,17)","landcolor":"rgb(17,17,17)","showlakes":true,"showland":true,"subunitcolor":"#506784"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"dark"},"paper_bgcolor":"rgb(17,17,17)","plot_bgcolor":"rgb(17,17,17)","polar":{"angularaxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""},"bgcolor":"rgb(17,17,17)","radialaxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"rgb(17,17,17)","gridcolor":"#506784","gridwidth":2,"linecolor":"#506784","showbackground":true,"ticks":"","zerolinecolor":"#C8D4E3"},"yaxis":{"backgroundcolor":"rgb(17,17,17)","gridcolor":"#506784","gridwidth":2,"linecolor":"#506784","showbackground":true,"ticks":"","zerolinecolor":"#C8D4E3"},"zaxis":{"backgroundcolor":"rgb(17,17,17)","gridcolor":"#506784","gridwidth":2,"linecolor":"#506784","showbackground":true,"ticks":"","zerolinecolor":"#C8D4E3"}},"shapedefaults":{"line":{"color":"#f2f5fa"}},"sliderdefaults":{"bgcolor":"#C8D4E3","bordercolor":"rgb(17,17,17)","borderwidth":1,"tickwidth":0},"ternary":{"aaxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""},"baxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""},"bgcolor":"rgb(17,17,17)","caxis":{"gridcolor":"#506784","linecolor":"#506784","ticks":""}},"title":{"x":0.05},"updatemenudefaults":{"bgcolor":"#506784","borderwidth":0},"xaxis":{"automargin":true,"gridcolor":"#283442","linecolor":"#506784","ticks":"","title":{"standoff":15},"zerolinecolor":"#283442","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#283442","linecolor":"#506784","ticks":"","title":{"standoff":15},"zerolinecolor":"#283442","zerolinewidth":2}}}
diff --git a/plotly/themes/plotly_white.json b/plotly/themes/plotly_white.json
index 51fa9b2b..cc4b0391 100644
--- a/plotly/themes/plotly_white.json
+++ b/plotly/themes/plotly_white.json
@@ -1 +1 @@
-{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"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"]],"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"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"#C8D4E3"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""},"bgcolor":"white","radialaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"yaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"zaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"baxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"bgcolor":"white","caxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2}}}
\ No newline at end of file
+{"data":{"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"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"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"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"]],"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"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"#C8D4E3"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""},"bgcolor":"white","radialaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"yaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"zaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"baxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"bgcolor":"white","caxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2}}}
diff --git a/plotly/themes/presentation.json b/plotly/themes/presentation.json
index fcb9bf15..5b123983 100644
--- a/plotly/themes/presentation.json
+++ b/plotly/themes/presentation.json
@@ -1 +1 @@
-{"data":{"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"line":{"width":3},"marker":{"size":9},"type":"scatter"}],"scatter3d":[{"line":{"width":3},"marker":{"size":9},"type":"scatter3d"}],"scattergeo":[{"line":{"width":3},"marker":{"size":9},"type":"scattergeo"}],"scattergl":[{"line":{"width":3},"marker":{"size":9},"type":"scattergl"}],"scatterpolar":[{"line":{"width":3},"marker":{"size":9},"type":"scatterpolar"}],"scatterpolargl":[{"line":{"width":3},"marker":{"size":9},"type":"scatterpolargl"}],"scatterternary":[{"line":{"width":3},"marker":{"size":9},"type":"scatterternary"}],"table":[{"cells":{"height":30},"header":{"height":36},"type":"table"}]},"layout":{"font":{"size":18},"xaxis":{"title":{"standoff":15}},"yaxis":{"title":{"standoff":15}}}}
\ No newline at end of file
+{"data":{"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"line":{"width":3},"marker":{"size":9},"type":"scatter"}],"scatter3d":[{"line":{"width":3},"marker":{"size":9},"type":"scatter3d"}],"scattergeo":[{"line":{"width":3},"marker":{"size":9},"type":"scattergeo"}],"scattergl":[{"line":{"width":3},"marker":{"size":9},"type":"scattergl"}],"scatterpolar":[{"line":{"width":3},"marker":{"size":9},"type":"scatterpolar"}],"scatterpolargl":[{"line":{"width":3},"marker":{"size":9},"type":"scatterpolargl"}],"scatterternary":[{"line":{"width":3},"marker":{"size":9},"type":"scatterternary"}],"table":[{"cells":{"height":30},"header":{"height":36},"type":"table"}]},"layout":{"font":{"size":18},"xaxis":{"title":{"standoff":15}},"yaxis":{"title":{"standoff":15}}}}
diff --git a/plotly/themes/seaborn.json b/plotly/themes/seaborn.json
index 66b9a4dd..a4dce9bf 100644
--- a/plotly/themes/seaborn.json
+++ b/plotly/themes/seaborn.json
@@ -1 +1 @@
-{"data":{"bar":[{"error_x":{"color":"rgb(36,36,36)"},"error_y":{"color":"rgb(36,36,36)"},"marker":{"line":{"color":"rgb(234,234,242)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"rgb(234,234,242)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"rgb(36,36,36)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(36,36,36)"},"baxis":{"endlinecolor":"rgb(36,36,36)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(36,36,36)"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"rgb(231,231,240)"},"line":{"color":"white"}},"header":{"fill":{"color":"rgb(183,183,191)"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"rgb(67,103,167)"},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"colorscale":{"sequential":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"sequentialminus":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]]},"colorway":["rgb(76,114,176)","rgb(221,132,82)","rgb(85,168,104)","rgb(196,78,82)","rgb(129,114,179)","rgb(147,120,96)","rgb(218,139,195)","rgb(140,140,140)","rgb(204,185,116)","rgb(100,181,205)"],"font":{"color":"rgb(36,36,36)"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"rgb(234,234,242)","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","paper_bgcolor":"white","plot_bgcolor":"rgb(234,234,242)","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""},"bgcolor":"rgb(234,234,242)","radialaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""}},"scene":{"xaxis":{"backgroundcolor":"rgb(234,234,242)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"rgb(234,234,242)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"rgb(234,234,242)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"fillcolor":"rgb(67,103,167)","line":{"width":0},"opacity":0.5},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""},"bgcolor":"rgb(234,234,242)","caxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""}},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":"","title":{"standoff":15},"zerolinecolor":"white"},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":"","title":{"standoff":15},"zerolinecolor":"white"}}}
\ No newline at end of file
+{"data":{"bar":[{"error_x":{"color":"rgb(36,36,36)"},"error_y":{"color":"rgb(36,36,36)"},"marker":{"line":{"color":"rgb(234,234,242)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"rgb(234,234,242)","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"rgb(36,36,36)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(36,36,36)"},"baxis":{"endlinecolor":"rgb(36,36,36)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(36,36,36)"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"heatmapgl"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2},"colorscale":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"rgb(231,231,240)"},"line":{"color":"white"}},"header":{"fill":{"color":"rgb(183,183,191)"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"rgb(67,103,167)"},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"tickcolor":"rgb(36,36,36)","ticklen":8,"ticks":"outside","tickwidth":2}},"colorscale":{"sequential":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]],"sequentialminus":[[0.0,"rgb(2,4,25)"],[0.06274509803921569,"rgb(24,15,41)"],[0.12549019607843137,"rgb(47,23,57)"],[0.18823529411764706,"rgb(71,28,72)"],[0.25098039215686274,"rgb(97,30,82)"],[0.3137254901960784,"rgb(123,30,89)"],[0.3764705882352941,"rgb(150,27,91)"],[0.4392156862745098,"rgb(177,22,88)"],[0.5019607843137255,"rgb(203,26,79)"],[0.5647058823529412,"rgb(223,47,67)"],[0.6274509803921569,"rgb(236,76,61)"],[0.6901960784313725,"rgb(242,107,73)"],[0.7529411764705882,"rgb(244,135,95)"],[0.8156862745098039,"rgb(245,162,122)"],[0.8784313725490196,"rgb(246,188,153)"],[0.9411764705882353,"rgb(247,212,187)"],[1.0,"rgb(250,234,220)"]]},"colorway":["rgb(76,114,176)","rgb(221,132,82)","rgb(85,168,104)","rgb(196,78,82)","rgb(129,114,179)","rgb(147,120,96)","rgb(218,139,195)","rgb(140,140,140)","rgb(204,185,116)","rgb(100,181,205)"],"font":{"color":"rgb(36,36,36)"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"rgb(234,234,242)","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","paper_bgcolor":"white","plot_bgcolor":"rgb(234,234,242)","polar":{"angularaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""},"bgcolor":"rgb(234,234,242)","radialaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""}},"scene":{"xaxis":{"backgroundcolor":"rgb(234,234,242)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"ticks":"","zerolinecolor":"white"},"yaxis":{"backgroundcolor":"rgb(234,234,242)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"ticks":"","zerolinecolor":"white"},"zaxis":{"backgroundcolor":"rgb(234,234,242)","gridcolor":"white","gridwidth":2,"linecolor":"white","showbackground":true,"showgrid":true,"ticks":"","zerolinecolor":"white"}},"shapedefaults":{"fillcolor":"rgb(67,103,167)","line":{"width":0},"opacity":0.5},"ternary":{"aaxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""},"bgcolor":"rgb(234,234,242)","caxis":{"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":""}},"xaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":"","title":{"standoff":15},"zerolinecolor":"white"},"yaxis":{"automargin":true,"gridcolor":"white","linecolor":"white","showgrid":true,"ticks":"","title":{"standoff":15},"zerolinecolor":"white"}}}
diff --git a/plotly/themes/simple_white.json b/plotly/themes/simple_white.json
index 98f84b66..ae8c9782 100644
--- a/plotly/themes/simple_white.json
+++ b/plotly/themes/simple_white.json
@@ -1 +1 @@
-{"data":{"bar":[{"error_x":{"color":"rgb(36,36,36)"},"error_y":{"color":"rgb(36,36,36)"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"rgb(36,36,36)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(36,36,36)"},"baxis":{"endlinecolor":"rgb(36,36,36)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(36,36,36)"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"heatmapgl"}],"histogram":[{"marker":{"line":{"color":"white","width":0.6}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"rgb(237,237,237)"},"line":{"color":"white"}},"header":{"fill":{"color":"rgb(217,217,217)"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"colorscale":{"diverging":[[0.0,"rgb(103,0,31)"],[0.1,"rgb(178,24,43)"],[0.2,"rgb(214,96,77)"],[0.3,"rgb(244,165,130)"],[0.4,"rgb(253,219,199)"],[0.5,"rgb(247,247,247)"],[0.6,"rgb(209,229,240)"],[0.7,"rgb(146,197,222)"],[0.8,"rgb(67,147,195)"],[0.9,"rgb(33,102,172)"],[1.0,"rgb(5,48,97)"]],"sequential":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"sequentialminus":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]]},"colorway":["#1F77B4","#FF7F0E","#2CA02C","#D62728","#9467BD","#8C564B","#E377C2","#7F7F7F","#BCBD22","#17BECF"],"font":{"color":"rgb(36,36,36)"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"},"bgcolor":"white","radialaxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"rgb(232,232,232)","gridwidth":2,"linecolor":"rgb(36,36,36)","showbackground":true,"showgrid":false,"showline":true,"ticks":"outside","zeroline":false,"zerolinecolor":"rgb(36,36,36)"},"yaxis":{"backgroundcolor":"white","gridcolor":"rgb(232,232,232)","gridwidth":2,"linecolor":"rgb(36,36,36)","showbackground":true,"showgrid":false,"showline":true,"ticks":"outside","zeroline":false,"zerolinecolor":"rgb(36,36,36)"},"zaxis":{"backgroundcolor":"white","gridcolor":"rgb(232,232,232)","gridwidth":2,"linecolor":"rgb(36,36,36)","showbackground":true,"showgrid":false,"showline":true,"ticks":"outside","zeroline":false,"zerolinecolor":"rgb(36,36,36)"}},"shapedefaults":{"fillcolor":"black","line":{"width":0},"opacity":0.3},"ternary":{"aaxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"},"baxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"},"bgcolor":"white","caxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside","title":{"standoff":15},"zeroline":false,"zerolinecolor":"rgb(36,36,36)"},"yaxis":{"automargin":true,"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside","title":{"standoff":15},"zeroline":false,"zerolinecolor":"rgb(36,36,36)"}}}
\ No newline at end of file
+{"data":{"bar":[{"error_x":{"color":"rgb(36,36,36)"},"error_y":{"color":"rgb(36,36,36)"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"carpet":[{"aaxis":{"endlinecolor":"rgb(36,36,36)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(36,36,36)"},"baxis":{"endlinecolor":"rgb(36,36,36)","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"rgb(36,36,36)"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"type":"choropleth"}],"contour":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"contour"}],"contourcarpet":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"type":"contourcarpet"}],"heatmap":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"heatmap"}],"heatmapgl":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"heatmapgl"}],"histogram":[{"marker":{"line":{"color":"white","width":0.6}},"type":"histogram"}],"histogram2d":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"histogram2d"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"histogram2dcontour"}],"mesh3d":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatter"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scattermapbox"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatterpolar"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatterpolargl"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"rgb(237,237,237)"},"line":{"color":"white"}},"header":{"fill":{"color":"rgb(217,217,217)"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":1,"tickcolor":"rgb(36,36,36)","ticks":"outside"}},"colorscale":{"diverging":[[0.0,"rgb(103,0,31)"],[0.1,"rgb(178,24,43)"],[0.2,"rgb(214,96,77)"],[0.3,"rgb(244,165,130)"],[0.4,"rgb(253,219,199)"],[0.5,"rgb(247,247,247)"],[0.6,"rgb(209,229,240)"],[0.7,"rgb(146,197,222)"],[0.8,"rgb(67,147,195)"],[0.9,"rgb(33,102,172)"],[1.0,"rgb(5,48,97)"]],"sequential":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]],"sequentialminus":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]]},"colorway":["#1F77B4","#FF7F0E","#2CA02C","#D62728","#9467BD","#8C564B","#E377C2","#7F7F7F","#BCBD22","#17BECF"],"font":{"color":"rgb(36,36,36)"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"white"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"},"bgcolor":"white","radialaxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"rgb(232,232,232)","gridwidth":2,"linecolor":"rgb(36,36,36)","showbackground":true,"showgrid":false,"showline":true,"ticks":"outside","zeroline":false,"zerolinecolor":"rgb(36,36,36)"},"yaxis":{"backgroundcolor":"white","gridcolor":"rgb(232,232,232)","gridwidth":2,"linecolor":"rgb(36,36,36)","showbackground":true,"showgrid":false,"showline":true,"ticks":"outside","zeroline":false,"zerolinecolor":"rgb(36,36,36)"},"zaxis":{"backgroundcolor":"white","gridcolor":"rgb(232,232,232)","gridwidth":2,"linecolor":"rgb(36,36,36)","showbackground":true,"showgrid":false,"showline":true,"ticks":"outside","zeroline":false,"zerolinecolor":"rgb(36,36,36)"}},"shapedefaults":{"fillcolor":"black","line":{"width":0},"opacity":0.3},"ternary":{"aaxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"},"baxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"},"bgcolor":"white","caxis":{"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside"}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside","title":{"standoff":15},"zeroline":false,"zerolinecolor":"rgb(36,36,36)"},"yaxis":{"automargin":true,"gridcolor":"rgb(232,232,232)","linecolor":"rgb(36,36,36)","showgrid":false,"showline":true,"ticks":"outside","title":{"standoff":15},"zeroline":false,"zerolinecolor":"rgb(36,36,36)"}}}
diff --git a/plotly/themes/xgridoff.json b/plotly/themes/xgridoff.json
index ef0d8214..2576c0bb 100644
--- a/plotly/themes/xgridoff.json
+++ b/plotly/themes/xgridoff.json
@@ -1 +1 @@
-{"data":{"pie":[{"automargin":true,"type":"pie"}]},"layout":{"xaxis":{"showgrid":false,"title":{"standoff":15}},"yaxis":{"title":{"standoff":15}}}}
\ No newline at end of file
+{"data":{"pie":[{"automargin":true,"type":"pie"}]},"layout":{"xaxis":{"showgrid":false,"title":{"standoff":15}},"yaxis":{"title":{"standoff":15}}}}
diff --git a/plotly/themes/ygridoff.json b/plotly/themes/ygridoff.json
index d169497a..7c1c3e0b 100644
--- a/plotly/themes/ygridoff.json
+++ b/plotly/themes/ygridoff.json
@@ -1 +1 @@
-{"data":{"pie":[{"automargin":true,"type":"pie"}]},"layout":{"yaxis":{"showgrid":false}}}
\ No newline at end of file
+{"data":{"pie":[{"automargin":true,"type":"pie"}]},"layout":{"yaxis":{"showgrid":false}}}
diff --git a/plotlysetup_offline.m b/plotlysetup_offline.m
index 08bb5ab2..9ef2fa9b 100644
--- a/plotlysetup_offline.m
+++ b/plotlysetup_offline.m
@@ -4,11 +4,11 @@ function plotlysetup_offline(plotly_bundle_url, varargin)
     % If no argument is provided, the default http://cdn.plot.ly/plotly-latest.min.js is used.
     % [1] adds plotly api to matlabroot/toolboxes. If successful do [2]
     % [2] adds plotly api to searchpath via startup.m of matlabroot and/or userpath
-    
+
     %DEFAULT OUTPUT
     exception.message = '';
     exception.identifier = '';
-    
+
     try %check number of inputs
         if nargin == 0
             plotly_bundle_url = 'http://cdn.plot.ly/plotly-latest.min.js';
@@ -22,7 +22,7 @@ function plotlysetup_offline(plotly_bundle_url, varargin)
         fprintf(['\n\n' exception.identifier exception.message '\n\n']);
         return
     end
-    
+
     try
         %check to see if plotly is in the searchpath
         plotlysetupPath = which('plotlysetup');
@@ -40,43 +40,43 @@ function plotlysetup_offline(plotly_bundle_url, varargin)
         fprintf(['\n\n' exception.identifier exception.message '\n']);
         return
     end
-    
+
     if ~is_octave
         try
             %embed the api to the matlabroot/toolbox dir.
             fprintf('\nAdding Plotly to MATLAB toolbox directory ...  ');
-            
+
             %plotly folder in the matlab/toolbox dir.
             plotlyToolboxPath = fullfile(matlabroot,'toolbox','plotly');
-            
+
             if exist(plotlyToolboxPath,'dir') %check for overwrite...
                 fprintf(['\n\n[UPDATE]: \n\nHey! We see that a copy of Plotly has previously been added to\n' ...
                     'your Matlab toolboxes. Would you like us to overwrite it with:\n' plotlyFolderPath ' ? \n'...
                     'Careful! You may lose data saved to this Plotly directory.\n\n']);
-                
+
                 overwrite = input('Overwrite (y/n) ? : ','s');
-                
+
                 if (strcmpi(overwrite,'y'));
                     fprintf('\n[OVERWRITE]:\n\nOverwriting Plotly! ... Done \n');
                 else
                     fprintf('\n[NO OVERWRITE]:\n\nDid not overwrite Plotly! ... Done \n');
                 end
             else %toolbox Plotly not yet created
-                %worked (without interuption)...just a formatting thing!
+                %worked (without interruption)...just a formatting thing!
                 fprintf('Done\n');
-                
+
                 %make the plotlyToolboxPath dir.
                 status = mkdir(plotlyToolboxPath);
-                
+
                 %set status to overwrite
                 overwrite = 'y';
-                
+
                 %check that the folder was created
                 if (status == 0)
                     error('plotly:savePlotly', permissionMessage('save the Plotly folder'));
                 end
             end
-            
+
             if strcmpi(overwrite,'y')
                 %move a copy of the Plotly api to matlab root directory
                 [status, msg, messid] = copyfile(plotlyFolderPath,plotlyToolboxPath);
@@ -86,15 +86,14 @@ function plotlysetup_offline(plotly_bundle_url, varargin)
                         error('plotly:copyPlotly',permissionMessage('copy the Plotly folder'));
                     end
                 end
-                
             end
-            
+
             %add it to the searchpath (startup.m will handle this next time!)
             addpath(genpath(plotlyToolboxPath),'-end');
-            
+
             %save plotly api searchpath to startup.m files (only do this if we actually were able to store the api in mtlroot/toolbox!)
             fprintf('Saving Plotly to MATLAB search path via startup.m ... ');
-            
+
             %check for a startup.m file in matlab rootpath (we want to add one here)
             startupFile = [];
             startupFileRootPath = fullfile(matlabroot,'toolbox','local','startup.m');
@@ -106,15 +105,15 @@ function plotlysetup_offline(plotly_bundle_url, varargin)
                 end
                 startupFile = {startupFileRootPath}; %needed because MATLAB only looks for startup.m when first opened.
             end
-            
+
             %check for all startup.m file in searchpath
             startupFile = [startupFile; cell(which('startup.m','-all'))];
             %write the addpath - plotly api to the startup.m files
             [warnings] = addplotlystartup(startupFile);
-            
+
             %worked!
             fprintf(' Done\n');
-            
+
             %print any addplotlydstatup warnings;
             w = cellfun(@isempty,warnings);
             if find(~w)
@@ -122,24 +121,24 @@ function plotlysetup_offline(plotly_bundle_url, varargin)
                 exception.warnings = warnings;
                 fprintf(warnings{find(~w)});
             end
-            
+
         catch exception %copying to toolbox/writing to startup.m permission problem catch...
             fprintf(['\n\n' exception.identifier exception.message '\n\n']);
         end
-        
+
     else %if octave
         fprintf('\n\nOctave users: Automatic Plotly API embedding coming soon!\n\n');
     end %end check for matlab...
-    
+
     %get offline bundle
     fprintf('\nNow downloading the plotly offline bundle ...');
     getplotlyoffline(plotly_bundle_url);
-    
+
     %greet the people!
     fprintf('\nWelcome to Plotly! If you are new to Plotly please enter: >> plotlyhelp to get started!\n\n')
 end
 
-% helper message function 
+% helper message function
 function message = permissionMessage(spec)
     message = ['\n\nShoot! We tried to ' spec ' to the MATLAB toolbox \n',...
             'directory, but were denied write permission. You''ll have to add\n',...
diff --git a/plotlysetup_online.m b/plotlysetup_online.m
index 26662574..fa02012c 100644
--- a/plotlysetup_online.m
+++ b/plotlysetup_online.m
@@ -3,7 +3,7 @@ function plotlysetup_online(username, api_key, varargin)
     % CALL: plotlysetup_online('username','api_key','kwargs'[optional]);
     % WHERE: kwargs are of the form ..,'property,value,'property',value,...
     % VALID PROPERTIES [OPTIONAL]: 'stream_ids' -> your stream ids [cell array] (found online)
-    %                              'plotly_domain' -> your desired REST API enpoint [string]
+    %                              'plotly_domain' -> your desired REST API endpoint [string]
     %                              'plotly_streaming_domain'-> your desired Stream API endpoint [string]
     % [1] adds plotly api to matlabroot/toolboxes. If successful do [2]
     % [2] adds plotly api to searchpath via startup.m of matlabroot and/or userpath
@@ -48,39 +48,38 @@ function plotlysetup_online(username, api_key, varargin)
         try
             %embed the api to the matlabroot/toolbox dir.
             fprintf('\nAdding Plotly to MATLAB toolbox directory ...  ');
-            
+
             %plotly folder in the matlab/toolbox dir.
             plotlyToolboxPath = fullfile(matlabroot,'toolbox','plotly');
-            
+
             if (exist(plotlyToolboxPath,'dir')) %check for overwrite...
                 fprintf(['\n\n[UPDATE]: \n\nHey! We see that a copy of Plotly has previously been added to\n' ...
                     'your Matlab toolboxes. Would you like us to overwrite it with:\n' plotlyFolderPath ' ? \n'...
                     'Careful! You may lose data saved to this Plotly directory.\n\n']);
-                
+
                 overwrite = input('Overwrite (y/n) ? : ','s');
-                
+
                 if (strcmpi(overwrite,'y'));
                     fprintf('\n[OVERWRITE]:\n\nOverwriting Plotly! ... Done \n');
                 else
                     fprintf('\n[NO OVERWRITE]:\n\nDid not overwrite Plotly! ... Done \n');
                 end
             else %toolbox Plotly not yet created
-                
-                %worked (without interuption)...just a formatting thing!
+                %worked (without interruption)...just a formatting thing!
                 fprintf('Done\n');
-                
+
                 %make the plotlyToolboxPath dir.
                 status = mkdir(plotlyToolboxPath);
-                
+
                 %set status to overwrite
                 overwrite = 'y';
-                
+
                 %check that the folder was created
                 if (status == 0)
                     error('plotly:savePlotly', permissionMessage('save the Plotly folder'));
                 end
             end
-            
+
             if strcmpi(overwrite,'y')
                 %move a copy of the Plotly api to matlab root directory
                 [status, msg, messid] = copyfile(plotlyFolderPath,plotlyToolboxPath);
@@ -91,13 +90,13 @@ function plotlysetup_online(username, api_key, varargin)
                     end
                 end
             end
-            
+
             %add it to the searchpath (startup.m will handle this next time!)
             addpath(genpath(plotlyToolboxPath),'-end');
-            
+
             %save plotly api searchpath to startup.m files (only do this if we actually were able to store the api in mtlroot/toolbox!)
             fprintf('Saving Plotly to MATLAB search path via startup.m ... ');
-            
+
             %check for a startup.m file in matlab rootpath (we want to add one here)
             startupFile = [];
             startupFileRootPath = fullfile(matlabroot,'toolbox','local','startup.m');
@@ -109,15 +108,15 @@ function plotlysetup_online(username, api_key, varargin)
                 end
                 startupFile = {startupFileRootPath}; %needed because MATLAB only looks for startup.m when first opened.
             end
-            
+
             %check for all startup.m file in searchpath
             startupFile = [startupFile; cell(which('startup.m','-all'))];
             %write the addpath - plotly api to the startup.m files
             [warnings] = addplotlystartup(startupFile);
-            
+
             %worked!
             fprintf(' Done\n');
-            
+
             %print any addplotlydstatup warnings;
             w = cellfun(@isempty,warnings);
             if find(~w)
@@ -125,7 +124,7 @@ function plotlysetup_online(username, api_key, varargin)
                 exception.warnings = warnings;
                 fprintf(warnings{find(~w)});
             end
-            
+
         catch exception %copying to toolbox/writing to startup.m permission problem catch...
             fprintf(['\n\n' exception.identifier exception.message '\n\n']);
         end
@@ -155,7 +154,7 @@ function plotlysetup_online(username, api_key, varargin)
                 'Your stream_ids, plotly_domain, and plotly_streaming domain were not set. \n',...
                 'Questions? Please post on https://community.plotly.com/c/api/matlab/22.']);
         end
-        
+
         for n = 1:2:numel(varargin)
             %check for correct property names
             if isempty(intersect(varargin{n},{'stream_ids','plotly_domain','plotly_streaming_domain'}))
@@ -197,7 +196,7 @@ function plotlysetup_online(username, api_key, varargin)
                 fprintf('Done\n');
             end
         end
-        
+
     catch exception %writing varargin problem catch...
         fprintf(['\n\n' exception.identifier exception.message '\n\n']);
     end
@@ -206,7 +205,7 @@ function plotlysetup_online(username, api_key, varargin)
     fprintf('\nWelcome to Plotly! If you are new to Plotly please enter: >> plotlyhelp to get started!\n\n')
 end
 
-%helper message function 
+%helper message function
 function message = permissionMessage(spec)
     message = ['\n\nShoot! We tried to ' spec ' to the MATLAB toolbox \n',...
             'directory, but were denied write permission. You''ll have to add\n',...
@@ -219,4 +218,3 @@ function plotlysetup_online(username, api_key, varargin)
             '>>saveplotlyconfig(''your_base_domain'')\n\n',...
             'Questions? Ask https://community.plotly.com/c/api/matlab/\n\n'];
 end
-
