16

I have built a chart which I want to embed into an HTML file. If I use plotly online, it works as intended. However, if I use OFFLINE the offline chart works (i.e. It opens up a separate HTML chart with it in it), but it is not embedding into the HTML (nick.html) i.e. the iframe is empty.

This is my code:

fig = dict(data=data, layout=layout)
plotly.tools.set_credentials_file(username='*****', api_key='*****')
aPlot = plotly.offline.plot(fig, config={"displayModeBar": False}, show_link=False,
                             filename='pandas-continuous-error-bars.html')

html_string = '''
<html>
    <head>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
        <style>body{ margin:0 100; background:whitesmoke; }</style>
    </head>
    <body>
        <h1>Monthly Report</h1>

        <!-- *** Section 1 *** --->
        <h2></h2>
        <iframe width="1000" height="550" frameborder="0" seamless="seamless" scrolling="no" \
src="''' + aPlot + '''.embed?width=800&height=550"></iframe>
        <p> (Insights).</p>


    </body>
</html>'''

f = open("C:/Users/nicholas\Desktop/nick.html",'w')
f.write(html_string)
f.close()

Anyone know why it isn't embedding and how to fix it?

1 Answer 1

20
+50

aPlot is the filename of your Plotly file.

In your iframe you add .embed?width=800&height=550 to the filename which results in a filename which does not exist.

When you remove this string, i.e. src="''' + aPlot + '''", it should work.

Instead of embedding the whole HTML file you can also use the approach suggest here which generates a smaller HTML file, i.e. generate a div with all the relevant information and include plotly.js in your header.

import plotly

fig = {'data': [{'x': [1,2,3],
                  'y': [2,5,3],
                  'type': 'bar'}],
      'layout': {'width': 800,
                 'height': 550}}

aPlot = plotly.offline.plot(fig, 
                            config={"displayModeBar": False}, 
                            show_link=False, 
                            include_plotlyjs=False, 
                            output_type='div')

html_string = '''
<html>
    <head>
      <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
      <style>body{ margin:0 100; background:whitesmoke; }</style>
    </head>
    <body>
      <h1>Monthly Report</h1>
      ''' + aPlot + '''
    </body>
</html>'''

with open("nick.html", 'w') as f:
    f.write(html_string)
Sign up to request clarification or add additional context in comments.

2 Comments

Hey, thank you. I'm just boarding a plane so can't check if it works but the logic looks good and I understand, so thank you very much :)
@RevolucionforMonica: As far as I know the Stackoverflow page doesn't support running Python code, only Javascript. So I guess, no, it won't run on Stackoverflow.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.