Skip to content

Commit 6433175

Browse files
committed
use custom renderer for sphinx-gallery
1 parent 65ea73f commit 6433175

File tree

6 files changed

+33
-36
lines changed

6 files changed

+33
-36
lines changed

examples/plot_plotly.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@
3131
name='Below',
3232
)
3333

34-
data = [trace_0, trace_1]
35-
res = plotly.offline.plot(data)
34+
fig = go.Figure(data=[trace_0, trace_1])
35+
plotly.io.show(fig)
3636

examples/plot_plotly_3d.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@
2828
)
2929
)
3030
fig = go.Figure(data=data, layout=layout)
31-
plotly.offline.plot(fig)
31+
plotly.io.show(fig)

plotly/io/_base_renderers.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
import os
77

88
import six
9-
from plotly.io import to_json, to_image
9+
from plotly.io import to_json, to_image, write_image
1010
from plotly import utils, optional_imports
1111
from plotly.io._orca import ensure_server
1212
from plotly.offline.offline import _get_jconfig, get_plotlyjs
13+
from plotly.offline import plot
14+
from plotly.tools import return_figure_from_figure_or_data
1315

1416
ipython_display = optional_imports.get_module('IPython.display')
1517
IPython = optional_imports.get_module('IPython')
@@ -631,3 +633,21 @@ def render(self, fig_dict):
631633
default_height='100%',
632634
)
633635
open_html_in_browser(html, self.using, self.new, self.autoraise)
636+
637+
638+
class SphinxGalleryRenderer(ExternalRenderer):
639+
640+
def render(self, fig_dict):
641+
stack = inspect.stack()
642+
# Name of script from which plot function was called is retrieved
643+
try:
644+
filename = stack[3].filename # let's hope this is robust...
645+
except: #python 2
646+
filename = stack[3][1]
647+
filename_root, _ = os.path.splitext(filename)
648+
filename_html = filename_root + '.html'
649+
filename_png = filename_root + '.png'
650+
figure = return_figure_from_figure_or_data(fig_dict, True)
651+
_ = plot(fig_dict, auto_open=False,
652+
filename=filename_html)
653+
write_image(figure, filename_png)

plotly/io/_renderers.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
from plotly.io._base_renderers import (
1313
MimetypeRenderer, ExternalRenderer, PlotlyRenderer, NotebookRenderer,
1414
KaggleRenderer, ColabRenderer, JsonRenderer, PngRenderer, JpegRenderer,
15-
SvgRenderer, PdfRenderer, BrowserRenderer, IFrameRenderer)
15+
SvgRenderer, PdfRenderer, BrowserRenderer, IFrameRenderer,
16+
SphinxGalleryRenderer)
1617
from plotly.io._utils import validate_coerce_fig_to_dict
1718

1819
ipython = optional_imports.get_module('IPython')
@@ -394,6 +395,7 @@ def show(fig, renderer=None, validate=True, **kwargs):
394395
renderers['chrome'] = BrowserRenderer(config=config, using='chrome')
395396
renderers['chromium'] = BrowserRenderer(config=config, using='chromium')
396397
renderers['iframe'] = IFrameRenderer(config=config)
398+
renderers['sphinx'] = SphinxGalleryRenderer()
397399

398400
# Set default renderer
399401
# --------------------

plotly/io/_sg_scraper.py

+1-23
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,10 @@
66
import inspect, os
77

88
import plotly
9-
plotly_plot = plotly.offline.plot
109
from glob import glob
1110
import shutil
1211

13-
def _patched_plotly_plot(*args, **kwargs):
14-
"""
15-
Monkey-patched version of plotly.offline.plot, in order to save
16-
html file with the same name as python script. Also, a static
17-
png file is saved.
18-
"""
19-
stack = inspect.stack()
20-
# Name of script from which plot function was called is retrieved
21-
try:
22-
filename = stack[1].filename # let's hope this is robust...
23-
except: #python 2
24-
filename = stack[1][1]
25-
filename_root, _ = os.path.splitext(filename)
26-
filename_html = filename_root + '.html'
27-
filename_png = filename_root + '.png'
28-
figure = plotly.tools.return_figure_from_figure_or_data(args[0], True)
29-
res = plotly_plot(*args, auto_open=False,
30-
filename=filename_html)
31-
plotly.io.write_image(figure, filename_png)
32-
return res
33-
34-
plotly.offline.plot = _patched_plotly_plot
12+
plotly.io.renderers.default = 'sphinx'
3513

3614

3715
def plotly_sg_scraper(block, block_vars, gallery_conf, **kwargs):

plotly/tests/test_orca/test_sg_scraper.py

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import plotly
2-
plotly_plot = plotly.offline.plot
32
import os
43
import shutil
54
import pytest
@@ -39,25 +38,23 @@ def execute_plotly_example():
3938
name='Above',
4039
)
4140

42-
data = [trace_0]
43-
res = plotly.offline.plot(data)
41+
fig = go.Figure(data=[trace_0])
42+
plotly.io.show(fig)
4443

4544

46-
def test_monkey_patching():
45+
def test_scraper():
4746
from plotly.io._sg_scraper import plotly_sg_scraper
4847
# test that monkey-patching worked ok
49-
assert plotly_plot != plotly.offline.plot
48+
assert plotly.io.renderers.default == 'sphinx'
5049
# Use dummy values for arguments of plotly_sg_scraper
5150
block = '' # we don't need actually code
5251
import tempfile
5352
tempdir = tempfile.mkdtemp()
5453
gallery_conf = {'src_dir':tempdir,
55-
'examples_dirs':'plotly/tests/test_io'}
54+
'examples_dirs':'plotly/tests/test_orca'}
5655
names = iter(['0', '1', '2'])
5756
block_vars = {'image_path_iterator':names}
5857
execute_plotly_example()
5958
res = plotly_sg_scraper(block, block_vars, gallery_conf)
6059
shutil.rmtree(tempdir)
6160
assert ".. raw:: html" in res
62-
plotly.offline.plot = plotly_plot
63-
assert plotly_plot == plotly.offline.plot

0 commit comments

Comments
 (0)