From 4c33fc5472161329b6022af705ad07f13354d6be Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 09:59:27 -0500 Subject: [PATCH 01/15] 'k' is not a valid plotly color string, use 'black' instead 's' is not a valid plotly symbol string, use 'circle' instead 'plasma' is not a valid plotly colorscale, use 'viridis' instead --- examples/reference/elements/plotly/Scatter.ipynb | 4 ++-- examples/reference/elements/plotly/Surface.ipynb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/reference/elements/plotly/Scatter.ipynb b/examples/reference/elements/plotly/Scatter.ipynb index 83cde2c212..a49694af41 100644 --- a/examples/reference/elements/plotly/Scatter.ipynb +++ b/examples/reference/elements/plotly/Scatter.ipynb @@ -37,7 +37,7 @@ "metadata": {}, "outputs": [], "source": [ - "%%opts Scatter (color='k' symbol='s' size=10)\n", + "%%opts Scatter (color='black' symbol='circle' size=10)\n", "np.random.seed(42)\n", "coords = [(i, np.random.random()) for i in range(20)]\n", "hv.Scatter(coords)" @@ -56,7 +56,7 @@ "metadata": {}, "outputs": [], "source": [ - "%%opts Scatter (color='k' symbol='x' size=10)\n", + "%%opts Scatter (color='black' symbol='x' size=10)\n", "hv.Scatter(coords)[0:12] + hv.Scatter(coords)[12:20]" ] }, diff --git a/examples/reference/elements/plotly/Surface.ipynb b/examples/reference/elements/plotly/Surface.ipynb index 09cd76e23d..09c71fbc4f 100644 --- a/examples/reference/elements/plotly/Surface.ipynb +++ b/examples/reference/elements/plotly/Surface.ipynb @@ -40,7 +40,7 @@ "metadata": {}, "outputs": [], "source": [ - "%%opts Surface [width=500 height=500] (cmap='plasma')\n", + "%%opts Surface [width=500 height=500] (cmap='viridis')\n", "hv.Surface(np.sin(np.linspace(0,100*np.pi*2,10000)).reshape(100,100))" ] }, From 53caa47cd17e054d3d2d18324e4a57c06d5a3af8 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 10:04:48 -0500 Subject: [PATCH 02/15] Rename global plotly library object in JavaScript The global plotly library object was renamed from 'Plotly' to '_Plotly' in plotly.py 3.4.0 to avoid a naming conflict when a Jupyter Notebook heading contained the text 'Plotly' See: https://github.com/plotly/plotly.py/issues/816 https://github.com/plotly/plotly.py/pull/1250 --- holoviews/plotting/plotly/plotlywidgets.js | 4 ++-- holoviews/plotting/plotly/renderer.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/holoviews/plotting/plotly/plotlywidgets.js b/holoviews/plotting/plotly/plotlywidgets.js index 2496a4db36..7d035d998e 100644 --- a/holoviews/plotting/plotly/plotlywidgets.js +++ b/holoviews/plotting/plotly/plotlywidgets.js @@ -32,8 +32,8 @@ var PlotlyMethods = { plot.data[i][key] = data.data[i][key]; } } - Plotly.relayout(plot, data.layout); - Plotly.redraw(plot); + _Plotly.relayout(plot, data.layout); + _Plotly.redraw(plot); } } diff --git a/holoviews/plotting/plotly/renderer.py b/holoviews/plotting/plotly/renderer.py index 3a61d5ea2c..f205282fb5 100644 --- a/holoviews/plotting/plotly/renderer.py +++ b/holoviews/plotting/plotly/renderer.py @@ -19,8 +19,8 @@ plot.data[i][key] = obj[key]; }}); }}); -Plotly.relayout(plot, data.layout); -Plotly.redraw(plot); +_Plotly.relayout(plot, data.layout); +_Plotly.redraw(plot); """ PLOTLY_WARNING = """ @@ -98,7 +98,7 @@ def _figure_data(self, plot, fmt=None, divuuid=None, comm=True, as_script=False, '') script = '\n'.join([ - 'Plotly.plot("{id}", {data}, {layout}, {config}).then(function() {{', + '_Plotly.plot("{id}", {data}, {layout}, {config}).then(function() {{', ' var elem = document.getElementById("{id}.loading"); elem.parentNode.removeChild(elem);', '}})']).format(id=divuuid, data=jdata, From a25e1d835a9cbabcf79ad53b679858eefea1ebce Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 10:09:22 -0500 Subject: [PATCH 03/15] Replace use of deprecated graph object classes Graph objects are now structured hierarchically, so go.Marker was deprecated in favor of go.layout.Marker. The use of these classes is fully optional, and they can be replaced by plain dict instances in cases where local validation, tab completions, and docstrings aren't needed. --- holoviews/plotting/plotly/chart3d.py | 5 ++--- holoviews/plotting/plotly/element.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/holoviews/plotting/plotly/chart3d.py b/holoviews/plotting/plotly/chart3d.py index 71a7df7938..aadecd35d7 100644 --- a/holoviews/plotting/plotly/chart3d.py +++ b/holoviews/plotting/plotly/chart3d.py @@ -3,7 +3,6 @@ from matplotlib.cm import get_cmap from plotly import colors from plotly.tools import FigureFactory as FF -from plotly.graph_objs import Scene, XAxis, YAxis, ZAxis try: from plotly.figure_factory._trisurf import trisurf as trisurface @@ -50,8 +49,8 @@ def init_layout(self, key, element, ranges): else: opts['aspectmode'] = 'manual' opts['aspectratio'] = self.aspect - scene = Scene(xaxis=XAxis(xaxis), yaxis=YAxis(yaxis), - zaxis=ZAxis(zaxis), **opts) + scene = go.layout.Scene(xaxis=xaxis, yaxis=yaxis, + zaxis=zaxis, **opts) return dict(width=self.width, height=self.height, title=self._format_title(key, separator=' '), diff --git a/holoviews/plotting/plotly/element.py b/holoviews/plotting/plotly/element.py index b932d7dda8..a384672f52 100644 --- a/holoviews/plotting/plotly/element.py +++ b/holoviews/plotting/plotly/element.py @@ -191,7 +191,7 @@ def init_layout(self, key, element, ranges, xdim=None, ydim=None): options['yaxis'] = yaxis l, b, r, t = self.margins - margin = go.Margin(l=l, r=r, b=b, t=t, pad=4) + margin = go.layout.Margin(l=l, r=r, b=b, t=t, pad=4) return go.Layout(width=self.width, height=self.height, title=self._format_title(key, separator=' '), plot_bgcolor=self.bgcolor, margin=margin, From d1fb68b7712f1227e04667fc3c2d682d8ad2e3f9 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 10:11:33 -0500 Subject: [PATCH 04/15] The figure.data property is now a tuple rather than a list, so it cannot be mutated in place. Instead, the add_traces method is used to append additional traces to the figure. --- holoviews/plotting/plotly/element.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/holoviews/plotting/plotly/element.py b/holoviews/plotting/plotly/element.py index a384672f52..c632c731ac 100644 --- a/holoviews/plotting/plotly/element.py +++ b/holoviews/plotting/plotly/element.py @@ -268,8 +268,8 @@ def generate_plot(self, key, ranges): if figure is None: figure = fig else: - figure['data'].extend(fig['data']) - + figure.add_traces(fig.data) + print(type(self), self.projection) layout = self.init_layout(key, element, ranges) figure['layout'].update(layout) self.handles['fig'] = figure From 8b7ecf0c3e978127d8c34f1f427e0b97f54c5dc4 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 10:15:56 -0500 Subject: [PATCH 05/15] Object arrays (like annotations) are now stored as tuples rather than lists so they cannot be extended in place. The += operator can be used instead to replace the object array with an extended version of itself. --- holoviews/plotting/plotly/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holoviews/plotting/plotly/util.py b/holoviews/plotting/plotly/util.py index bd72369985..f80be6d9e5 100644 --- a/holoviews/plotting/plotly/util.py +++ b/holoviews/plotting/plotly/util.py @@ -12,7 +12,7 @@ def add_figure(fig, subfig, r, c, idx): fig['layout']['xaxis%s'%ref].update(layout.get('xaxis', {})) fig['layout']['yaxis%s'%ref].update(layout.get('yaxis', {})) - fig['layout']['annotations'].extend(layout.get('annotations', [])) + fig['layout']['annotations'] += layout.get('annotations', ()) for d in subfig['data']: fig.append_trace(d, r+1, c+1) From 8bf678d28f9965dbce2c902c85706258cb09d0de Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 10:18:07 -0500 Subject: [PATCH 06/15] Graph objects are no longer dict subclasses, they are wrappers around dict instances with some dict-like methods. The to_plotly_json method is used to convert a graph object into a Python dict. --- holoviews/plotting/plotly/renderer.py | 7 +++---- holoviews/plotting/plotly/util.py | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/holoviews/plotting/plotly/renderer.py b/holoviews/plotting/plotly/renderer.py index f205282fb5..64cd5fd2d0 100644 --- a/holoviews/plotting/plotly/renderer.py +++ b/holoviews/plotting/plotly/renderer.py @@ -70,8 +70,7 @@ def diff(self, plot, serialize=True): Returns a json diff required to update an existing plot with the latest plot data. """ - diff = {'data': plot.state.get('data', []), - 'layout': plot.state.get('layout', {})} + diff = plot.state.to_plotly_json() if serialize: return json.dumps(diff, cls=utils.PlotlyJSONEncoder) else: @@ -83,8 +82,8 @@ def _figure_data(self, plot, fmt=None, divuuid=None, comm=True, as_script=False, if divuuid is None: divuuid = plot.id - jdata = json.dumps(figure.get('data', []), cls=utils.PlotlyJSONEncoder) - jlayout = json.dumps(figure.get('layout', {}), cls=utils.PlotlyJSONEncoder) + jdata = json.dumps(figure.data, cls=utils.PlotlyJSONEncoder) + jlayout = json.dumps(figure.layout, cls=utils.PlotlyJSONEncoder) config = {} config['showLink'] = False diff --git a/holoviews/plotting/plotly/util.py b/holoviews/plotting/plotly/util.py index f80be6d9e5..8cd22c7eee 100644 --- a/holoviews/plotting/plotly/util.py +++ b/holoviews/plotting/plotly/util.py @@ -8,7 +8,7 @@ def add_figure(fig, subfig, r, c, idx): axis layout options. """ ref = fig._grid_ref[r][c][0][1:] - layout = replace_refs(subfig['layout'], ref) + layout = replace_refs(subfig['layout'].to_plotly_json(), ref) fig['layout']['xaxis%s'%ref].update(layout.get('xaxis', {})) fig['layout']['yaxis%s'%ref].update(layout.get('yaxis', {})) @@ -21,9 +21,9 @@ def replace_refs(obj, ind): """ Replaces xref and yref to allow combining multiple plots """ - if isinstance(obj, go.graph_objs.PlotlyList): + if isinstance(obj, tuple): return [replace_refs(o, ind) for o in obj] - elif isinstance(obj, go.graph_objs.PlotlyDict): + elif isinstance(obj, dict): new_obj = {} for k, v in obj.items(): if k in ['xref', 'yref']: From 6bb729d02be57158713126e9703924b91dadc144 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 14:51:19 -0500 Subject: [PATCH 07/15] Update plotly in holoviews environment to version 3.4 from the plotly channel --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index b4a74c5289..b426703f2a 100644 --- a/environment.yml +++ b/environment.yml @@ -18,7 +18,7 @@ dependencies: - conda-forge::netcdf4=1.3.1 - conda-forge::ffmpeg - conda-forge::flexx=0.4.1 - - conda-forge::plotly=2.7 + - plotly::plotly=3.4 - bokeh::bokeh=1.0.0 - bokeh::selenium # Testing requirements From d9c8864178c2ab51e7fa8fdf6babe61058642ce0 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 15:10:55 -0500 Subject: [PATCH 08/15] Validate required plotly version --- holoviews/plotting/plotly/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/holoviews/plotting/plotly/__init__.py b/holoviews/plotting/plotly/__init__.py index 0d20a9d7c7..35564629a1 100644 --- a/holoviews/plotting/plotly/__init__.py +++ b/holoviews/plotting/plotly/__init__.py @@ -10,6 +10,14 @@ from .raster import * # noqa (API import) from .plot import * # noqa (API import) from .tabular import * # noqa (API import) +from ...core.util import LooseVersion, VersionError +import plotly + +if LooseVersion(plotly.__version__) < '3.4.0': + raise VersionError( + "The plotly extension requires a plotly version >=3.4.0, " + "please upgrade from plotly %s to a more recent version." + % plotly.__version__, plotly.__version__, '3.4.0') Store.renderers['plotly'] = PlotlyRenderer.instance() From 80b33693bbbb419743cbdaf9a9b44721f6b610ea Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 15:19:08 -0500 Subject: [PATCH 09/15] Replace deprecated append_trace method call with add_trace --- holoviews/plotting/plotly/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holoviews/plotting/plotly/util.py b/holoviews/plotting/plotly/util.py index 8cd22c7eee..6325572d59 100644 --- a/holoviews/plotting/plotly/util.py +++ b/holoviews/plotting/plotly/util.py @@ -14,7 +14,7 @@ def add_figure(fig, subfig, r, c, idx): fig['layout']['yaxis%s'%ref].update(layout.get('yaxis', {})) fig['layout']['annotations'] += layout.get('annotations', ()) for d in subfig['data']: - fig.append_trace(d, r+1, c+1) + fig.add_trace(d, row=r+1, col=c+1) def replace_refs(obj, ind): From 7d99c64b9eb648d0c743aa911b3dff4bf53f2bf6 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 15:21:22 -0500 Subject: [PATCH 10/15] Subplot references ending in 1 (e.g. x1) now have the 1 removed (e.g. x) --- holoviews/tests/plotting/plotly/testplot.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/holoviews/tests/plotting/plotly/testplot.py b/holoviews/tests/plotting/plotly/testplot.py index b14ddfde23..5a295b8bc8 100644 --- a/holoviews/tests/plotting/plotly/testplot.py +++ b/holoviews/tests/plotting/plotly/testplot.py @@ -75,7 +75,7 @@ def test_layout_state(self): layout = Curve([1, 2, 3]) + Curve([2, 4, 6]) state = self._get_plot_state(layout) self.assertEqual(state['data'][0]['y'], np.array([1, 2, 3])) - self.assertEqual(state['data'][0]['yaxis'], 'y1') + self.assertEqual(state['data'][0]['yaxis'], 'y') self.assertEqual(state['data'][1]['y'], np.array([2, 4, 6])) self.assertEqual(state['data'][1]['yaxis'], 'y2') @@ -84,13 +84,13 @@ def test_grid_state(self): for j in [0, 1]}) state = self._get_plot_state(grid) self.assertEqual(state['data'][0]['y'], np.array([0, 0])) - self.assertEqual(state['data'][0]['xaxis'], 'x1') - self.assertEqual(state['data'][0]['yaxis'], 'y1') + self.assertEqual(state['data'][0]['xaxis'], 'x') + self.assertEqual(state['data'][0]['yaxis'], 'y') self.assertEqual(state['data'][1]['y'], np.array([1, 0])) self.assertEqual(state['data'][1]['xaxis'], 'x2') - self.assertEqual(state['data'][1]['yaxis'], 'y1') + self.assertEqual(state['data'][1]['yaxis'], 'y') self.assertEqual(state['data'][2]['y'], np.array([0, 1])) - self.assertEqual(state['data'][2]['xaxis'], 'x1') + self.assertEqual(state['data'][2]['xaxis'], 'x') self.assertEqual(state['data'][2]['yaxis'], 'y2') self.assertEqual(state['data'][3]['y'], np.array([1, 1])) self.assertEqual(state['data'][3]['xaxis'], 'x2') From b454ba4085e6a2c8044591b5d8527e2ecb0d2789 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 15:23:04 -0500 Subject: [PATCH 11/15] Axis ranges are now returned as tuples not lists --- holoviews/tests/plotting/plotly/testplot.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/holoviews/tests/plotting/plotly/testplot.py b/holoviews/tests/plotting/plotly/testplot.py index 5a295b8bc8..cff4c9238f 100644 --- a/holoviews/tests/plotting/plotly/testplot.py +++ b/holoviews/tests/plotting/plotly/testplot.py @@ -52,7 +52,7 @@ def test_curve_state(self): curve = Curve([1, 2, 3]) state = self._get_plot_state(curve) self.assertEqual(state['data'][0]['y'], np.array([1, 2, 3])) - self.assertEqual(state['layout']['yaxis']['range'], [1, 3]) + self.assertEqual(state['layout']['yaxis']['range'], (1, 3)) def test_scatter3d_state(self): scatter = Scatter3D(([0,1], [2,3], [4,5])) @@ -60,16 +60,16 @@ def test_scatter3d_state(self): self.assertEqual(state['data'][0]['x'], np.array([0, 1])) self.assertEqual(state['data'][0]['y'], np.array([2, 3])) self.assertEqual(state['data'][0]['z'], np.array([4, 5])) - self.assertEqual(state['layout']['scene']['xaxis']['range'], [0, 1]) - self.assertEqual(state['layout']['scene']['yaxis']['range'], [2, 3]) - self.assertEqual(state['layout']['scene']['zaxis']['range'], [4, 5]) + self.assertEqual(state['layout']['scene']['xaxis']['range'], (0, 1)) + self.assertEqual(state['layout']['scene']['yaxis']['range'], (2, 3)) + self.assertEqual(state['layout']['scene']['zaxis']['range'], (4, 5)) def test_overlay_state(self): layout = Curve([1, 2, 3]) * Curve([2, 4, 6]) state = self._get_plot_state(layout) self.assertEqual(state['data'][0]['y'], np.array([1, 2, 3])) self.assertEqual(state['data'][1]['y'], np.array([2, 4, 6])) - self.assertEqual(state['layout']['yaxis']['range'], [1, 6]) + self.assertEqual(state['layout']['yaxis']['range'], (1, 6)) def test_layout_state(self): layout = Curve([1, 2, 3]) + Curve([2, 4, 6]) From 322527adfbaeed55dd751bc6a92f29577620cc21 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 17:47:16 -0500 Subject: [PATCH 12/15] Remove unused import causing flake8 failure --- holoviews/plotting/plotly/util.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/holoviews/plotting/plotly/util.py b/holoviews/plotting/plotly/util.py index 6325572d59..93e767e81e 100644 --- a/holoviews/plotting/plotly/util.py +++ b/holoviews/plotting/plotly/util.py @@ -1,6 +1,3 @@ -import plotly.graph_objs as go - - def add_figure(fig, subfig, r, c, idx): """ Combines a figure with an existing figure created with From b7ebc6c2d8ec87bf5bda993e35b98801c3384779 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 18:22:17 -0500 Subject: [PATCH 13/15] When exporting to standalone html the plotly library is loaded as Plotly but when loaded into the notebook it is loaded as _Plotly. (before this commit figures rendered properly in the jupyter notebook but an error was raised when output to an HTML file that _Plotly is not defined) --- holoviews/plotting/plotly/plotlywidgets.js | 5 +++-- holoviews/plotting/plotly/renderer.py | 8 +++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/holoviews/plotting/plotly/plotlywidgets.js b/holoviews/plotting/plotly/plotlywidgets.js index 7d035d998e..8e246f41f8 100644 --- a/holoviews/plotting/plotly/plotlywidgets.js +++ b/holoviews/plotting/plotly/plotlywidgets.js @@ -32,8 +32,9 @@ var PlotlyMethods = { plot.data[i][key] = data.data[i][key]; } } - _Plotly.relayout(plot, data.layout); - _Plotly.redraw(plot); + var plotly = window._Plotly || window.Plotly; + plotly.relayout(plot, data.layout); + plotly.redraw(plot); } } diff --git a/holoviews/plotting/plotly/renderer.py b/holoviews/plotting/plotly/renderer.py index 64cd5fd2d0..2a26316552 100644 --- a/holoviews/plotting/plotly/renderer.py +++ b/holoviews/plotting/plotly/renderer.py @@ -19,8 +19,9 @@ plot.data[i][key] = obj[key]; }}); }}); -_Plotly.relayout(plot, data.layout); -_Plotly.redraw(plot); +var plotly = window._Plotly || window.Plotly; +plotly.relayout(plot, data.layout); +plotly.redraw(plot); """ PLOTLY_WARNING = """ @@ -97,7 +98,8 @@ def _figure_data(self, plot, fmt=None, divuuid=None, comm=True, as_script=False, '') script = '\n'.join([ - '_Plotly.plot("{id}", {data}, {layout}, {config}).then(function() {{', + 'var plotly = window._Plotly || window.Plotly;' + 'plotly.plot("{id}", {data}, {layout}, {config}).then(function() {{', ' var elem = document.getElementById("{id}.loading"); elem.parentNode.removeChild(elem);', '}})']).format(id=divuuid, data=jdata, From e5a4d4f9ae7bf2d2cfcf5ef30f20e27241a406a7 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 24 Nov 2018 18:29:58 -0500 Subject: [PATCH 14/15] Run conda env update with travis_wait command to (hopefully) avoid CI timeout. See https://docs.travis-ci.com/user/common-build-problems/#build-times-out-because-no-output-was-received Prior intermittent CI error: ``` ... $ conda env update -n holoviews -q -f environment.yml Solving environment: ...working... done Preparing transaction: ...working... done Verifying transaction: ...working... done Executing transaction: ...working... dbus post-link :: /etc/machine-id not found .. dbus post-link :: .. using /proc/sys/kernel/random/boot_id No output has been received in the last 10m0s, this potentially indicates a stalled build or something wrong with the build itself. ``` --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a56894c8f6..50cb3a1939 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,7 +28,7 @@ install: # Useful for debugging any issues with conda - conda info -a - conda create -q -n holoviews python=$TRAVIS_PYTHON_VERSION - - conda env update -n holoviews -q -f environment.yml + - travis_wait conda env update -n holoviews -q -f environment.yml - source activate holoviews - python setup.py develop - conda env export From ed65c149205f5e2bc9bad418c460e2363f8fe817 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sun, 25 Nov 2018 05:47:09 -0500 Subject: [PATCH 15/15] remove stray print statement --- holoviews/plotting/plotly/element.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holoviews/plotting/plotly/element.py b/holoviews/plotting/plotly/element.py index c632c731ac..86a3e85006 100644 --- a/holoviews/plotting/plotly/element.py +++ b/holoviews/plotting/plotly/element.py @@ -269,7 +269,7 @@ def generate_plot(self, key, ranges): figure = fig else: figure.add_traces(fig.data) - print(type(self), self.projection) + layout = self.init_layout(key, element, ranges) figure['layout'].update(layout) self.handles['fig'] = figure